地址分配和存儲(chǔ)器映射_第1頁(yè)
地址分配和存儲(chǔ)器映射_第2頁(yè)
地址分配和存儲(chǔ)器映射_第3頁(yè)
地址分配和存儲(chǔ)器映射_第4頁(yè)
地址分配和存儲(chǔ)器映射_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在嵌入式編程里,特別是32bit CPU里,各種各樣五花八門的動(dòng)作是CPU通過對(duì)外設(shè)的驅(qū)動(dòng)來完成的.因?yàn)榈讓泳幊檀蟛糠止ぷ骶褪峭庠O(shè)編程。 CPU本身幾乎每一種外設(shè)都是通過讀寫設(shè)備上的寄存器來進(jìn)行操作的。外設(shè)寄存器也稱為“I/O端口”,通常包括:控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器三大類,而且一個(gè)外設(shè)的寄存器通常被連續(xù)地編址。注意,這里的外設(shè)是相對(duì)于CPU來講的,比如S3C2440除了ARM920T的內(nèi)核以外,還在同一塊CPU里集成很多模塊,這一些模塊也稱為外設(shè)。CPU對(duì)外設(shè)IO端口物理地址的編址方式 有兩種:一種是I/O映射方式(I/Omapped)稱為端口映射,另一種是存儲(chǔ)空間映射方式(Mem

2、orymapped),稱為內(nèi)存映射。而具體采用哪一種則取決于CPU的體系結(jié)構(gòu)。內(nèi)存映射有些體系結(jié)構(gòu)的CPU(如,PowerPC、m68k等)通常只實(shí)現(xiàn)一個(gè)物理地址空間(RAM)。在這種情況下,外設(shè) I/O端口的物理地址就被映射到CPU的單一物理地址空間中,而成為存儲(chǔ)空間的一部分。此時(shí),CPU可以象訪問一個(gè)內(nèi)存單元那樣訪問外設(shè)I/O端口,而不需要 設(shè)立專門的外設(shè)I/O指令。這就是所謂的“存儲(chǔ)空間映射方式”(Memorymapped)。ARM體系的CPU均采用這一模式.簡(jiǎn)而言之,就是內(nèi)存(一般是SDRAM)與外設(shè)寄存器統(tǒng)一編址。端口映射而另外一些體系結(jié)構(gòu)的CPU(典型地如X86)則為外設(shè)專門實(shí)現(xiàn)了

3、一個(gè)單獨(dú)地地址空間,稱為“I/O地址空間”或者“I/O端口空間”。這是一個(gè) 與CPU地RAM物理地址空間不同的地址空間,所有外設(shè)的I/O端口均在這一空間中進(jìn)行編址。CPU通過設(shè)立專門的I/O指令(如X86的IN和OUT指 令)來訪問這一空間中的地址單元(也即 I/O端口)。這就是所謂的“I/O映射方式”(I/Omapped)。與RAM物理地址空間相比,I/O地址空間通常都比較小,如x86 CPU的I/O空間就只有64KB(00xffff)。這是“I/O映射方式”的一個(gè)主要缺點(diǎn)。而且必須要專門的匯編語(yǔ)言才能處理.內(nèi)存映射模式下,對(duì)寄存器的訪問就是某一個(gè)地址的操作,因此C語(yǔ)言的指針即可完成此操作。

4、這樣編程相當(dāng)方便。Linux 最早是在在X86運(yùn)行,對(duì)硬件地址采用端口映射,后來又?jǐn)U展到ARM之類運(yùn)行.為了簡(jiǎn)化操作,Linux在所以CPU上都采用I/O端口概念.如果是象ARM這樣內(nèi)存映射.也被模擬成端口.SOC的外設(shè)地址編址-對(duì)于S3C2440/S3C6410這種集成很多外設(shè)模塊的SOC來說,外設(shè)的地址編址分成兩種類型。一種是CPU內(nèi)部集成的外設(shè),這里物理地址是固定的。這個(gè)查CPU的DataSheet即可知道。另外一種是物理上與CPU分離的IC,如Nor Flash,SDRAM網(wǎng)絡(luò)控制器,它們通過片選信號(hào)來確定自己的物理地址.還有一類IC的不直接映射到物理空間之上。這一類往往通過相應(yīng)寄存器

