转自: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. 【笨嘴拙舌WINDOWS】剪切板

    Windows剪贴板是一种比较简单同时也是开销比较小的IPC(InterProcess Communication,进程间通讯)机制.Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局 ...

  2. UVa 455 Periodic Strings

    题意:给出一个字符串,找出它的最小的周期,枚举从1到len的周期,看是否满足. #include<iostream> #include<cstdio> #include< ...

  3. iPad中控制器view初始的width和height

    1> 规律 * width 是宽高中最小的那个值 * height 是宽高中最大的那个值 2> 举例(比如窗口根控制器的view,有状态栏的情况下) * 横屏  width = 748,h ...

  4. 用canvas实现图片滤镜效果详解之灰度效果

    前面展示了一些canvas实现图片滤镜效果的展示,并且给出了相应的算法,下面来介绍一下具体的实现方法. 前面介绍的特效中灰度效果最简单,就从这里开始介绍吧. 1.获取图像数据 img.src = ’h ...

  5. Spark RDD操作(1)

    https://www.zybuluo.com/jewes/note/35032 RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RD ...

  6. NHibernate实例化类部分属性

    NHibernate 为习惯SQL的开发者提供了接口,将查询的结果转变为持久化对象.虽然该方法不是很提倡. GetCurrentSession().CreateSQLQuery(sql) 参数sql就 ...

  7. iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon

    在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView   在以前,一个UIViewController的View可能有很多小的子view.这些子view很多时候 ...

  8. POJ 1306 Combinations

    // 求 C[n][m] // 组合公式 C[i][j]=C[i-1][j-1]+C[i-1][j]; #include <iostream> #include <string> ...

  9. Java核心技术II读书笔记(一)

    Char2 XML 解析器:读入一个文件,确认其具有正确的格式,然后将其分解成各种元素,使程序员能够访问这些元素. java库提供了两种XML解析器:DOM和SAX,即文档对象模型和流机制解析器. D ...

  10. Java条件语句之 switch

    当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试的名次,给予前 4 名不同的奖品.第一名,奖励笔记本一台:第二名,奖励 IPAD 2 一个:第三名,奖励移动电源一个:最 ...