转自: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. css中图片的四种地址引用

    URL: CSS中四种引用图片asset的方式:

  2. python-unexpected content storage modification出错

    提示以上错误,然后在pycharm中的文件内容和实际内容不一致 去我的文档-.PyCharm-system_cache,全部删除

  3. 【笨嘴拙舌WINDOWS】计时器精度

    WINDOWS的大多数系统并非实时操作系统,所以不能规定计算机在某个精确到纳秒的时间让计算机做某项任务,如果规定了时间WINDOWS也将需要在完成了线程调度后,经行任务执行! 也就是说,如果你的应用程 ...

  4. Excel文件操作方式比较

    C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑. 由于前两天要做导表工具,比较了常用的方法,总结一下写个短文, 1.OLE的方式 这个大约是最常用的方 ...

  5. memcached缓存雪崩现象及解决办法

    1)什么是缓存雪崩?场景:一个访问很大的文章(论坛之类)的网站,使用memcached缓存用户查询过的文章.设置的缓存过期时间为6小时,所以没过6小时,缓存就会失效并重建一遍 问题:过六小时时,一部分 ...

  6. Linux diff patch

    /***************************************************************************** * Linux diff patch * ...

  7. linux中备份mysql数据库的一个shell脚本

    #!/bin/bash #FileName:select_into_bak.sh #Desc:Use select into outfile to backup db or tables #Creat ...

  8. Linux VPS 基本命令

    我们Linux VPS用命令才能管理他,我们来罗列一些基本和简单的Linux的命令 1.lsls / 查看根目录ls -a / 查看根目录下所要文件,包括隐藏文件ls -l / 详细列出目录下文件的权 ...

  9. 【转】gcc中-pthread和-lpthread的区别

    原文网址:http://chaoslawful.iteye.com/blog/568602 用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及 ...

  10. 线程----BlockingQueue (转)

    t java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.ut ...