大地资源网视频在线观看新浪,日本春药精油按摩系列,成人av骚妻潮喷,国产xxxx搡xxxxx搡麻豆

您現在的位置:智能制造網>技術中心>ARM 啟動及工作模式切換

直播推薦

更多>

企業動態

更多>

推薦展會

更多>

ARM 啟動及工作模式切換

2009年04月22日 15:53:09人氣:2213來源:浙江啟揚智能科技有限公司

一、原理

    如何讓嵌入式系統快速穩定地啟動是一個重要問題。嵌入式系統的資源有限,程序通常都是固化在ROM 中運行。但在實際應用中,為提高系統的實時性,加快代碼的執行速度,系統啟動后程序往往要被搬移到RAM 中,因為RAM 的存取速度要比ROM 快得多,這樣大大提升系統的性能。啟動程序要完成的任務包括:硬件初始化,系統存儲系統的配置,復制二級中斷向量表。


二、啟動程序過程
● 系統硬件初始化
系統上電或復位后,程序從位于地址0x0 的Reset Exception Vector 處開始執行,因此需要在這里放置Bootloader 的*條指令:b ResetHandler,跳轉到標號為ResetHandler 處進行*階段的硬件初始化,主要內容為:關看門狗定時器,關中斷,初始化PLL 和時鐘,初始化存儲器系統。執行完以上程序后,系統進行堆棧和存儲器的初始化。系統堆棧初始化取決于用戶使用了哪些中斷,以及系統需要處理哪些錯誤類型。一般情況下,管理者堆棧必須設置,如果使用了IRQ 中斷,則IRQ 堆棧也必須設置。如果系統使用了外設,則需要設置相關的寄存器,以確定其刷新頻率、總線寬度等信息。
● 代碼段復制到RAM 中運行
因為嵌入式系統的代碼通常都是固化在ROM或者Flash 中,上電后開始運行。由于ROM和Flash 的讀取速度相對較慢,這樣無疑會降低代碼的執行速度和系統的運行效率。為此,需要把系統的代碼復制到RAM 中運行。使用SDT 鏈接器ARMLink 產生的定位信息,把RO 的有效代碼和數據段到RAM 中。ARMLink 將編譯后的程序鏈接成ELF 文件。映像文件內部共有三種輸出段:RO 段、RW 段和ZI 段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數據、可讀寫的數據、初始化為0 的數據,ARMLink 同時還產生了這三種輸出段的起始和終止定位信息: Image$$RO$$Base 、Image$$RO$$Limit 、image$$RW$$Base、Image$$Limit、Image$$Linit 和Image$$ZI$$Limit。可以在程序中使用這些定位信息。將ROM 中的代碼和數據搬移到RAM 中。
● 建立二級中斷向量表
在ARM 系統中,中斷向量表位于0x000000000 開始的地址處,意味著無論運行什么樣的上層軟件,一旦發生中斷,程序就得到Flash 存儲器中的中斷向量表里去,降低系統的運行效率。因此在RAM 中建立自己的二級中斷向量表,當中斷發生后,程序直接從RAM 中取中斷向量進入中斷子程序。尤其是在中斷頻繁發生的系統里,這種方法可以大大提高系統的運行效率。
● MMU 的應用
MMU 是存儲器管理單元的縮寫,是用來管理虛擬內存系統的器件。MMU 通常是CPU的一部分,本身有少量存儲空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(轉換旁置緩沖區)。所有數據請求都送往MMU,由MMU 決定數據是在RAM 內還是在大容量外部存儲器設備內。如果數據不在存儲空間內,MMU 將產生頁面錯誤中斷。MMU 存儲器系統的結構允許對存儲器系統的精細控制,大部分的控制細節由存在存儲器中的轉換表提供。
這些表的入口定義了從1KB~1MB 的各種存儲器區域的屬性。MMU 完成的兩個主要功能是:將虛地址轉換成物理地址,控制存儲器存取允許。MMU 關掉時,虛地址直接輸出到物理地址總線。

SDRAM 地址分配

 


