乙個典型的soc架構有cpu、匯流排、儲存器、外設。cpu負責指令的取指、解碼、執行;匯流排給每個cpu外圍裝置指定一些位址,包括儲存器和一些其他裝置。cpu通過這些位址開始的一些暫存器來控制這些硬體。
以s3c2440為例,從0x0000_0000-0x4000_000對應儲存器空間,它被分成8個bank,每個bank對應一類儲存器或者和儲存器介面類似的器件。0x4800_0000-0x4800_0030為儲存器控制器位址空間。0x5600_0000-0x5600_00b0位i/o埠.....這些都可以從晶元手冊上查到。如:0x5600_0050對應埠f的控制暫存器gpfcon,0x5000_0054對應埠f的資料暫存器。
#define gpfcon(*(volatile unsigned int *)0x56000050)
#define gpfdat(*(volatile unsigned int *)0x56000054)
int main()
前兩行巨集定義是c語言指標的典型應用,它把0x56000050這個位址的內容和標號gpfcon對應起來。注意:這裡的gpfcon只是乙個名稱而已,開發者可以隨意命名,但是,變數的命名應該與功能相對應。根據晶元手冊,0x56000050位址對應的暫存器實現f埠控制功能。gpfcon = 0x00001500表示向0x56000050位址暫存器寫入0x00001500。**存在儲存器中,所以實際硬體的執行過程為:cpu通過匯流排從儲存器中取出指令和資料,然後通過匯流排把0x00001500寫入0x56000050位址對應的暫存器。gpfcon每2bit控制f埠乙個引腳的功能,0b00:輸入;0b01:輸出;0b10:特殊復用功能;0b11:保留。可見這裡把f埠引腳2配置為輸出功能。0x56000054位址對應f埠資料暫存器,若引腳功能為輸出,則每一bit的1、0對應引腳輸出高、低電平。若為輸入,則引腳的電平會對映到gpfdat上,讀gpfdat即讀f引腳對應的電平。所以上述**分為兩部分,一部分為f埠引腳2輸出;一部分為讀取f埠引腳電平狀態。
嵌入式工程師的軟硬體之路
一般的學習軟體的人比較適合走偏軟的道路。硬體道路 第一步 pcb設計,一般為開發板的電路裁減和擴充,由開發板原理圖為基礎,畫出pcb和封裝庫,設計自己的電路。第二步 sopc技術,一般為fpga,cpld開發,利用vhdl等硬體描述語言做專用晶元開發,寫出自己的邏輯電路,基於alter或xilinu...
自己動手打造嵌入式Linux軟硬體開發環境
linux和uclinux 1991年8月,芬蘭的乙個學生在comp.os.minix新聞組貼上了以下這段話 你好所有使用minix的人 我正在為386 486 at做乙個免費的作業系統 只是為了愛好,不會象gnu那樣很大很專業.這名學生就是linus torvalds,而他所說的 愛好 就變成我們...
嵌入式工程師軟硬體道路三步曲
嵌入式工程師的軟硬體道路三步曲 硬體道路 第一步 pcb設計,一般為開發板的電路裁減和擴充,由開發板原理圖為基礎,畫出pcb和封裝庫,設計自己的電路。第二步 sopc技術,一般為fpga,cpld開發,利用vhdl等硬體描述語言做專用晶元開發,寫出自己的邏輯電路,基於alter或xilinux的fp...