zoukankan      html  css  js  c++  java
  • AXD 的使用以及源代码说明

    汇编源代码说明

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

    ;  引用头文件

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

    get bdinit.h

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

    ; 引用标准变量

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

    IMPORT

    |Image$$RO$$Base|

    ; Base address of RO section

    IMPORT

    |Image$$RO$$Limit|

    ; End address of RO section

    IMPORT

    |Image$$RW$$Base|

    ; Base address of RW section

    IMPORT

    |Image$$RW$$Limit|

    ; End address of RW section

    IMPORT

    |Image$$ZI$$Base|

    ; Base address of ZI section

    IMPORT

    |Image$$ZI$$Limit|

    ; End addresss of ZI section

    IMPORT  bdmain   ; The entry function of C program

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

    ; 宏定义

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

    ; macro HANDLER

    MACRO

    $HandlerLabel HANDLER $HandleLabel

    $HandlerLabel

    sub     sp,sp,#4       ;Decrement sp (to store jump address) stmfd        sp!,{r0}       ;PUSH the work register to stack

    ldr     r0,=$HandleLabel;Load the address of HandleXXX to r0

    ldr     r0,[r0]        ;Load the contents(service routine start address) of HandleXXX str        r0,[sp,#4]     ;Store the contents(ISR) of HandleXXX to stack

    ldmfd   sp!,{r0,pc}    ;POP the work register and pc(jump to ISR) MEND

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

    ; 汇编语言的入口代码

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

    AREA    Init,CODE,READONLY CODE32

    ENTRY

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

    ; 建立中断向量表

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

    b

    reset_handler

    ;0x00000000:

    Reset (SVC)

    b

    undef_handler

    ;0x00000004:

    Undefined instruction (Undef)

    b

    swi_handler

    ;0x00000008:

    Software Interrupt (SVC)

    b

    iabr_handler

    ;0x0000000C:

    Instruction Abort (Abort)

    b

    dabr_handler

    ;0x00000010:

    Data Abort (Abort)

    b

    no_handler

    ;0x00000014:

    b

    irq_handler

    ;0x00000018:

    IRQ (IRQ)

    b

    fiq_handler

    ;0x0000001C:

    FIQ (FIQ)

    LTORG

    undef_handler HANDLER HandleUndef swi_handler             HANDLER HandleSWI iabr_handler HANDLER HandlePabort dabr_handler HANDLER HandleDabort no_handler   HANDLER HandleReserved irq_handler             HANDLER HandleIRQ fiq_handler HANDLER HandleFIQ

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

    ;  复位时运行的主程序

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

    reset_handler

    ;Set the cpu to SVC32 mode mrs  r0,cpsr

    bic     r0,r0,#0x1f

    orr     r0,r0,#0xd3

    msr     cpsr_cxsf,r0

    ;Turn off watchdog ldr  r0,=WTCON

    ldr    r1,=0x0

    str    r1,[r0]

    ;Disable all the first level interrupts ldr r0,=INTMSK

    ldr    r1,=0xffffffff str   r1,[r0]

    ;Disable all the second level interrupts ldr       r0,=INTSUBMSK

    ldr    r1,=0x7ff

    str    r1,[r0]

    ;Configure MPLL ldr r0,=MPLLCON

    ldr    r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHz,Fout=200MHz

    str    r1,[r0]

    ;Set FCLK:HCLK:PCLK = 1:2:4 ldr  r0, =CLKDIVN

    mov    r1, #3

    str    r1, [r0]

    ;Set memory control registers ldr r0,=SMRDATA

    ldr

    r1,=BWSCON

    add

    r2, r0, #52         ;End address of SMRDATA

    0

    ldr

    r3, [r0], #4

    str

    r3, [r1], #4

    cmp

    r2, r0

    bne

    %B0

    ;Initialize stacks bl  InitStacks

    ;Setup IRQ handler

    ldr    r0,=HandleIRQ       ;This routine is needed ldr  r1,=IsrIRQ

    str    r1,[r0]

    ;Copy RW/ZI section into RAM

    ldr    r0, =|Image$$RO$$Limit|;Get pointer to ROM data ldr  r1, =|Image$$RW$$Base| ;and RAM copy

    ldr    r3, =|Image$$ZI$$Base|

    cmp    r0, r1              ; Check that they are different beq  %F2

    1

    cmp    r1, r3              ; Copy init data

    ldrcc  r2, [r0], #4        ;--> LDRCC r2, [r0] + ADD r0, r0, #4 strcc  r2, [r1], #4     ;--> STRCC r2, [r1] + ADD r1, r1, #4

    bcc    %B1

    2

    ldr    r1, =|Image$$ZI$$Limit| ; Top of zero init segment mov   r2, #0

    3

    cmp    r3, r1              ; Zero init strcc    r2, [r3], #4

    bcc    %B3

    bl bdmain              ;Jump to the main function

    ;Dead loop

    1

    nop

    b      %B1

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

    ;  初始中断处理程序

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

    IsrIRQ

    sub    sp,sp,#4      ;reserved for PC 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}

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

    ; 初始化各个模式下堆栈

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

    InitStacks

    mrs    r0,cpsr

    bic    r0,r0,#MODEMASK

    orr    r1,r0,#UNDEFMODE|NOINT

    msr    cpsr_cxsf,r1        ;UndefMode ldr       sp,=UndefStack

    orr    r1,r0,#ABORTMODE|NOINT

    msr    cpsr_cxsf,r1        ;AbortMode ldr       sp,=AbortStack

    orr    r1,r0,#IRQMODE|NOINT

    msr    cpsr_cxsf,r1        ;IRQMode ldr       sp,=IRQStack

    orr    r1,r0,#FIQMODE|NOINT

    msr    cpsr_cxsf,r1        ;FIQMode ldr       sp,=FIQStack

    bic    r0,r0,#MODEMASK|NOINT orr       r1,r0,#SVCMODE

    msr    cpsr_cxsf,r1        ;SVCMode ldr       sp,=SVCStack

    mov    pc,lr               ;Return the call routine LTORG

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

    ; 内存区控制寄存器值表; 你可根据需要修改 bdinit.h 文件, 下面代码不用做任何改动

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

    SMRDATA DATA

    DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+( B7_BWSCON<<28))

    DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))                                                                                      ;GCS0

    DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))                                                                                      ;GCS1

    DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))                                                                                      ;GCS2

    DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))                                                                                      ;GCS3

    DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))                                                                                      ;GCS4

    DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))                                                                                      ;GCS5

    DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6 DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))     ;GCS7

    DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)

    DCD 0x32           ;SCLK power saving mode, BANKSIZE 128M/128M DCD 0x30                   ;MRSR6 CL=3clk

    DCD 0x30           ;MRSR7 ALIGN

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

    ; 异常及中断向量表空间; 安装异常或中断处理程序在 bdisr.c 中,isr_setup()来完成.

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

    AREA RamData, DATA, READWRITE

    ^   _ISR_STARTADDRESS ;表示下面数据区从_ISR_STARTADDRESS 指定的位置开始 HandleReset               # 4

    HandleUndef   #   4

    HandleSWI     #   4

    HandlePabort

    #

    4

    HandleDabort

    #

    4

    HandleReserved

    #

    4

    HandleIRQ

    #

    4

    HandleFIQ

    #

    4

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

    ; The Interrupt table

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

    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

    END

  • 相关阅读:
    关于position定位
    获取滚动条距离的兼容问题
    margin取百分值
    float 与 display:inline-block
    Object.getOwnPropertyNames()
    正则表达式的方法:replace,match,test(replace参数可以是回调函数)
    offset / scroll / client Left / Top
    client / page / offset / screen X / Y
    原生js贪吃蛇
    Functional PHP 5.3 Part I
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11103227.html
Copyright © 2011-2022 走看看