汇编源代码说明

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

;  引用头文件

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

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. React-native 关于键盘遮挡界面问题

    //引入 KeyboardAvoidingView import { KeyboardAvoidingView } from 'react-native'; //使用 KeyboardAvoiding ...

  2. Java的部分问题和小结

    2015/9/6 ThreadLocal:该类提供了线程局部变量,这样可以生成对每个线程唯一的局部标识符. 2015/9/18 1.乱码问题:  js:xdata = encodeURI(encode ...

  3. input | button | textarea 元素的checked, disabled,hidden属性控制

    这三种元素涉及到的checked, disabled,hidden属性的控制方法如下 一.attribute方法: //以下3行,都会影响HTML的( checked | disabled | hid ...

  4. TCP的状态及变迁

    十一种状态如下图: 全部11种状态1. 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT .2. 服务器独有的: ...

  5. Python新建文件夹

    import os os.mkdir('OS-Demo-2') os.makedirs('OS-Demo-3/sub-Dir-1') os.mkdir()和os.makedirs()都可以新建文件夹, ...

  6. pro、pre、test、dev环境

    开发过程中四个环境分别是:pro.pre.test.dev环境,中文名字:生产环境.灰度环境.测试环境.开发环境 环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境. ...

  7. C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的外挂. 作为微软. ...

  8. TI低功耗蓝牙(BLE)介绍【转】

    转自:http://blog.csdn.net/ooakk/article/details/7302425 TI低功耗蓝牙(BLE)介绍 本文档翻译和修改自参考资料:CC2540Bluetooth L ...

  9. python 参数定义库argparse

    python 参数定义库argparse 这一块的官方文档在这里 注意到这个库是因为argparse在IDE中和在ipython notebook中使用是有差异的,习惯了再IDE里面用,转到ipyth ...

  10. 23、css的定位问题

    1.positon:relative相对定位 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...