三、啟動代碼完成的主要功能
1) 建立異常中斷的入口向量
2) 建立中斷向量表
3) 為ARM 每種運行模式設置堆棧
4) 初始化ARM 的MPLL 時鐘
5) 初始化MMU(內存管理單元)
6) 初始化存儲器控制器
7) 關閉看門狗、關閉中斷
8) 判斷IRQ 中斷的中斷入口
9) 將RW 段的內容從flash 拷貝到SDRAM,初始化ZI 段為0
10) 跳轉到應用程序(C 代碼)


四、S3C2410 初始化說明
1 創建中斷向量表
中斷向量表創建到SDRAM 高位地址上,主要是因為SDRAM 的地址位置需要放置執行的映象程序,而且在SDRAM 中查找向量表速度會快很多。中斷向量表放置時需要字對齊。
       ALIGN ;通過添加補丁字節使當前位置滿足一定的對齊方式
                   ;可讀寫的數據段
       AREA RamData, DATA, READWRITE
;^=MAP:定義一個結構化的內存表(storage map)的首地址,地址為0x33ff8000
       ^ _ISR_STARTADDRESS ;0x33ff8000
HandleReset # 4 ;#--Field:定義一個結構化內存表中的數據域,該域為4 個字節

HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
;Don''''''''''''''''t use the label ''''''''''''''''IntVectorTable'''''''''''''''',
;The value of IntVectorTable is different with the address you think it may be.
;IntVectorTable''''''''''''''''
HandleEINT0 # 4
HandleEINT1 # 4
HandleEINT2 # 4
HandleEINT3 # 4
HandleEINT4_7 # 4
HandleEINT8_23 # 4
HandleRSV6 # 4
HandleBATFLT # 4
HandleTICK # 4
HandleWDT # 4
HandleTIMER0 # 4
HandleTIMER1 # 4
HandleTIMER2 # 4
HandleTIMER3 # 4
HandleTIMER4 # 4
HandleUART2 # 4
HandleLCD # 4
HandleDMA0 # 4
HandleDMA1 # 4
HandleDMA2 # 4
HandleDMA3 # 4
HandleMMC # 4
HandleSPI0 # 4
HandleUART1 # 4
HandleRSV24 # 4
HandleUSBD # 4
HandleUSBH # 4
HandleIIC # 4
HandleUART0 # 4
HandleSPI1 # 4
HandleRTC # 4
HandleADC # 4
2 創建異常中斷的入口函數
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
異常向量的入口函數是由8 個跳轉指令組成的,這8 個跳轉指令需要按照順序放置到固定的地址上,地址是0x00~0x1c,這8 個跳轉指令是ARM 匯編指令,所以條指令占4 個字節的位置。


3 關閉看門狗、關閉中斷
ldr r0,=WTCON ;watch dog disable
ldr r1,=0x0
str r1,[r0]


ldr r0,=INTMSK
ldr r1,=0xffffffff ;all interrupt disable
str r1,[r0]


ldr r0,=INTSUBMSK
ldr r1,=0x3ff ;all sub interrupt disable
str r1,[r0]


4 設置ARM 的主時鐘頻率
;To reduce PLL lock time, adjust the LOCKTIME register.
ldr r0,=LOCKTIME
ldr r1,=0xffffff
str r1,[r0]


;Configure MPLL
ldr r0,=MPLLCON
ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHz,Fout=50MHz
str r1,[r0]


5 設置存儲器控制器
       ;Set memory control registers
        adr r0, SMRDATA
      ldr r1,=BWSCON ;BWSCON Address
      add r2, r0, #52 ;End address of SMRDATA 一共13 個寄存器
0
      ldr r3, [r0], #4
      str r3, [r1], #4
      cmp r2, r0
      bne %B0


