44B0 Keil 启动代码详解Word格式文档下载.docx
- 文档编号:22198131
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:37.63KB
44B0 Keil 启动代码详解Word格式文档下载.docx
《44B0 Keil 启动代码详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《44B0 Keil 启动代码详解Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
//普通中断开关(0×
80:
打开;
0×
00:
关闭)
F_Bit
0x40
//快速中断开关(0×
40:
//栈配置()
系统的栈空间设定
UND_Stack_SizeEQU
0x00000000;
未定义
SVC_Stack_SizeEQU
0x00000008;
管理模式端栈长度
ABT_Stack_SizeEQU
中止模式端栈长度
FIQ_Stack_SizeEQU
快速中断模式端栈长度
IRQ_Stack_SizeEQU
0x00000080;
普通中断模式模式端栈长度
USR_Stack_SizeEQU
0x00000400;
用户模端栈长度
ISR_Stack_SizeEQU
(UND_Stack_Size+SVC_Stack_Size+ABT_Stack_Size+\FIQ_Stack_Size+IRQ_Stack_Size);
所有的堆栈大小进行相加,得到总堆栈大小
/****************************************************************************
//arm的汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性:
//READWRITE(读写)READONLY(只读)
*******************************************************************************
AREA
STACK,NOINIT,READWRITE,ALIGN=3;
开辟端栈段,段名(STACK)定义为可读可写,不初始化内存单元或将内存写0,字节对齐
Stack_Mem
SPACE
USR_Stack_Size;
//申请栈内存空间
__initial_sp
ISR_Stack_Size
Stack_Top
Stack_Mem+ISR_Stack_Size;
//定义堆栈开始地址(最大地址,堆栈向下访问)
//堆配置
//堆大小(单位字节)//
Heap_Size
0x00000000
系统的堆空间设定//定义堆空间大小(配合最后的动态内存申请使用)
HEAP,NOINIT,READWRITE,ALIGN=3;
//段名(HEAP)声明堆代码段(不初始化内存,可读写,字节对齐)
Heap_Mem
Heap_Size;
//申请堆的内存空间
时钟管理定义
CLK_BASE
0x4C000000
时钟基地址
LOCKTIME_OFS
0x00
PLL锁定时间计数器对应基地址的偏移值
MPLLCON_OFS
0x04
MPLL控制对应基地址的偏移值//认为MPLL分出三种模式:
FCLK、HCLK、PCLK
UPLLCON_OFS
0X08
UPLL控制对应基地址的偏移值//用于USB设备
CLKCON_OFS
0x0C
时钟生成控制对应基地址的偏移值
CLKSLOW_OFS
慢时钟控制对应基地址的偏移值
CLKDIVN_OFS
0X14
时钟除法器控制对应基地址的偏移值
CAMDIVN_OFS
0X18
摄象时钟除法器控制对应基地址的偏移值//UPLL提供
CLOCK_SETUP
1
时钟设置
LOCKTIME_Val
0x0FFF0FFF
PLL锁定时间计数器值
MPLLCON_Val
0x00043011
MPLL控制值
UPLLCON_Val
0x00038021
UPLL控制值
CLKCON_Val
0x001FFFF0
时钟生成控制值
CLKSLOW_Val
0x00000004
慢时钟控制值
CLKDIVN_Val
0x0000000F
时钟除法器控制值
CAMDIVN_Val
摄象时钟除法器控制值
Interruptdefinitions
中断定义
INTOFFSET
0X4A000014
中断请求源偏移地址
//中断向量表
//中断向量地址
<
0x20-0x3fffff78>
//中断向量表地址必须字对齐
//<
/e>
IntVT_SETUP
中断向量设置
IntVTAddress
0x33ffff20
中断向量地址
-----------------------存储器设定------------------------------------
IRAM_BASE
0x40000000;
//内存基地址
//看门狗定义
WT_BASE
0x53000000
看门狗基地址
WTCON_OFS
看门狗控制对应基地址的偏移值
WTDAT_OFS
看门狗数据对应基地址的偏移值
WTCNT_OFS
0x08
看门狗记数对应基地址的偏移值
WT_SETUP
看门狗设置
WTCON_Val
看门狗控制
WTDAT_Val
0x00008000
看门狗数据
存储控制器设定
MC_BASE
0x48000000
存储控制器基地址
MC_SETUP
0
BWSCON_Val
0x22000000
总线宽度和等待控制
BANKCON0_Val
0x00000700
BootROM控制
BANKCON1_Val
BANK1控制
BANKCON2_Val
BANK2控制
BANKCON3_Val
BANK3控制
BANKCON4_Val
BANK4控制
BANKCON5_Val
BANK5控制
BANKCON6_Val
0x00018005
BANK6控制
BANKCON7_Val
BANK7控制
REFRESH_Val
0x008404F3
DRAM/SDRAM刷新控制
BANKSIZE_Val
0x00000032
存储器大小控制
MRSRB6_Val
0x00000020
SDRAM的模式设置寄存器控制
MRSRB7_Val
存储控制器设定结束
I/O口设定
PIO_BASE
0x56000000
端口基地址
PCONA_OFS
端口A控制对应基地址的偏移值
PCONB_OFS
端口B控制对应基地址的偏移值
PCONC_OFS
0x20
端口C控制对应基地址的偏移值
PCOND_OFS
0x30
端口D控制对应基地址的偏移值
PCONE_OFS
端口E控制对应基地址的偏移值
PCONF_OFS
0x50
端口F控制对应基地址的偏移值
PCONG_OFS
0x60
端口G控制对应基地址的偏移值
PCONH_OFS
0x70
端口H控制对应基地址的偏移值
PCONJ_OFS
0xD0
端口J控制对应基地址的偏移值
PUPB_OFS
0x18
端口B上拉控制对应基地址的偏移值
PUPC_OFS
0x28
端口C上拉控制对应基地址的偏移值
PUPD_OFS
0x38
端口D上拉控制对应基地址的偏移值
PUPE_OFS
0x48
端口E上拉控制对应基地址的偏移值
PUPF_OFS
0x58
端口F上拉控制对应基地址的偏移值
PUPG_OFS
0x68
端口G上拉控制对应基地址的偏移值
PUPH_OFS
0x78
端口H上拉控制对应基地址的偏移值
PUPJ_OFS
0xD8
端口J上拉控制对应基地址的偏移值
--------端口配置--------------
PIO_SETUP
0
端口A
PIOA_SETUP
PCONA_Val
0x000003FF
端口B
PIOB_SETUP
PCONB_Val
PUPB_Val
端口B上拉开启
端口C
PIOC_SETUP
1
PCONC_Val
0x00001401
PUPC_Val
端口C上拉开启
端口D
PIOD_SETUP
PCOND_Val
PUPD_Val
端口D上拉开启
端口E
PIOE_SETUP
PCONE_Val
PUPE_Val
端口E上拉开启
端口F
PIOF_SETUP
PCONF_Val
PUPF_Val
端口F上拉开启
端口G
PIOG_SETUP
PCONG_Val
PUPG_Val
端口G上拉开启
端口H
PIOH_SETUP
PCONH_Val
0x000007FF
PUPH_Val
端口H上拉开启
端口J
PIOJ_SETUP
PCONJ_Val
PUPJ_Val
端口J上拉开启
汇编程序数据8字节对齐
PRESERVE8
c和汇编有8位对齐的要求,这个伪指令可以满足此要求
//存储区设定和程序入口点
//启动代码必须连接到第一个地址才能运行。
RESET,CODE,READONLY;
//开辟端栈段,段名(RESET)定义RESET代码段为只读
ARM
//ARM模式运行程序
//异常向量
//影射到地址0
//必须使用,绝对寻址方式。
//虚处理(子程序)是用一个无限循环实现的,它是可修改的..//(11942295)翻译
Vectors
LDR
PC,Reset_Addr;
复位
PC,Undef_Addr;
未定义指令
PC,SWI_Addr
软件中断
PC,PAbt_Addr;
中止(预取)
PC,DAbt_Addr;
中止(数据)
NOP
保留向量
PC,IRQ_Addr
普通
PC,FIQ_Addr
快速中断
IF
IntVT_SETUP<
>
//中断向量表地址
HandleEINT0
IntVTAddress
HandleEINT1
IntVTAddress+4
HandleEINT2
IntVTAddress+4*2
HandleEINT3
IntVTAddress+4*3
HandleEINT4_7
IntVTAddress+4*4
HandleEINT8_23
IntVTAddress+4*5
HandleCAM
IntVTAddress+4*6
HandleBATFLT
IntVTAddress+4*7
HandleTICK
IntVTAddress+4*8
HandleWDT
IntVTAddress+4*9
HandleTIMER0
IntVTAddress+4*10
HandleTIMER1
IntVTAddress+4*11
HandleTIMER2
IntVTAddress+4*12
HandleTIMER3
IntVTAddress+4*13
HandleTIMER4
IntVTAddress+4*14
HandleUART2
IntVTAddress+4*15
HandleLCD
IntVTAddress+4*16
HandleDMA0
IntVTAddress+4*17
HandleDMA1
IntVTAddress+4*18
HandleDMA2
IntVTAddress+4*19
HandleDMA3
IntVTAddress+4*20
HandleMMC
IntVTAddress+4*21
HandleSPI0
IntVTAddress+4*22
HandleUART1
IntVTAddress+4*23
HandleNFCON
IntVTAddress+4*24
HandleUSBD
IntVTAddress+4*25
HandleUSBH
IntVTAddress+4*26
HandleIIC
IntVTAddress+4*27
HandleUART0
IntVTAddress+4*28
HandleSPI1
IntVTAddress+4*39
HandleRTC
IntVTAddress+4*30
HandleADC
IntVTAddress+4*31
IRQ_Entry
sub
sp,sp,#4
//保留PC值
stmfdsp!
{r8-r9}
ldr
r9,=INTOFFSET
r9,[r9]
r8,=HandleEINT0
add
r8,r8,r9,lsl#2
r8,[r8]
str
r8,[sp,#8]
ldmfdsp!
{r8-r9,pc}
ENDIF
Reset_Addr
DCD
Reset_Handler;
定义中断的入口地址;
以Reset_Addr为Reset_Handler分配一段字对齐的内存单元
Undef_Addr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 44B0 Keil 启动代码详解 44 B0 启动 代码 详解