转自: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

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

DSp寄存器“是怎么和板子上的”具体地址“一一对应起来的的更多相关文章

  1. 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号

    每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我 ...

  2. 使用IO映射的方式获取tiny4412板子上的ID号

    在以前的文章中,有一篇 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号 在那篇文章中,具体可以参考.那时候我使用了简单的字符设备驱动框架,最终的ID号通过read方法可将 ...

  3. 如何获取板子上独有的ID号EXYNOS4412/Imx6ul【转】

    本文转载自:http://blog.csdn.net/u010871058/article/details/75637175 每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含 ...

  4. NFS 网络文件系统挂载在A8板子上

    我承认自己是菜鸟,没什么网络知识就来搞挂载nfs网络文件系统,花费了5天的时间才把nfs网络文件系统成功挂载在A8板子上,实现了A8板子和虚拟机的文件共享.分享一下个人经验: 以下是基于nfs已经完成 ...

  5. gdbserver移植到DM368板子上的过程 以及segment fault problem

    问题描述 我在PC机上安装了gdbserver,但是移植到板子上后却出现了问题.运行不了,显示错误:"segment fault". 决定重新在另一台虚拟机上gdbserver. ...

  6. 从PC端(Ubuntu)挂载nfs网络文件系统ARM9+Linux板子上

    挂载概念 在windows操作系统中,挂载通常是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符. 在linux操作系统中,它指将一个设备(通常是存储设备)挂接到一个已存在的目录上.(这个目录可以 ...

  7. 关于电脑识别不出自己画的板子上的USB接口问题

    现在在画一个Cortex-A5的底板,现在已经完成,正在测试各个模块,发现USB插上后,电脑提示报错,如下: 网上查了很多,有的说是配置问题,有的说是走线问题,首先配置肯定没问题,因为同一台电脑,在买 ...

  8. 在centos服务器上启用ipv6地址

    随着互联网世界日新月异的发展,ipv6好像已经成为一种必不可少的趋势,但是当前国内机房大部分还不能支持ipv6,腾讯云亦如此.同时,现在有部分程序在服务器上运行的时候,需要服务器能监听一个ipv6地址 ...

  9. 华为eNSP上的NAT地址转换配置

    NAT是将IP数据报文报头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能. 1.实验拓扑 地址表: 1.完成各个接口基本配置之后使用pi ...

随机推荐

  1. PHPStorm/webstorm tips

    phpstorm对于使用PHP开发web的人员来说,是一个非常不错的编辑开发IDE,以前用过sublime,但是相比于storm,sublime在浏览legacy代码,类代码编辑方面明显要逊色不少.同 ...

  2. 如何扩展VCL的hint

    默认的Hint窗口展现如下: 这种情况下可以操作有窗口的背景颜色,字体样式 Application.Color 有的时候仅仅是文字满足不了我们的需求,比例如下格式: 这个时候就应该执行以下步骤: 1. ...

  3. android SDK 更新

    在SDK Manager下Tools->Options打开了SDK Manager的Settings,选中“Force https://… sources to be fetched using ...

  4. Kafka Topic动态迁移 (源代码解析)

    总结下自己在尝试Kafka分区迁移过程中对这部分知识的理解,请路过高手指正. 关于Kafka数据迁移的具体步骤指导,请参考如下链接:http://www.cnblogs.com/dycg/p/3922 ...

  5. UVA 11865 Stream My Contest 组网 (朱刘算法,有向生成树,树形图)

    题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可 ...

  6. HDU 1023 Train Problem II (卡特兰数,经典)

    题意: 给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路: 卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. #inclu ...

  7. modeler与activiti进行整合

    整合Activiti Modeler到业务系统(或BPM平台) http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler ...

  8. 用于分类的决策树(Decision Tree)-ID3 C4.5

    决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...

  9. delete archivelog all 无法彻底删除归档日志?

    最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢? 1.演示环境 SQL> select * from v$version whe ...

  10. 【转】IOS --- OC与Swift混编

    群里大神发的网址,感觉有用就先收录了,暂时没时间看SWIFT,感觉代码简洁,但是可阅读性不是太高,有些代码让系统去判断类型,同样的,我们看代码的时候也得自己去判断类型,或许看多就习惯了,有时间再说吧, ...