<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 2440開(kāi)發(fā)板啟動(dòng)代碼學(xué)習

2440開(kāi)發(fā)板啟動(dòng)代碼學(xué)習

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏

  init.s是啟動(dòng)代碼的主文件,包括3個(gè)頭文件,option.inc,memcfg.inc,addr.inc。

本文引用地址:http://dyxdggzs.com/article/201612/341051.htm

  option.inc定義了3個(gè)堆棧起始地址,總線(xiàn)寬度,時(shí)鐘相關(guān)參數的定義等。其中這個(gè)總線(xiàn)寬度將作為一個(gè)IF判斷量,決定了各Bank的位寬設置,參見(jiàn)memcfg.inc文件及datasheet。

  memcfg.inc是存儲器Bank的配置文件,定義了存儲器相關(guān)寄存器位的值。各bank的位寬的設置定義也是在這個(gè)文件中,注意bank0的位寬沒(méi)有相關(guān)的定義,因為它的位寬取決于OM[1:0]引腳,即啟動(dòng)方式。

  addr.inc定義了相關(guān)寄存器地址,包括存儲器控制寄存器,時(shí)鐘電源管理寄存器,中斷,看門(mén)狗,IO,NAND,雜項等相關(guān)用到的寄存器。

  2440init.s是主要的啟動(dòng)代碼文件,它配置了存儲器,中斷服務(wù)程序,堆棧等重要內容,并且最后開(kāi)始跳到C代碼。

  Init段是開(kāi)始點(diǎn),跳轉到ResetHandler。然后執行以下步驟:

  禁止看門(mén)狗,禁止中斷,禁止子中斷,然后調節鎖定時(shí)間,接著(zhù)設定FCLK與HCLK與PCLK的比例1:2:4,然后設置UPLL為48M,延時(shí)7個(gè)時(shí)鐘周期后設置MPLL為400M。

  這時(shí)通過(guò)讀取復位狀態(tài)寄存器判斷此時(shí)的復位到底是上電復位,喚醒復位還是看門(mén)狗復位等,如果是喚醒復位則跳轉到相應位置然后釋放SCLK,設置SDRAM,返回等。

  如果不是喚醒復位則繼續向下配置SDRAM,它實(shí)際上是把一個(gè)名為SMRDATA的數據緩沖池一個(gè)一個(gè)的送入相關(guān)的控制寄存器,相關(guān)的初始化配置的定義在memcfg.inc文件中。

  然后跳轉到初始化堆棧,具體以后再看。

  接著(zhù)讀取BWSCON寄存器的相關(guān)位判斷是從NOR還是NAND引導的,如果是NOR引導,則跳轉到copy_proc_beg。

  這部分主要是把RW區在ROM中的地址開(kāi)始處搬移到RAM區,然后接著(zhù)在這后面ZI區清0。

  如果是NAND引導,則跳轉到nand_boot_beg。

  先配置NAND的時(shí)序參數和相關(guān)控制功能,然后跳轉到ReadNandID等等,最后還是類(lèi)似上面的完成RAM的復制,相關(guān)內容以后再學(xué)。

  接著(zhù)將IsrIRQ的地址放到HandleIRQ地址中。這樣當中斷發(fā)生后便能找到中斷服務(wù)程序。

  最后跳轉到MAIN函數中,匯編部分的啟動(dòng)代碼結束。

  中斷的內容詳細解說(shuō)如下:

  首先,定義了一個(gè)宏,宏名為“$HandlerLabel HANDLER $HandleLabel”,這個(gè)宏展開(kāi)后是一個(gè)以$HandlerLabel為入口名的代碼段,例如“比如“HandlerIRQ HANDLER HandleIRQ”,宏執行以后將執行$HandleLabel地址中的內容,例如上則執行HandleIRQ地址中的內容。

  當中斷發(fā)生以后,ARM將從地址0x18處執行指令,即是一條跳轉指令“b HandlerIRQ”,然后即是執行上面的宏,宏執行完以后則執行 HandleIRQ地址中的內容,而這正是入口名為IsrIRQ的代碼部分。而IsrIRQ代碼段的執行作用是首先讀取INTOFFSET寄存器判斷中斷 源是哪個(gè),記錄其中斷服務(wù)子程序的地址偏移量,然后將這個(gè)偏移量加上基地址,即EINT0中斷服務(wù)子程序的入口地址所在的地址,最后從這個(gè)地址開(kāi)始執行。

  而所有的各個(gè)中斷源觸發(fā)的中斷的中斷服務(wù)子程序的入口地址都是固定的,所以在啟動(dòng)代碼的后面有一個(gè)以_ISR_STARTADDRESS為開(kāi)始的數據段,所有的地址名都是以Handle為開(kāi)頭的定義,如HandleTIMER0等。

  當IsrIRQ執行后即從固定的中斷服務(wù)子程序地址所在的地址處找到真正的中斷服務(wù)子程序的地址,并執行之。



關(guān)鍵詞: 2440

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>