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