讀書(shū)筆記| ARM9 嵌入式學(xué)習(xí)
1. 啟動(dòng)代碼
1.1 功能:ARM處理器初始化
- 硬件初始化
- 程序代碼的搬移
- 程序?yàn)镃嘱能,硬件無(wú)法識(shí)別吝梅,須初始化程序運(yùn)行環(huán)境
1.2 代碼實(shí)現(xiàn)流程步驟
-
建立異常中斷向量表
- 硬件固有的向量表,硬件實(shí)現(xiàn)惹骂,簡(jiǎn)單跳轉(zhuǎn)
- 軟件設(shè)定的向量表苏携,進(jìn)一步確定中斷源
初始化各模式的堆棧
-
初始化硬件
- 關(guān)閉看門狗
- 屏蔽所有中斷
- 初始化pll和系統(tǒng)時(shí)鐘
- 初始化存儲(chǔ)系統(tǒng)(SDRAM...)
- 對(duì)存儲(chǔ)器控制器的初始化
- 即是對(duì)13個(gè)寄存器的初始化
- 與存儲(chǔ)器控制器相關(guān)
- 設(shè)定外部數(shù)據(jù)總線相關(guān)參數(shù)
初始化應(yīng)用程序執(zhí)行環(huán)境
將代碼和數(shù)據(jù)全部復(fù)制到SDRAM中-
跳轉(zhuǎn)到主程序
- 方法一:b Main
- 方法二:調(diào)用標(biāo)準(zhǔn)C庫(kù)函數(shù)__main()
1.3 相應(yīng)外部中斷的pro執(zhí)行流程
- 切換模式
- 處理器執(zhí)行完當(dāng)前指令
- 將當(dāng)前cpsr保存到IRQ模式下spsr上
- PC-4存放到IRQ模式下的R14上
- 硬件強(qiáng)制將PC指向中斷向量表0x18處
- b HandlerIRQ
- 執(zhí)行HandlerIRQ,獲取IsrIRQ地址
- 跳到該地址2次查表,找具體中斷服務(wù)函數(shù)地址
- 跳到中斷服務(wù)程序執(zhí)行
- 執(zhí)行中斷对粪,返回
2. ARM可執(zhí)行程序的映像文件
- 文件結(jié)構(gòu)
- ZI: 未初始化的數(shù)據(jù)段
- RW: 可讀/寫(xiě)數(shù)據(jù)段
- RO: 代碼,只讀數(shù)據(jù)段
- 域
- 加載域
- 運(yùn)行域
3. Nand/Nor
3.1 Nand:
- 對(duì)應(yīng)PC硬盤(pán)兜叨,容量大穿扳,斷電數(shù)據(jù)不丟失
- 無(wú)法直接尋址
- 須有控制器控制
3.2 Nor:
- 容量小,斷電數(shù)據(jù)不丟失
與SDRAM的區(qū)別 - 可直接尋址
- 用于執(zhí)行小程序
3.3 啟動(dòng)方式:
- nor啟動(dòng)
- 上電后直接執(zhí)行nor中程序
- 執(zhí)行一小段后国旷,將程序搬移到SDRAM中
- nand啟動(dòng)
- 上電后,將nand前4k數(shù)據(jù)復(fù)制到Stepping Stone
- 執(zhí)行SStone中的程序
該程序中會(huì)實(shí)現(xiàn)將所有程序從搬到SDRAM中 - 跳到SDRAM執(zhí)行
4茫死、系統(tǒng)時(shí)鐘
4.1 S3C2440處理器有關(guān)時(shí)鐘
- Fin: 外部晶振頻率
- FCLK用于CPU核
- HCLK
- 用于AHB總線互連的設(shè)備上
- AHP上的外設(shè)
- 存儲(chǔ)器控制器
- LCD控制器
- 中斷控制器
- PCLK
- 用于APB總線互連的低速設(shè)備上
- ADC/UART/GPIO/RTC/IIC/SPI
4.2 鎖相環(huán)(MPLL跪但、UPLL):實(shí)現(xiàn)倍頻
4.3 相關(guān)控制寄存器
MPLLCON: 控制FCLK和Fin的比例關(guān)系
CLKDIVN: 控制FCLK、HCLK峦萎、PCLK比例關(guān)系
4.4 系統(tǒng)時(shí)鐘初始化流程
- 剛上電屡久,F(xiàn)CLK=Fin
- 復(fù)位信號(hào)nRESET恢復(fù)高電平,開(kāi)始生成時(shí)鐘頻率
- 鎖相環(huán)捕獲爱榔,需要一定時(shí)間(LockTime)
- 鎖相環(huán)輸出新頻率值
5被环、中斷
5.1 定義
ARM處理器與各類外部設(shè)備進(jìn)行通信的方式之一
5.2 中斷類型
- 硬中斷: 硬件設(shè)備出發(fā)的中斷
- 軟中斷:
- 軟件觸發(fā)
- 具體是由某段程序代碼觸發(fā)的
- 該函數(shù)需加swi關(guān)鍵字
5.3 相關(guān)寄存器
- 中斷寄存器
- SRCPND
- SUBSRCPND
- 中斷屏蔽寄存器
- INTMSK
- INTSUBMSK
- INTOFFSET
- 中斷模式寄存器
- INTMODE
- 中斷優(yōu)先級(jí)寄存器
5.4 中斷處理流程
-
中斷源將中斷請(qǐng)求發(fā)送給中斷控制器
- 中斷產(chǎn)生,SUBSRCPND相應(yīng)位置1
- 如果INTSUBMSK不對(duì)相應(yīng)位進(jìn)行屏蔽详幽,SRCPND也置一
中斷控制器將最需要處理的中斷請(qǐng)求發(fā)送給CPU
-
cpu保存現(xiàn)場(chǎng)筛欢,切換工作模式(IRQ),響應(yīng)中斷
- 非獨(dú)立寄存器放該模式下的堆棧
- 將該模式下的CPSR保存到即將進(jìn)入的模式的SPSR中
- ?唇聘?版姑?將pc減4存進(jìn)R14
* R14=PC-4
* 減4的原因: 要返回發(fā)生中斷指令的下一條指令處執(zhí)行 - PC值設(shè)為0X00000018,中斷向量表中IRQ的入口地址
調(diào)用中斷處理程序迟郎,識(shí)別具體中斷源剥险,并進(jìn)行處理
從中斷處理程序中返回,恢復(fù)現(xiàn)場(chǎng)宪肖,接著執(zhí)行
5.5 清除中斷
- 對(duì)中斷寄存器清除中斷表制,與其他寄存器不同
- 寫(xiě)1清除中斷標(biāo)志,清除之后相應(yīng)位值為0
5.6 相關(guān)要點(diǎn)
- 切換cpu工作模式時(shí)控乾,非獨(dú)立的寄存器值需要入堆棧
- 為什么FIQ比IRQ中斷響應(yīng)速度快?
FIQ獨(dú)立寄存器數(shù)多于IRQ么介,獨(dú)立寄存器不需入棧保存
6 存儲(chǔ)器控制器
6.1 用途:提供CPU訪問(wèn)外部設(shè)備所需的信號(hào)
6.2 地址空間:128MB/BANK、8個(gè)BANK,總尋址空間1GB
- s3c2440的cpu具有32位地址阱持、數(shù)據(jù)總線
- 但地址線只引出27根夭拌,即最大尋址空間128M
- 每個(gè)128m作為一個(gè)BANK,引出8跟片選信號(hào)nGCSx,實(shí)現(xiàn)1G
- 理論物理地址空間可達(dá)4g
- 除去1G外設(shè)空間
- cpu內(nèi)部使用的特殊功能寄存器地址空間
6.3 SDRAM
- 同步動(dòng)態(tài)隨機(jī)存取內(nèi)存
- 內(nèi)部結(jié)構(gòu): 存儲(chǔ)陣列衷咽,由行鸽扁、列、邏輯存儲(chǔ)體組成
6.3.1 工作原理:
- 讀操作需控制線镶骗、地址線配合發(fā)出一系列命令來(lái)完成
- 發(fā)出L-BANK激活命令桶现,鎖存相應(yīng)L-BANK地址
- 指定行、列鼎姊,找到所需單元格