这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 大家来帮帮忙!

共1条 1/1 1 跳转至

大家来帮帮忙!

菜鸟
2004-07-28 22:10:47     打赏
这是我自己写的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



关键词: 大家     帮帮忙     代码     堆栈     中断     模式     STACK         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]