各位大侠,DCD是什么意思?<br /><br /><br /><br /> 二. DCD伪指令什么意思?查手册“用于分配一段字内存单元”,不是标号?那怎么在startup.s<br />中,下面程序应是上电复位后,让程序跳到ResetAddr处,但是ResetAddr不是标号?<br />;中断向量表<br />Reset<br /> LDR PC, ResetAddr<br /> LDR PC, UndefinedAddr<br /> LDR PC, SWI_Addr<br /> LDR PC, PrefetchAddr<br /> LDR PC, DataAbortAddr<br /> DCD 0xb9205f80<br /> LDR PC, [PC, #-0xff0]<br /> LDR PC, FIQ_Addr<br /><br />ResetAddr DCD ResetInit<br />UndefinedAddr DCD Undefined<br />SWI_Addr DCD SoftwareInterrupt<br />PrefetchAddr DCD PrefetchAbort<br />DataAbortAddr DCD DataAbort<br />Nouse DCD 0<br />IRQ_Addr DCD 0<br />FIQ_Addr DCD FIQ_Handler<br /><br /> <br /><br /> 还有下面这个函数DCD?<br /><br /><br /><br />;/*********************************************************************************************************<br />;** 函数名称: __rt_div0<br />;** 功能描述: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小<br />;** <br />;** 输 入: 参考库函数手册<br />;**<br />;** 输 出: 无<br />;** <br />;** 全局变量: 无<br />;** 调用模块: 无<br />;**<br />;** 作 者: 陈明计<br />;** 日 期: 2004年2月2日<br />;**-------------------------------------------------------------------------------------------------------<br />;** 修改人:<br />;** 日 期:<br />;**------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br />__rt_div0<br /><br /> B __rt_div0<br /><br />StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4<br />StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4<br />StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4<br />StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4<br />StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4<br /><br /><br />;/* 分配堆栈空间 */<br /> AREA MyStacks, DATA, NOINIT, ALIGN=2<br />SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间<br />IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中断模式堆栈空间<br />FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中断模式堆栈空间<br />AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间<br />UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈<br /> END<br />;/*********************************************************************************************************<br />;** End Of File<br />;********************************************************************************************************/<br /><br /><br /><br /><br /><br /> STARTUP.S<br /><br /><br /><br />;**------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br /><br />;定义堆栈的大小<br />SVC_STACK_LEGTH EQU 0<br />FIQ_STACK_LEGTH EQU 0<br />IRQ_STACK_LEGTH EQU 128<br />ABT_STACK_LEGTH EQU 0<br />UND_STACK_LEGTH EQU 0<br /><br />NoInt EQU 0x80<br /><br />USR32Mode EQU 0x10<br />SVC32Mode EQU 0x13<br />SYS32Mode EQU 0x1f<br />IRQ32Mode EQU 0x12<br />FIQ32Mode EQU 0x11<br /><br />PINSEL2 EQU 0xE002C014<br /><br />BCFG0 EQU 0xFFE00000<br />BCFG1 EQU 0xFFE00004<br />BCFG2 EQU 0xFFE00008<br />BCFG3 EQU 0xFFE0000C<br /><br /><br />;引入的外部标号在这声明<br /> IMPORT __main ;C语言主程序入口 <br /> IMPORT TargetResetInit ;目标板基本初始化<br /> IMPORT StackUsr<br /> IMPORT bottom_of_heap<br /><br />;给外部使用的标号在这声明<br /> EXPORT Reset<br /> EXPORT Run<br /> EXPORT __rt_div0<br /> EXPORT __user_initial_stackheap<br /><br /> CODE32<br /><br /> AREA vectors,CODE,READONLY<br /> ENTRY<br />;中断向量表<br />Reset<br /> LDR PC, ResetAddr<br /> LDR PC, UndefinedAddr<br /> LDR PC, SWI_Addr<br /> LDR PC, PrefetchAddr<br /> LDR PC, DataAbortAddr<br /> DCD 0xb9205f80<br /> LDR PC, [PC, #-0xff0]<br /> LDR PC, FIQ_Addr<br /><br />ResetAddr DCD ResetInit<br />UndefinedAddr DCD Undefined<br />SWI_Addr DCD SoftwareInterrupt<br />PrefetchAddr DCD PrefetchAbort<br />DataAbortAddr DCD DataAbort<br />Nouse DCD 0<br />IRQ_Addr DCD 0<br />FIQ_Addr DCD FIQ_Handler<br /><br />;未定义指令<br />Undefined<br /> B Undefined<br /><br />;软中断<br />SoftwareInterrupt<br /> B SoftwareInterrupt<br /><br />;取指令中止<br />PrefetchAbort<br /> B PrefetchAbort<br /><br />;取数据中止<br />DataAbort<br /> B DataAbort<br /><br />;快速中断<br />FIQ_Handler<br /> B FIQ_Handler<br /><br />;/*********************************************************************************************************<br />;** 函数名称: InitStack<br />;** 功能描述: 初始化堆栈<br />;** 输 入: 无<br />;** 输 出 : 无<br />;** 全局变量: 无<br />;** 调用模块: 无<br />;** <br />;** 作 者: 陈明计<br />;** 日 期: 2004年2月2日<br />;**-------------------------------------------------------------------------------------------------------<br />;** 修 改: 陈明计 <br />;** 日 期: 2004年3月4日<br />;**-------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br />InitStack <br /> MOV R0, LR<br /><br />;设置管理模式堆栈<br /> MSR CPSR_c, #0xd3<br /> LDR SP, StackSvc<br />;设置中断模式堆栈<br /> MSR CPSR_c, #0xd2<br /> LDR SP, StackIrq<br />;设置快速中断模式堆栈<br /> MSR CPSR_c, #0xd1<br /> LDR SP, StackFiq<br />;设置中止模式堆栈<br /> MSR CPSR_c, #0xd7<br /> LDR SP, StackAbt<br />;设置未定义模式堆栈<br /> MSR CPSR_c, #0xdb<br /> LDR SP, StackUnd<br />;设置系统模式堆栈<br /> MSR CPSR_c, #0x1f<br /> LDR SP, =StackUsr<br /><br /> MOV PC, R0<br /><br />;/*********************************************************************************************************<br />;** 函数名称: ResetInit<br />;** 功能描述: 复位入口<br />;** <br />;** 输 入: 无<br />;**<br />;** 输 出: 无<br />;** <br />;** 全局变量: 无<br />;** 调用模块: 无<br />;**<br />;** 作 者: 陈明计<br />;** 日 期: 2004年2月2日<br />;**-------------------------------------------------------------------------------------------------------<br />;** 修改人: 陈明计<br />;** 日 期: 2004年3月3日<br />;**------------------------------------------------------------------------------------------------------<br />;** 修改人: 陈明计<br />;** 日 期: 2004年3月4日<br />;**------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br />ResetInit<br />;初始化外部总线控制器,根据目标板决定配置<br /><br /> LDR R0, =PINSEL2<br /> LDR R1, =0x0f814914<br /> STR R1, [R0]<br /><br /> LDR R0, =BCFG0<br /> LDR R1, =0x1000ffef<br /> STR R1, [R0]<br /><br /> LDR R0, =BCFG1<br /> LDR R1, =0x1000ffef<br /> STR R1, [R0]<br /><br />; LDR R0, =BCFG2<br />; LDR R1, =0x2000ffef<br />; STR R1, [R0]<br /><br />; LDR R0, =BCFG3<br />; LDR R1, =0x2000ffef<br />; STR R1, [R0]<br /> <br /> BL InitStack ;初始化堆栈<br /> BL TargetResetInit ;目标板基本初始化<br /> ;跳转到c语言入口<br /> B __main<br />Run<br /> LDR PC, =0x80000000<br /><br />;/*********************************************************************************************************<br />;** 函数名称: __user_initial_stackheap <br />;** 功能描述: 库函数初始化堆和栈,不能删除<br />;** <br />;** 输 入: 参考库函数手册<br />;**<br />;** 输 出: 参考库函数手册<br />;** <br />;** 全局变量: 无<br />;** 调用模块: 无<br />;**<br />;** 作 者: 陈明计<br />;** 日 期: 2004年2月2日<br />;**-------------------------------------------------------------------------------------------------------<br />;** 修改人:<br />;** 日 期:<br />;**------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br />__user_initial_stackheap <br /> LDR r0,=bottom_of_heap<br /> MOV pc,lr<br /><br /><br />;/*********************************************************************************************************<br />;** 函数名称: __rt_div0<br />;** 功能描述: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小<br />;** <br />;** 输 入: 参考库函数手册<br />;**<br />;** 输 出: 无<br />;** <br />;** 全局变量: 无<br />;** 调用模块: 无<br />;**<br />;** 作 者: 陈明计<br />;** 日 期: 2004年2月2日<br />;**-------------------------------------------------------------------------------------------------------<br />;** 修改人:<br />;** 日 期:<br />;**------------------------------------------------------------------------------------------------------<br />;********************************************************************************************************/<br />__rt_div0<br /><br /> B __rt_div0<br /><br />StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4<br />StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4<br />StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4<br />StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4<br />StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4<br /><br /><br />;/* 分配堆栈空间 */<br /> AREA MyStacks, DATA, NOINIT, ALIGN=2<br />SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间<br />IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中断模式堆栈空间<br />FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中断模式堆栈空间<br />AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间<br />UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈<br /> END<br />;/*********************************************************************************************************<br />;** End Of File<br />;********************************************************************************************************/<br /><br /><br /><br /><br /><br />三。还有我在调一。1问题时,中断设在LDR PC, [PC, #-0xff0] 怎么捕获不了USART或TIME0中断<br /> |
|