<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > TQ2440啟動代碼分析(一)

          TQ2440啟動代碼分析(一)

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
          看了好幾天的啟動代碼了,終于把大部分的東西都看懂了,在此整理下自己對TQ2440開發(fā)板啟動代碼的理解(參考了網(wǎng)上找的一些資料),并貼出來供大家看一下,希望對大家有幫助,如果有什么錯了的地方,也請大家不吝賜教。

          ;=========================================

          本文引用地址:http://www.ex-cimer.com/article/201611/321668.htm

          ; NAME: 2440INIT.S

          ; DESC: C start up codes

          ; Configure memory, ISR ,stacks

          ; Initialize C-variables

          ;=========================================

          啟動代碼主要是在主程序運(yùn)行之前初始化系統(tǒng)硬件及軟件的運(yùn)行環(huán)境,它的主要功能包括以下的幾個方面:

          1、建立中斷向量表

          2、初始化系統(tǒng)堆棧

          3、應(yīng)用程序執(zhí)行環(huán)境初始化

          4 跳轉(zhuǎn)至主函數(shù)

          接下來對各個部分進(jìn)行分析

          ;GET 是包含頭文件的意思,相當(dāng)于C語言中的include,是將一個源文件包含到當(dāng)前源文件中,并將被包含的文件在其當(dāng)前位置進(jìn)行匯編處理

          GET option.inc ;option.inc文件包含了開發(fā)板的配置信息—堆棧、時鐘等

          GET memcfg.inc ;存儲控制文件

          GET 2440addr.inc ;寄存器地址地址定義

          BIT_SELFREFRESH EQU (1<<22) ;SDRAM自刷新標(biāo)志位

          ;預(yù)定義的工作模式

          ;ARM 有7 種模式,用戶模式,快速中斷模式,中斷模式,管理模式,中止模式,未定

          ;義模式和系統(tǒng)模式。系統(tǒng)堆棧的初始化主要是給各個處理器模式分配堆??臻g。堆棧是為

          ;中斷或程序跳轉(zhuǎn)服務(wù)的,當(dāng)發(fā)生中斷或程序跳轉(zhuǎn)時,需要將當(dāng)前處理器的狀態(tài)及一些參數(shù)

          ;保持在堆棧中,當(dāng)中斷處理完畢以后或程序執(zhí)行完后返回時,再將堆棧保存的現(xiàn)場數(shù)據(jù)進(jìn)

          ;行恢復(fù),以保證原來的程序正確運(yùn)行

          ;Pre-defined constants

          USERMODE EQU 0x10 ;用戶模式

          FIQMODE EQU 0x11 ;快速中斷模式

          IRQMODE EQU 0x12 ;中斷模式

          SVCMODE EQU 0x13 ;管理模式

          ABORTMODE EQU 0x17 ;中止模式

          UNDEFMODE EQU 0x1b ;未定義模式

          MODEMASK EQU 0x1f ;模式掩碼

          NOINT EQU 0xc0 ;無中斷模式

          ;The location of stacks

          ;定義各種模式下使用的堆棧起始地址,_STACK_BASEADDRESS是由option.inc定義的

          UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~

          SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~

          UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~

          AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~

          IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~

          FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~

          ;Check if tasm.exe(armasm -16 ...@ADS 1.0) is used.

          ; 判斷是否THUMB指令

          ; [ 代表IF,| 指的是ELSE,] 相當(dāng)于ENDIF

          GBLL THUMBCODE ;定義一個局部變量THUMBCODE

          [ {CONFIG} = 16 ;如果是16位代碼,則將THUMBCODE設(shè)為真

          THUMBCODE SETL {TRUE} ;

          CODE32 ;否則是ARM指令

          |

          THUMBCODE SETL {FALSE}

          ]

          ; 宏定義,用于子程序的返回

          MACRO

          MOV_PC_LR

          [ THUMBCODE ;如果目標(biāo)地址是THUMB的指令,則跳到THUMB地址

          bx lr ;在ARM模式中,要用BX指令跳轉(zhuǎn)到THUMB指令,并轉(zhuǎn)換模式

          |

          mov pc,lr ;如果目標(biāo)地址是ARM指令,則直接把函數(shù)返回地址給PC

          ]

          MEND

          MACRO

          MOVEQ_PC_LR ;帶條件的函數(shù)返回,與MOV_PC_LR類似

          [ THUMBCODE

          bxeq lr

          |

          moveq pc,lr

          ]

          MEND

          PS:下面這一段是網(wǎng)上找的,我覺得它已經(jīng)介紹的非常好了,所以就直接拿過來用來,呵呵

          ;===============================================================

          ;下面這個宏是用于第一次查表過程的實(shí)現(xiàn)中斷向量的重定向,你會發(fā)現(xiàn)

          ;在_ISR_STARTADDRESS=0x33FF_FF00里定義的第一級中斷向量表

          ;是采用型如Handle***的方式的. 而在程序的ENTRY處(程序開始處)采用的是

          ;b Handler***的方式.

          ;在這里Handler***就是通過HANDLER這個宏和Handle***進(jìn)立聯(lián)系的.

          ;這種方式的優(yōu)點(diǎn)就是正真定義的向量數(shù)據(jù)在內(nèi)存空間里,而不是在ENTRY處

          ;的ROM(FLASH)空間里, 這樣,我們就可以在程序里靈活的改動向量的數(shù)據(jù)了.

          ;其中HANDLER是一個宏,用于查找中斷處理程序的入口地址。這些地址存放在

          ;由HandleXXX指向的表項(xiàng)中,該表定位在RAM高端,基地址為_ISR_STARTADDRESS。

          ;假如_ISR_STARTADDRESS為 0x800000000,當(dāng)IRQ中斷時,根據(jù)b HandlerFIQ,先跳轉(zhuǎn)

          ;再根據(jù)^ _ISR_STARTADDRESS基地址+HandleIRQ 的偏移地址(4*6)得到的中斷地址

          ;0x80000000+0x00000024=0x80000024


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: TQ2440啟動代

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();