转自: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. SQLite及ORMlite在WebApp中的使用

    Spring 配置 下面的databaseUrl在windows下,指向了c:/user/yourhome路径,暂时没想到怎么配置到WEBAPP根路径下. 因为是轻量级工控webapp,数据库规模不大 ...

  2. POJ 1436 (线段树 区间染色) Horizontally Visible Segments

    这道题做了快两天了.首先就是按照这些竖直线段的横坐标进行从左到右排序. 将线段的端点投影到y轴上,线段树所维护的信息就是y轴区间内被哪条线段所覆盖. 对于一条线段来说,先查询和它能相连的所有线段,并加 ...

  3. UVa 10020 (最小区间覆盖) Minimal coverage

    题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...

  4. codeforces 510 C Fox And Names【拓扑排序】

    题意:给出n串名字,表示字典序从小到大,求符合这样的字符串排列的字典序 先挨个地遍历字符串,遇到不相同的时候,加边,记录相应的入度 然后就是bfs的过程,如果某一点没有被访问过,且入度为0,则把它加入 ...

  5. 通知(NSNotification)

    通知 一个完整的通知一般包含3个属性: - (NSString *)name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary *)u ...

  6. $^,$@,$?,$<,$(@D),$(@F) of makefile

    makefile下$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)代表的不同含义 $(filter-out $(PHONY) $(wildcard $^),$^)常用 ...

  7. mysql 优化analyze table

    Analyze Table MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应 ...

  8. Struts2配置之Struts.properties

    Struts 2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等.除此之 外,Struts 2框架还包含     s ...

  9. 两天三场Java实习生面试总结

    Java 关键字(如abstract)[详解] String[相关面试题] String.StringBuffer.StringBuilder区别 String中有没有使一个字符串反转的方法 线程的实 ...

  10. selenium python (十一)alert/confirm/prompt的处理(js中的弹出框)

    webdriver中处理js所生成的alert.confirm以及prompt,采用switch_to_alert()方法定位到alert/confirm/prompt.然后使用text/accept ...