转自: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. shell动态解析sql的binlog

    #!/usr/bin #设置数据库连接 conn='mysql -hhost -Pport -uusername -ppassword' #获取最新的binlog文件 logfile=$($conn ...

  2. IOS设计模式之二(门面模式,装饰器模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

  3. php 文件file常用的操作

    多是代码形式呈现,更多的信息可以查看php api文档,搜索Filesystem; //创建文件夹 $path_find = AppRoot . '/Temp/excel_curl'; //查找的路径 ...

  4. Java调优之jvm和线程的内存分析

    本文来源于铁木箱子的博客http://www.mzone.cc 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立 ...

  5. windows xp 安装mysql5.6.17-ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password

    .zip解压后没有setup 没有my.ini 1.安装方法 bin目录下执行以下: E:\mysql-5.6.17-win32\bin>mysqld install MySQL --defau ...

  6. 【转】JavaSript模块规范 - AMD规范与CMD规范介绍

    JavaSript模块化   在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?       模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...

  7. 微信支付-JSAPI支付V3-查询退款

    接口地址 接口链接:https://api.mch.weixin.qq.com/pay/refundquery 是否需要证书 不需要. 请求参数 字段名 变量名 必填 类型 示例值 描述 公众账号ID ...

  8. 【ASP.NET Web API教程】1.1 第一个ASP.NET Web API

    Your First ASP.NET Web API (C#)第一个ASP.NET Web API(C#) By Mike Wasson|January 21, 2012作者:Mike Wasson ...

  9. IOS 单例 创建方式

    @implementation Me static Car *sharedInstance= nil;//声明一个静态对象引用并赋为nil +(Me *) sharedInstance//声明类方法( ...

  10. Linux makefile教程之隐含规则九[转]

    隐含规则 ———— 在 我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o] 文件,Windows下是[.o ...