汇编源代码说明

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

;  引用头文件

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

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

AXD 的使用以及源代码说明的更多相关文章

  1. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架

    这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...

  2. arcgis api for js入门开发系列八聚合效果(含源代码)

    上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...

  3. arcgis api for js入门开发系列七图层控制(含源代码)

    上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...

  4. arcgis api for js入门开发系列六地图分屏对比(含源代码)

    上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...

  5. arcgis api for js入门开发系列五地图态势标绘(含源代码)

    上一篇实现了demo的地图查询功能,本篇新增地图态势标绘模块,截图如下: 本篇核心的在于调用API的Draw工具:https://developers.arcgis.com/javascript/3/ ...

  6. arcgis api for js入门开发系列四地图查询(含源代码)

    备注:由于实现本篇功能的需求,修改了地图数据的dlsearch.mxd,然后更新了地图服务,需要的在文章最后有提供最新的mxd以及源代码下载的 上一篇实现了demo的地图工具栏,本篇新增地图查询功能, ...

  7. 使用git进行源代码管理

    git是一款非常流行的分布式版本控制系统,使用Local Repository追踪代码的修改,通过Push和Pull操作,将代码changes提交到Remote Repository,或从Remote ...

  8. 微软开放.NET框架源代码和Mono

    微软一直在朝着更加开放的方向努力.例如,公司首席执行官萨特亚纳德拉(Satya Nadella)在Windows 10预览发布会上声称微软喜欢Linux,这并不出人意料,但是对于一家将Linux视作威 ...

  9. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

随机推荐

  1. 【模板】fread读入优化 & fwrite输出优化

    #include <iostream> #include <cstdio> #include <cctype> #define SIZE (1 << 2 ...

  2. su 和 su - 命令有何不同

    su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出 ...

  3. vue - blog开发学习2

    首页博客列表的开发 1.修改index.vue,使能够支持列表功能 <template> <div> <PostList v-for="(item,index) ...

  4. 七牛云关联Windows图床

    1. 注册七牛云 七牛云 地址,需要在这里进行注册 2.完成实名认证 需要上传身份证的正反面以及支付宝做一下认证即可. 首先进入个人中心 然后进行实名认证 由于我已经认证过了,所以显示认证完成,未认证 ...

  5. windows xp .net framework 4.0 HttpWebRequest 报The underlying connection was closed,基础连接已关闭

    windows xp .net framework 4.0 HttpWebRequest 报The underlying connection was closed,基础连接已关闭,错误的解决方法 在 ...

  6. ArrayList的几种初始化方法

    1.使用Arrays.asList方法 ArrayList<Object> obj = new ArrayList<Object>(Arrays.asList(Object o ...

  7. Centos6安装破解Confluence6.3.1

    confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享 安装和破解包百度网盘地址: 链接:https://pan.baidu.co ...

  8. vue 点击切换图标

    <div @click="showImg" class="showSearch"> <img class="header_img&q ...

  9. springboot集成使用rabbitmq笔记(2.rabbitmq使用)

    使用rabbitmq笔记一 使用rabbitmq笔记二 使用rabbitmq笔记三 1.引入包 <dependencies> <dependency> <groupId& ...

  10. 谈谈你对本次2018级ACM新手赛的体会

    第一次参加这类比赛,挺有趣的,在现场磨了四个小时也没有全写出来,收获还是挺大的,至少意识到自己是能做到这些的(笑 今后也会多多努力