原创 DSP_2812头文件分析--读书笔记

2010-12-28 09:59 3876 8 4 分类: 软件与OS

一.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区查表,而不要载入其它区域

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条