📄 44binit.s
字号:
;/*
;************************************************************************************************************
;* 北京精仪达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名称 : 44binit.s
;* 文件功能 : 该文件为ARM7硬件平台的C语言启动代码,用于分配中断向量表,初始化ISR地址,初始化堆栈空间,
;* 初始化应用程序执行环境,配置存储器系统,设定时钟周期,呼叫主应用程序。
;* 补充说明 : 基于S3C44B0的ARM7硬件平台的启动代码
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
GET ..\inc\option.inc
GET ..\inc\memcfg.inc
IMPORT |Image$$RO$$Limit| ;// 声明输入ROM区中的RW地址(即:存储RO代码最后地址的下一地址)
IMPORT |Image$$RW$$Base| ;// 声明输入RAM区的开始地址
IMPORT |Image$$ZI$$Base| ;// 声明输入零初始化区的开始地址
IMPORT |Image$$ZI$$Limit| ;// 声明输入零初始化区的末地址的下一地址
IMPORT Main ;// 声明输入主程序入口地址
AREA Init,CODE,READONLY
ENTRY
b ResetHandler ;//调试用的程序入口地址
b HandlerUndef ;//从未定义向量地址跳到一个地址,该地址存放进入未定义服务子程序的地址
b HandlerSWI ;//从软中断向量地址跳到一个地址,该地址存放进入软中断服务子程序的地址
b HandlerPabort ;//从指令预取指终止向量地址跳到一个地址,该地址存放进入指令预取指终止服务子程序的地址
b HandlerDabort ;//从数据终止向量地址跳到一个地址,该地址存放进入数据终止服务子程序的地址
b . ;//系统保留
subs pc,lr,#4 ;//使用向量中断方式
b HandlerFIQ ;//从FIQ向量地址跳到一个地址,该地址存放进入FIQ服务子程序的地址
;/*********************************************** 注意! ******************************************************/
;// 如果向量中断模式使能, 上面两条指令应按下面给出的相应改变
;// b HandlerIRQ -> subs pc,lr,#4
;// b HandlerFIQ -> subs pc,lr,#4
;/******************************* S3C44B0X中断控制器的向量中断的向量地址表 ***********************************/
VECTOR_BRANCH
ldr pc,=HandlerEINT0 ;//0x00000020
ldr pc,=HandlerEINT1 ;//0x00000024
ldr pc,=HandlerEINT2 ;//0x00000028
ldr pc,=HandlerEINT3 ;//0x0000002C
ldr pc,=HandlerEINT4567 ;//0x00000030
ldr pc,=HandlerTICK ;//0x00000034
ldr pc,=HandlerDef ;//0x00000038
ldr pc,=HandlerDef ;//0x0000003C
ldr pc,=HandlerZDMA0 ;//0x00000040
ldr pc,=HandlerZDMA1 ;//0x00000044
ldr pc,=HandlerBDMA0 ;//0x00000048
ldr pc,=HandlerBDMA1 ;//0x0000004C
ldr pc,=HandlerWDT ;//0x00000050
ldr pc,=HandlerUERR01 ;//0x00000054
ldr pc,=HandlerDef ;//0x00000058
ldr pc,=HandlerDef ;//0x0000005C
ldr pc,=HandlerTIMER0 ;//0x00000060
ldr pc,=HandlerTIMER1 ;//0x00000064
ldr pc,=HandlerTIMER2 ;//0x00000068
ldr pc,=HandlerTIMER3 ;//0x0000006C
ldr pc,=HandlerTIMER4 ;//0x00000070
ldr pc,=HandlerTIMER5 ;//0x00000074
ldr pc,=HandlerDef ;//0x00000078
ldr pc,=HandlerDef ;//0x0000007C
ldr pc,=HandlerURXD0 ;//0x00000080
ldr pc,=HandlerURXD1 ;//0x00000084
ldr pc,=HandlerIIC ;//0x00000088
ldr pc,=HandlerSIO ;//0x0000008C
ldr pc,=HandlerUTXD0 ;//0x00000090
ldr pc,=HandlerUTXD1 ;//0x00000094
ldr pc,=HandlerDef ;//0x00000098
ldr pc,=HandlerDef ;//0x0000009C
ldr pc,=HandlerRTC ;//0x000000A0
ldr pc,=HandlerDef ;//0x000000A4
ldr pc,=HandlerDef ;//0x000000A8
ldr pc,=HandlerDef ;//0x000000AC
ldr pc,=HandlerDef ;//0x000000B0
ldr pc,=HandlerDef ;//0x000000B4
ldr pc,=HandlerDef ;//0x000000B8
ldr pc,=HandlerDef ;//0x000000BC
ldr pc,=HandlerADC ;//0x000000C0
ldr pc,=HandlerDef ;//0x000000C4
ldr pc,=HandlerDef ;//0x000000C8
ldr pc,=HandlerDef ;//0x000000CC
ldr pc,=HandlerDef ;//0x000000D0
ldr pc,=HandlerDef ;//0x000000D4
ldr pc,=HandlerDef ;//0x000000D8
ldr pc,=HandlerDef ;//0x000000DC
ldr pc,=EnterPWDN ;//0x000000E0 = EnterPWDN
LTORG
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ ;//没有使用!
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
HandlerADC VHANDLER HandleADC
HandlerRTC VHANDLER HandleRTC
HandlerUTXD1 VHANDLER HandleUTXD1
HandlerUTXD0 VHANDLER HandleUTXD0
HandlerSIO VHANDLER HandleSIO
HandlerIIC VHANDLER HandleIIC
HandlerURXD1 VHANDLER HandleURXD1
HandlerURXD0 VHANDLER HandleURXD0
HandlerTIMER5 VHANDLER HandleTIMER5
HandlerTIMER4 VHANDLER HandleTIMER4
HandlerTIMER3 VHANDLER HandleTIMER3
HandlerTIMER2 VHANDLER HandleTIMER2
HandlerTIMER1 VHANDLER HandleTIMER1
HandlerTIMER0 VHANDLER HandleTIMER0
HandlerUERR01 VHANDLER HandleUERR01
HandlerWDT VHANDLER HandleWDT
HandlerBDMA1 VHANDLER HandleBDMA1
HandlerBDMA0 VHANDLER HandleBDMA0
HandlerZDMA1 VHANDLER HandleZDMA1
HandlerZDMA0 VHANDLER HandleZDMA0
HandlerTICK VHANDLER HandleTICK
HandlerEINT4567 VHANDLER HandleEINT4567
HandlerEINT3 VHANDLER HandleEINT3
HandlerEINT2 VHANDLER HandleEINT2
HandlerEINT1 VHANDLER HandleEINT1
HandlerEINT0 VHANDLER HandleEINT0
HandlerDef
stmfd sp!,{r0,r1} ;//r0,r1入栈
ldr r0,=I_PMST ;//把中断主从优先级分配器地址放入r0
ldr r1,[r0] ;//把其里面的内容放入r1
str r1,[r0] ;//把寄存器r1的内容放入中断主从优先级分配器地址
ldmfd sp!,{r0,r1} ;//原r0,r1工作寄存器内容出栈
subs pc,lr,#4 ;//跳回到原执行地址
;/*
;************************************************************************************************************
;** 程序开始 **
;************************************************************************************************************
;*/
ResetHandler
b Main
ldr r0,=WTCON ;//把看门狗定时器地址给r0
mov r1,#0x00 ;//赋初值
str r1,[r0] ;//关闭看门狗定时器
ldr r0,=INTMSK ;//把屏蔽中断寄存器地址给r0
mov r1,#0x07ffffff ;//赋初值
str r1,[r0] ;//关闭所有中断
;/*
;************************************************************************************************************
;** 时钟控制器配置 **
;************************************************************************************************************
;*/
ldr r0,=LOCKTIME ;//把上锁时间定时器地址给r0
ldr r1,=0x8fc; ;//赋初值count = t_lock * Fin = 230us * 10MHz = 2300
str r1,[r0] ;//写入上锁时间定时器,PLL稳定时间为230 us
[ PLLONSTART
ldr r0,=PLLCON ;//PLL控制寄存器地址给r0
ldr r1,=((M_DIV<<12) + (P_DIV<<4) + S_DIV) ;//设定锁相环 Fin=10MHz,Fout=40MHz
str r1,[r0] ;//写入PLL控制寄存器
]
ldr r0,=CLKCON ;//把时钟控制器地址给r0
ldr r1,=0x7ff8 ;//给所有外设单元的时钟打开赋值
str r1,[r0] ;//写入时钟控制器
;/*
;************************************************************************************************************
;** DMA寄存器配置 **
;************************************************************************************************************
;*/
ldr r0,=BDIDES0
ldr r1,=0x40000000 ;//BDIDES0 复位值为 0x40000000
str r1,[r0]
ldr r0,=BDIDES1
ldr r1,=0x40000000 ;//BDIDES1 复位值为 0x40000000
str r1,[r0]
;/*
;************************************************************************************************************
;** 存储器寄存器配置 **
;************************************************************************************************************
;*/
ldr r0,=SMRDATA ;//把配置数据的存放地址送入
ldmia r0!,{r1-r13} ;//存入寄存器
mov r0,#0x01c80000 ;//加载总线控制器地址
stmia r0!,{r1-r13} ;//送入控制字到总线控制器
;/*
;************************************************************************************************************
;** 初始化堆栈 **
;************************************************************************************************************
;*/
bl InitStacks
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -