地址映射
為了保證CPU執行指令時可正確訪問存儲單元,需將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址,這一過程稱為地址映射 地址映射原理及實現: 1、 地址映射結構 在TornadotargethvmLib.h文件中 typedef struct phys_mem_desc { void *virtualAddr; void *physicalAddr; UINT len; UINT initialStateMask; /* mask parameter to vmStateSet */ UINT initialState; /* state parameter to vmStateSet */ } PHYS_MEM_DESC; virtualAddr:你要映射的虛擬地址 physicalAddr:硬件設計時定義的實際物理地址 len;要進行映射的地址長度 initialStateMask:可以初始化的地址狀態: 有如下狀態: #define VM_STATE_MASK_VALID 0x03 #define VM_STATE_MASK_WRITABLE 0x0c #define VM_STATE_MASK_CACHEABLE 0x30 #define VM_STATE_MASK_MEM_COHERENCY 0x40 #define VM_STATE_MASK_GUARDED 0x80 不同的CPU芯片類型還有其特殊狀態 initialState:實際初始化的地址狀態: 有如下狀態: #define VM_STATE_VALID 0x01 #define VM_STATE_VALID_NOT 0x00 #define VM_STATE_WRITABLE 0x04 #define VM_STATE_WRITABLE_NOT 0x00 #define VM_STATE_CACHEABLE 0x10 #define VM_STATE_CACHEABLE_NOT 0x00 同樣不同的CPU芯片類型還有其特殊狀態 2、 初始化結構 在 Tornadotargetconfigads860sysLib.c 文件中: PHYS_MEM_DESC sysPhysMemDesc [] = { { (void *) LOCAL_MEM_LOCAL_ADRS, (void *) LOCAL_MEM_LOCAL_ADRS, LOCAL_MEM_SIZE , VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE }, { (void *) BCSR0, (void *) BCSR0, 0x00001000, /* 4 k - Board Control and Status */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT | VM_STATE_GUARDED }, …… { (void *) INTERNAL_MEM_MAP_ADDR, (void *) INTERNAL_MEM_MAP_ADDR, INTERNAL_MEM_MAP_SIZE, /* 64 k - Internal Memory Map */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT | VM_STATE_GUARDED }, { (void *) ROM_BASE_ADRS, (void *) ROM_BASE_ADRS, ROM_SIZE, /* Flach memory */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE , VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT } }; 上面結構中是缺省地址映射。 3、 地址初始化 在Tornadotargetsrcconfig usrMmuInit.c 文件中 通過函數usrMmuInit使地址映射生效 4、 實現映射: 如你定義flash地址為0x04000000開始的8Mbyte地址,則可以如下進行地址映射 { (void *) 0x04000000, (void *) 0x04000000, 0x00800000, /* 8 m - Flash window 1 */ VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE, VM_STATE_VALID | VM_STATE_WRITABLE }, 5、 注意 地址映射zui小單位為1頁,4K大小,所以len值zui小為:0x00001000。 |
上一篇:學習單片機的八大步驟
下一篇:什么是變頻技術
全年征稿/資訊合作
聯系郵箱:1271141964@qq.com
免責聲明
- 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
- 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
- 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
- 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
CIEME2025第二十三屆中國國際裝備制造業博覽會
展會城市:沈陽市展會時間:2025-09-01