这是我自己写的AT91RF40162的启动代码,望高手们看看有没有什么问题啊,头文件at91m40800_include.h 是我自己定义的一个寄存器声明的文件! 文件init.s : EXPORT InitStack CODE32
AREA Init_Stack,CODE,READONLY
;初始化堆栈
InitStack
MOV R0, LR
;设置管理模式堆栈
MSR CPSR_c, #0xd3
LDR SP, StackSvc
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;设置系统模式堆栈
MSR CPSR_c, #0xdf
LDR SP, StackUsr
MOV PC, R0 ;定义堆栈的大小
USR_STACK_LEGTH EQU 64
SVC_STACK_LEGTH EQU 0
FIQ_STACK_LEGTH EQU 16
IRQ_STACK_LEGTH EQU 64
ABT_STACK_LEGTH EQU 0
UND_STACK_LEGTH EQU 0 StackUsr DCD UsrStackSpace+(USR_STACK_LEGTH-1)*4
StackSvc DCD SvcStackSpace+(SVC_STACK_LEGTH-1)*4
StackIrq DCD IrqStackSpace+(IRQ_STACK_LEGTH-1)*4
StackFiq DCD FiqStackSpace+(FIQ_STACK_LEGTH-1)*4
StackAbt DCD AbtStackSpace+(ABT_STACK_LEGTH-1)*4
StackUnd DCD UndtStackSpace+(UND_STACK_LEGTH-1)*4 ;分配堆栈空间
AREA MyStacks, DATA, NOINIT, ALIGN=2
UsrStackSpace SPACE USR_STACK_LEGTH*4 ;用户(系统)模式堆栈空间
SvcStackSpace SPACE SVC_STACK_LEGTH*4 ;管理模式堆栈空间
IrqStackSpace SPACE IRQ_STACK_LEGTH*4 ;中断模式堆栈空间
FiqStackSpace SPACE FIQ_STACK_LEGTH*4 ;快速中断模式堆栈空间
AbtStackSpace SPACE ABT_STACK_LEGTH*4 ;中止义模式堆栈空间
UndtStackSpace SPACE UND_STACK_LEGTH*4 ;未定义模式堆栈 ;分配堆空间
AREA Myheap, DATA, NOINIT, ALIGN=2
bottom_of_heap SPACE 256 ;库函数的堆空间 END 文件 target.c : #include "at91m40800_include.h"
extern int main(void); //TargetInit,目标板初始化代码,在需要的地方调用,根据需要改变
void TargetInit(void)
{
//添加自己的代码
} //TargetResetInit,调用main函数前目标板初始化代码,根据需要改变,不能删除
void TargetResetInit(void)
{
//添加自己的代码
} //Reset,复位异常处理程序,用户根据需要自己改变程序
void Reset_Int(void)
{
//添加自己的代码
EBI_RCR |= 0x00000001;
TargetInit ();
TargetResetInit ();
main ();
} //FIQ,快速中断异常处理程序,用户根据需要自己改变程序
void FIQ_Int(void)
{
//添加自己的代码
} //未定义指令异常处理程序
void Undefined_Int(void)
{
//添加自己的代码
} //软中断异常处理程序
void Software_Int(void)
{
//添加自己的代码
} //预取指令中断异常处理程序
void PrefetchAbort_Int(void)
{
//添加自己的代码
} //取数据中止异常处理程序
void DataAbort_Int(void)
{
//添加自己的代码
} 文件 vectors.s : IMPORT FIQ_Int ;快速中断异常处理程序
IMPORT Reset_Int ;复位异常处理程序
IMPORT Undefined_Int ;未定义指令异常处理程序
IMPORT Software_Int ;软中断异常处理程序
IMPORT PrefetchAbort_Int ;预取指令中断异常处理程序
IMPORT DataAbort_Int ;取数据中止异常处理程序
EXPORT Vectors CODE32
AREA Intrupt,CODE,READONLY
;中断向量表
Vectors
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, [PC,#-&f20]
LDR PC, FIQ_Addr ResetAddr DCD Reset
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler ;复位中断
Reset
BL Reset_Int
;未定义指令
Undefined
BL Undefined_Int
;软中断
SoftwareInterrupt
BL Software_Int
;预取指令中断
PrefetchAbort
BL PrefetchAbort_Int
;取数据中止
DataAbort
BL DataAbort_Int
;快速中断
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Int
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4 END
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |