国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>ARM 啟動及工作模式切換

      直播推薦

      更多>

      企業(yè)動態(tài)

      更多>

      推薦展會

      更多>

      ARM 啟動及工作模式切換

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

      一、原理

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


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

      SDRAM 地址分配

       


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


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

      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 創(chuàng)建異常中斷的入口函數(shù)
      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
      異常向量的入口函數(shù)是由8 個跳轉(zhuǎn)指令組成的,這8 個跳轉(zhuǎn)指令需要按照順序放置到固定的地址上,地址是0x00~0x1c,這8 個跳轉(zhuǎn)指令是ARM 匯編指令,所以條指令占4 個字節(jié)的位置。


      3 關(guān)閉看門狗、關(guān)閉中斷
      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 設(shè)置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 設(shè)置存儲器控制器
             ;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 ;聲明一個數(shù)據(jù)緩沖池的開始
      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 的存儲器進行初始化,存儲器的初始化是和具體的硬件平臺相關(guān)的,具體的內(nèi)容見S3C2410A 的使用手冊。
      6 堆棧初始化及ARM 工作模式轉(zhuǎn)換
      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 內(nèi)容從flash 中copy 到SDRAM 中,并將ZI 內(nèi)容初始化為0
            adr r0, ResetEntry
            ldr r2, BaseOfROM
            cmp r0, r2
            ldreq r0, TopOfROM
            beq InitRam
            ldr r3, TopOfROM
      ;將RO 區(qū)域的代碼copy 到RW 域中并且將ZI 區(qū)域初始化為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 區(qū)域為0
            ldr r3, EndOfBSS
      1
            cmp r2, r3
      8 創(chuàng)建查找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}
       

      全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

      免責(zé)聲明

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

      <
      更多 >

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


      我要投稿
      • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
      • 聯(lián)系電話0571-89719789
      工業(yè)4.0時代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺
      智能制造網(wǎng)APP

      功能豐富 實時交流

      智能制造網(wǎng)小程序

      訂閱獲取更多服務(wù)

      微信公眾號

      關(guān)注我們

      抖音

      智能制造網(wǎng)

      抖音號:gkzhan

      打開抖音 搜索頁掃一掃

      視頻號

      智能制造網(wǎng)

      公眾號:智能制造網(wǎng)

      打開微信掃碼關(guān)注視頻號

      快手

      智能制造網(wǎng)

      快手ID:gkzhan2006

      打開快手 掃一掃關(guān)注
      意見反饋
      關(guān)閉
      企業(yè)未開通此功能
      詳詢客服 : 0571-87858618