一.DSP_2812头文件分析:
1.
寄存器结构体的定义
1.1
传统的方法 #define CPUTIMER0_TIM
(volatile unsigned long *) 0x0C00 //0xC00 定时器0 计数器低位
1.2
位域及结构体方法
1.2.1 定时器寄存器的定义// CPU
Timer Register File:将与定时器相关的寄存器定义到一个结构体中
//寄存器排列的顺序与它们在内存中的顺序一致。
//内存中的保留位置使用保留变量(rsvd1,rsvd2等)预留空间
struct
CPUTIMER_REGS {
union TIM_GROUP TIM;
// Timer counter register
union PRD_GROUP PRD;
// Period register
union TCR_REG TCR; // Timer control register
Uint16 rsvd1;
// reserved
union TPR_REG TPR; // Timer pre-scale low
union TPRH_REG TPRH; // Timer pre-scale high
};
1.2.2
union
TIM_GROUP {
Uint32 all;
struct TIM_REG half;
};
1.2.3
// PRD,
PRDH: Period register definitions:
struct
PRD_REG {
Uint16
LSW;
Uint16
MSW;
};
1.2.2 分配专用的数据区
在DSP281_GlobalVariableDefs.c文件中,
通过使用编译器的#pragram DATA_SECTION,与外设寄存器结构体类型相对应的每一个变量都将被分配一个专用的数据区。
//#################################################################//
// FILE:
DSP2803x_GlobalVariableDefs.c
/
/// TITLE: DSP2803x Global Variables and Data Section Pragmas.
//
//#################################################################
//----------------------------------------
#ifdef __cplusplus
//用于C++代码
#pragma DATA_SECTION("CpuTimer1RegsFile")
#else //用于C代码
#pragma
DATA_SECTION(CpuTimer1Regs,"CpuTimer1RegsFile");
#endif
volatile struct CPUTIMER_REGS CpuTimer1Regs;
//定义一个CpuTimer1Regs变量具有CPUTIMER_REGS 类型
1.2.3映射到外设寄存器
每个结构体分配到自身的数据区后,通过使用链接命令文件*.cmd,每个数据区都将被直接映射到外设内存映射寄存器上
//#################################################################
//
// FILE:
DSP2803x_Headers_nonBIOS.cmd
//
// TITLE:
DSP2803x Peripheral registers linker command file
//
//#################################################################
MEMORY
{
PAGE 0: /* Program Memory */
PAGE 1: /* Data Memory */
CPU_TIMER1 : origin = 0x000C08, length = 0x000008
/* CPU Timer0 registers (CPU Timer1 &
Timer2 reserved TI use)*/
CPU_TIMER2 : origin = 0x000C10, length = 0x000008
/* CPU Timer0
registers (CPU Timer1 & Timer2 reserved TI use)*/
SECTIONS
{
/*** Peripheral Frame 0 Register Structures ***/
CpuTimer0RegsFile : > CPU_TIMER0,
PAGE = 1
CpuTimer1RegsFile
: > CPU_TIMER1, PAGE = 1
CpuTimer2RegsFile : > CPU_TIMER2,
PAGE = 1
二.IQmath方法
2.1 IQ数据不同Q值对应的数据范围和精度不同,具体可以查表
2.2 IQmath函数及其调用方法
(1)将IQmathLib.h加入到头文件中,并且定义全局Q值GLOBAL_Q。
(2)在项目的库文件中增加IQmath的库文件IQmath.lib;
(3)在CMD文件中,将”IQmath”输出段正确放置在程序存储区中。
IQmath : > RAML0L1, PAGE = 0
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
IQmathTables已经被烧制在BOOTROM区,在CMD文件中,该输出段必须被设置成“NOLOAD”类型,即只需在BOOTROM区查表,而不要载入其它区域
文章评论(0条评论)
登录后参与讨论