新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TQ2440啟動代碼分析(二)

        TQ2440啟動代碼分析(二)

        作者: 時間:2016-11-26 來源:網絡 收藏
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        ;;;;;;;;;;;;; When EINT0 is pressed, Clear SDRAM

        本文引用地址:http://www.104case.com/article/201611/321667.htm

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        ; check if EIN0 button is pressed

        ;這一段檢測EINT0是否被按下,假如EINT0被按下,則清空SDRAM

        ldr r0,=GPFCON

        ldr r1,=0x0

        str r1,[r0]

        ldr r0,=GPFUP

        ldr r1,=0xff

        str r1,[r0]

        ;配置GPF

        ldr r1,=GPFDAT

        ldr r0,[r1]

        bic r0,r0,#(0x1e<<1) ; bit clear

        tst r0,#0x1

        bne %F1

        ; Clear SDRAM Start

        ldr r0,=GPFCON

        ldr r1,=0x55aa

        str r1,[r0]

        ; ldr r0,=GPFUP

        ; ldr r1,=0xff

        ; str r1,[r0]

        ldr r0,=GPFDAT

        ldr r1,=0x0

        str r1,[r0] ;LED=****

        mov r1,#0

        mov r2,#0

        mov r3,#0

        mov r4,#0

        mov r5,#0

        mov r6,#0

        mov r7,#0

        mov r8,#0

        ldr r9,=0x4000000 ;64MB

        ldr r0,=0x30000000

        0

        stmia r0!,{r1-r8}

        subs r9,r9,#32

        bne %B0

        ;以上這段清空SDRAM

        ;Clear SDRAM End

        1

        ;Initialize stacks

        bl InitStacks

        ;檢測引腳OM[1:0],如果OM[1:0]!=0,選擇從NOR Flash啟動,如果OM[1:0]==0,則表示從nand flash啟動

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

        ldr r0, =BWSCON

        ldr r0, [r0]

        ands r0, r0, #6 ;OM[1:0] != 0, NOR FLash boot

        bne copy_proc_beg ;do not read nand flash

        adr r0, ResetEntry ;OM[1:0] == 0, NAND FLash boot

        cmp r0, #0 ;if use Multi-ice,

        bne copy_proc_beg ;do not read nand flash for boot

        ;nop

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

        nand_boot_beg

        [ {TRUE}

        bl RdNF2SDRAM

        ]

        ;nand flash啟動,拷貝程序到steppingstone區域

        ldr pc, =copy_proc_beg

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

        copy_proc_beg;

        adr r0, ResetEntry

        ldr r2, BaseOfROM

        cmp r0, r2

        ldreq r0, TopOfROM

        beq InitRam

        ldr r3, TopOfROM

        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

        ldrcc r1, [r0], #4

        strcc r1, [r2], #4

        bcc %B0

        mov r0, #0

        ldr r3, EndOfBSS

        1

        cmp r2, r3

        strcc r0, [r2], #4

        bcc %B1

        ldr pc, =%F2 ;goto compiler address

        2

        ; [ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.

        ; bl MMU_SetAsyncBusMode

        ; |

        ; bl MMU_SetFastBusMode ; default value.

        ; ]

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

        ; Setup IRQ handler

        ldr r0,=HandleIRQ ;This routine is needed

        ldr r1,=IsrIRQ ;if there is not subs pc,lr,#4 at 0x18, 0x1c

        str r1,[r0]

        [ :LNOT:THUMBCODE

        bl Main ;Do not use main() because ......

        b .

        ]

        [ THUMBCODE ;for start-up code for Thumb mode

        orr lr,pc,#1

        bx lr

        CODE16

        bl Main ;Do not use main() because ......

        b .

        CODE32

        ]

        ;堆棧初始化的順序決定系統最后運行在哪種處理器模式,最后初始化哪種模式的堆棧,系

        ;統就運行在哪種模式。

        ;function initializing stacks

        InitStacks

        ;Do not use DRAM,such as stmfd,ldmfd......

        ;SVCstack is initialized before

        ;Under toolkit ver 2.5, msr cpsr,r1 can be used instead of msr cpsr_cxsf,r1

        mrs r0,cpsr

        bic r0,r0,#MODEMASK

        orr r1,r0,#UNDEFMODE|NOINT

        msr cpsr_cxsf,r1 ;UndefMode

        ldr sp,=UndefStack ; UndefStack=0x33FF_5C00


        上一頁 1 2 3 下一頁

        關鍵詞: TQ2440啟動代

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平原县| 彰武县| 桃园市| 建阳市| 元谋县| 康平县| 金坛市| 莱芜市| 咸宁市| 娄底市| 府谷县| 永州市| 颍上县| 顺平县| 岢岚县| 华阴市| 应城市| 波密县| 旬邑县| 任丘市| 昆明市| 永和县| 石首市| 威宁| 明溪县| 慈利县| 两当县| 西贡区| 蚌埠市| 郯城县| 湘阴县| 鲁甸县| 罗平县| 城固县| 易门县| 茂名市| 古丈县| 多伦县| 乌兰察布市| 临潭县| 平乐县|