LTORG ;聲明一個數據緩沖池的開始
SMRDATA DATA
DCD 0x2211D110 ; BWSCON
DCD 0x0700 ; BANKCON0
DCD 0x7FFC ; BANKCON1
DCD 0x0700 ; BANKCON2
DCD 0x0700 ; BANKCON3
DCD 0x0700 ;BANKCON4
DCD 0x0700 ;BANKCON5
DCD 0x18005 ;BANKCON6
DCD 0x18005 ; BANKCON7
DCD 0x008E0459 ;REFRESH
DCD 0x32 ;BANKSIZE=0x32
DCD 0x30 ;MRSR6 CL=3clk
DCD 0x30 ;MRSR7
以上是對S3C2410A 的存儲器進行初始化,存儲器的初始化是和具體的硬件平臺相關的,具體的內容見S3C2410A 的使用手冊。
6 堆棧初始化及ARM 工作模式轉換
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 ~ InitStacks


;UndefMode 堆棧
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack


;AbortMode 堆棧
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack


;IRQMode 堆棧
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack


;FIQMode 堆棧
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack


;SVCMode 堆棧
bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
mov pc,lr
7 將RW 內容從flash 中copy 到SDRAM 中,并將ZI 內容初始化為0
      adr r0, ResetEntry
      ldr r2, BaseOfROM
      cmp r0, r2
      ldreq r0, TopOfROM
      beq InitRam
      ldr r3, TopOfROM
;將RO 區域的代碼copy 到RW 域中并且將ZI 區域初始化為0。
0
      ldmia r0!, {r4-r7}
      stmia r2!, {r4-r7}
      cmp r2, r3
      bcc %B0
      sub r2, r2, r3
      sub r0, r0, r2
InitRam
      ldr r2, BaseOfBSS
      ldr r3, BaseOfZero
0
      cmp r2, r3 ;copy 初始化代碼
      ldrcc r1, [r0], #4
       strcc r1, [r2], #4
      bcc %B0
      mov r0, #0 ;初始化ZI 區域為0
      ldr r3, EndOfBSS
1
      cmp r2, r3
8 創建查找IRQ 中斷源程序
     ldr r0,=HandleIRQ ;This routine is needed
    ldr r1,=IsrIRQ ;if there isn''''''''''''''''t ''''''''''''''''subs pc,lr,#4'''''''''''''''' at 0x18, 0x1c''''''''''''''''
     str r1,[r0]
IsrIRQ
      sub sp,sp,#4
      stmfd sp!,{r8-r9}
      ldr r9,=INTOFFSET
      ldr r9,[r9]
      ldr r8,=HandleEINT0
      add r8,r8,r9,lsl #2
      ldr r8,[r8]
      str r8,[sp,#8]
      ldmfd sp!,{r8-r9,pc}
 

全年征稿/資訊合作 聯系郵箱:1271141964@qq.com

免責聲明

  • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.xashilian.com。違反者本網將追究相關法律責任。
  • 企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
  • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
  • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。

<
更多 >

工控網機器人儀器儀表物聯網3D打印工業軟件金屬加工機械包裝機械印刷機械農業機械食品加工設備制藥設備倉儲物流環保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


我要投稿
  • 投稿請發送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
  • 聯系電話0571-89719789
工業4.0時代智能制造領域“互聯網+”服務平臺
智能制造網APP

功能豐富 實時交流

智能制造網小程序

訂閱獲取更多服務

微信公眾號

關注我們

抖音

智能制造網

抖音號:gkzhan

打開抖音 搜索頁掃一掃

視頻號

智能制造網

公眾號:智能制造網

打開微信掃碼關注視頻號

快手

智能制造網

快手ID:gkzhan2006

打開快手 掃一掃關注
意見反饋
關閉
企業未開通此功能
詳詢客服 : 0571-87858618
主站蜘蛛池模板: 靖江市| 寿光市| 巴林右旗| 哈尔滨市| 天津市| 青冈县| 武鸣县| 富顺县| 瑞昌市| 蒲江县| 炉霍县| 阿拉尔市| 广元市| 和静县| 邳州市| 开封县| 贵港市| 比如县| 阿勒泰市| 津南区| 花莲县| 陆良县| 曲松县| 白朗县| 临桂县| 邹城市| 五莲县| 青阳县| 盘锦市| 龙井市| 讷河市| 汉沽区| 师宗县| 上饶县| 东阳市| 鄂伦春自治旗| 阜南县| 昆山市| 贡嘎县| 华安县| 广宗县|