5、來間接控制。不在此討論之列內(nèi)部模塊固定地址比如S3C2440內(nèi)部模塊地址S3C6410的映射地址 外部模塊地址分配在CPU上都會(huì)引出多個(gè)片選線。每一個(gè)片選線表示對(duì)應(yīng)一個(gè)固定的地址范圍,在術(shù)語(yǔ)上稱為(Bank).以S3C2440為例,參見如下對(duì)應(yīng)關(guān)系在硬件設(shè)計(jì)上,第一片的SDRAM的片選線接在nGCS36上,參考上表,這片SDRAM的物理地理就是0x30000000.DM9000的網(wǎng)絡(luò)控制接在nGCS3這個(gè)硬件聯(lián)線上,這樣網(wǎng)絡(luò)處理器的硬件地址起始地址在0x18000000.以S3C6410為為例,它的第一步選是片選線nGCS3,SDRAM的起始地址是0x5000000之上.軟件如何讀寫外設(shè)-在內(nèi)

6、存映射模式下。對(duì)于外設(shè)的訪問實(shí)際就是對(duì)內(nèi)存地址的訪問.在C語(yǔ)言里,即指針操作。為了增加閱讀性,往往采用如下的宏定義.#define rGPGCON (*(volatile unsigned *)0x56000060)/Port G control 這個(gè)宏定義非常之復(fù)雜,所以我經(jīng)常用如下五個(gè)問題來問學(xué)生或者來面試講師的人。1.為什么要用絕對(duì)地址,地址怎么來的?2. unsigned *表示什么? 3.為什么要用unsigned? 4.最左邊的*表示什么?5. volatile表示什么含意?6.完成同樣一個(gè)功能,在不同字節(jié)序下,設(shè)置的寄存器的數(shù)字是不是一樣?第一個(gè)問題比較好答.內(nèi)存映射模式是直接內(nèi)

7、存訪問。編址的來源看上兩節(jié) 2. unsigned *表示什么? unsigned int 縮寫, unsigned *表示取后面四個(gè)byte空間的寬度, 同理還有(*(volatile unsigned short *)0x56000060) 表示取后面兩個(gè)字節(jié)空間。 3.為什么要用unsigned? 禁止算術(shù)移位,采用邏輯移位.因?yàn)榍度胧骄幊檀罅坎捎靡莆徊僮?。如果用帶符?hào),會(huì)形成算術(shù)移位,即最高位符號(hào)不參與移位,這是錯(cuò)誤操作。 4.第一*表示什么? 表取指針指向空間.*(unsigned *) 上述表達(dá)式相當(dāng)如下代碼的簡(jiǎn)寫, int val; int * p = &val; *p = 0x

8、100000;5.volatile表示什么含意? 其中volatile 是C的保留字,表禁止編譯器對(duì)變量訪問優(yōu)化. 即源碼中有多少讀寫操作,編譯后生產(chǎn)多少機(jī)器操作指令.否則如下代碼,將不產(chǎn)生指令 int a; a+ ; a- ;但是在硬件編程中,一次操作都可能表示特定含意.如果省略,往往出錯(cuò)。6.完成同樣一個(gè)功能,在不同字節(jié)序下,設(shè)置的寄存器的數(shù)字是不是一樣? 不一樣,小端字節(jié)序是與手冊(cè)相同順序,即個(gè)數(shù)位表示第0位。大端字節(jié)序正好相反.基本操作向寄存器賦值 rGPBCON = 0x1000;向寄存器取值 unsigned int val =rGPBCON;位操作-置位操作把第0位置1rGPGC

9、ON | = 0x1;把第3位置1 rGPGCON |= 0x8;把第n位置1 rGPGCON |= (0x1 n);把第12,13位分別置1 rGPGON|= (0x3) 12;把第10,15位分別置1 rGPGON | = ( 0x01 10 ) | (0x01 15) ;把(0x0 n)表示什么含意? rGPGON = (0x01 2) | (0x0 1) | (0x0 0);表示占位,對(duì)應(yīng)位是默認(rèn)值不變.位操作-清位操作 把第1位清0 rGPGCON &= (0x1);第3位清洗0 rGPGCON &= (0x8);第n位清0 rGPGCON &= (0x1 n);第12,13清0 rGPGCON &= (0x3 12);第10,15位清0 rGPGCON &= (0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論