DSp寄存器“是怎么和板子上的”具体地址“一一对应起来的

 

转自:http://hzcjustfly.blog.163.com/blog/static/18319712920117191123928/

    最近在学习DSP,今天在开发板TMS320F2808学习例程的时候,对CMD文件感觉还不是很理解,特别是对于”寄存器名“是怎么和板子上的”具体地址“一一对应起来的,结合店家的讲解和自己理解,简单回顾一下。

     首先,查阅TI的文件,可以得到F2808存储空间的映射图如下:

                                                            

 

 

 

对照CMD文件,还是比较好理解Flash和RAM的分配。

 

 

但是在另外一个cmd文件我当时就疑惑了:

 

 

Example_280xGpioToggle.c在程序中有一行如下:

 

 

GpioDataRegs.GPATOGGLE.bit.GPIO26 =1; 

这个是GPIO得数据寄存器中的GPATOGGLE寄存器,控制26号I/O口为输出,通过查阅TI文档,知道该寄存器的地址是:“GPATOGGLE   0x6FC6”,但它到底是怎么对应起来的呢?因为以前学过单片机,感觉单片机的很明确,这个却摸不着头脑。

-----------------------------------------------------------------------------

在文件DSP280x_GlobalVariableDefs.c中找到如下定义:

volatile struct GPIO_DATA_REGS GpioDataRegs;

-------------------------------------------------------------------------------

在文件DSP280x_Gpio.h中找到结构体的定义如下:

struct GPIO_DATA_REGS {

   union  GPADAT_REG       GPADAT;       // GPIO Data Register (GPIO0 to 31)

   union  GPADAT_REG       GPASET;       // GPIO Data Set Register (GPIO0 to 31)

   union  GPADAT_REG       GPACLEAR;     // GPIO Data Clear Register (GPIO0 to 31)

   union  GPADAT_REG       GPATOGGLE;    // GPIO Data Toggle Register (GPIO0 to 31) 

   union  GPBPUD_REG       GPBDAT;       // GPIO Data Register (GPIO32 to 63)

   union  GPBDAT_REG       GPBSET;       // GPIO Data Set Register (GPIO32 to 63)

   union  GPBDAT_REG       GPBCLEAR;     // GPIO Data Clear Register (GPIO32 to 63)

   union  GPBDAT_REG       GPBTOGGLE;    // GPIO Data Toggle Register (GPIO32 to 63)

   Uint16                  rsvd1[16];

};

extern volatile struct GPIO_DATA_REGS GpioDataRegs;

------------------------------------------------------------------------------------------

接着找下去:

union GPADAT_REG {

   Uint32              all;

   struct GPADAT_BITS  bit;

};

struct GPADAT_BITS {          // bits   description

   Uint16 GPIO0:1;            // 0      GPIO0   

   Uint16 GPIO1:1;            // 1      GPIO1 

   Uint16 GPIO2:1;            // 2      GPIO2 

   Uint16 GPIO3:1;            // 3      GPIO3    

   Uint16 GPIO4:1;            // 4      GPIO4 

   Uint16 GPIO5:1;            // 5      GPIO5 

   Uint16 GPIO6:1;            // 6      GPIO6    

   Uint16 GPIO7:1;            // 7      GPIO7 

   Uint16 GPIO8:1;            // 8      GPIO8 

   Uint16 GPIO9:1;            // 9      GPIO9    

   Uint16 GPIO10:1;           // 10     GPIO10 

   Uint16 GPIO11:1;           // 11     GPIO11       

   Uint16 GPIO12:1;           // 12     GPIO12 

   Uint16 GPIO13:1;           // 13     GPIO13 

   Uint16 GPIO14:1;           // 14     GPIO14 

   Uint16 GPIO15:1;           // 15     GPIO15 

   Uint16 GPIO16:1;           // 16     GPIO16   

   Uint16 GPIO17:1;           // 17     GPIO17 

   Uint16 GPIO18:1;           // 18     GPIO18 

   Uint16 GPIO19:1;           // 19     GPIO19   

   Uint16 GPIO20:1;           // 20     GPIO20

   Uint16 GPIO21:1;           // 21     GPIO21 

   Uint16 GPIO22:1;           // 22     GPIO22    

   Uint16 GPIO23:1;           // 23     GPIO23

   Uint16 GPIO24:1;           // 24     GPIO24 

   Uint16 GPIO25:1;           // 25     GPIO25    

   Uint16 GPIO26:1;           // 26     GPIO26 

   Uint16 GPIO27:1;           // 27     GPIO27       

   Uint16 GPIO28:1;           // 28     GPIO28 

   Uint16 GPIO29:1;           // 29     GPIO29 

   Uint16 GPIO30:1;           // 30     GPIO30 

   Uint16 GPIO31:1;           // 31     GPIO31 

};

在cmd文件中,定义了

GpioDataRegs

 

的地址,而DSP280x_Gpio.h的GPIO_DATA_REGS定义了GPIO_DATA_REGS与GPATOGGLE的相对位置,所以

 

GPATOGGLE的绝对地址也就确定下来了。

 

 

 

 

--------------------------------------------------------------------------------------------------------

 

GpioDataRegs

的地址又是怎么被确定的?可以翻看文件找到如下信息:

文件DSP280x_GlobalVariableDefs.c中有:

#ifdef __cplusplus 

#pragma DATA_SECTION("GpioDataRegsFile") 

#else 

#pragma DATA_SECTION(GpioDataRegs,"GpioDataRegsFile");      //这里定义了寄存器的段明(要在定义和使用之前先设置好)

#endif

volatile struct GPIO_DATA_REGS  GpioDataRegs;       //定义结构变量;volatile struct 标识符 变量名           

--------------------------------------------------------------------------------

DSP280x_Headers_nonBIOS.cmd中

MEMORY有如下信息:

 

PAGE 1: 

GPIODAT     : origin = 0x006FC0, length = 0x000020     /* GPIO data registers */

 

SECTION有如下信息:

 

GpioDataRegsFile  : > GPIODAT      PAGE = 1

 

 

就是这样了,有点乱,大概记录一下吧。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值