4使用C语言操作DSP的寄存器资料

上传人:f****u 文档编号:128313225 上传时间:2020-04-20 格式:PDF 页数:49 大小:926.11KB
返回 下载 相关 举报
4使用C语言操作DSP的寄存器资料_第1页
第1页 / 共49页
4使用C语言操作DSP的寄存器资料_第2页
第2页 / 共49页
4使用C语言操作DSP的寄存器资料_第3页
第3页 / 共49页
4使用C语言操作DSP的寄存器资料_第4页
第4页 / 共49页
4使用C语言操作DSP的寄存器资料_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《4使用C语言操作DSP的寄存器资料》由会员分享,可在线阅读,更多相关《4使用C语言操作DSP的寄存器资料(49页珍藏版)》请在金锄头文库上搜索。

1、第四章使用C语言操作DSP 的寄存器 4 1 寄存器的寄存器的C语言访问语言访问 4 2 寄存器文件的空间分配寄存器文件的空间分配 程序设计语言 从机器语言开始 程序设计语言经历了一个发展过程 从机器语言开始 程序设计语言经历了一个发展过程 如 机器语言 汇编语言 高级语言 如 机器语言 汇编语言 高级语言 C C 等 等 机器语言机器语言是由二进制代码 是由二进制代码 0 和 和 1 组成的 能够被硬组成的 能够被硬 件 计算机 单片机 件 计算机 单片机 DSP等 直接识别和执行的语言 等 直接识别和执行的语言 最终烧写到硬件的就是机器语言 用机器语言编写程序最终烧写到硬件的就是机器语言

2、用机器语言编写程序 难学 难记 难懂 难用 很少使用 难学 难记 难懂 难用 很少使用 汇编语言汇编语言是一种符号化语言 它使用助记符代替二进制是一种符号化语言 它使用助记符代替二进制 指令 汇指令 汇 编语言比机器语言易学易懂 它的优点是效率编语言比机器语言易学易懂 它的优点是效率 高 占用空间少 高 占用空间少 实时性高 但由于依赖具体硬件 因实时性高 但由于依赖具体硬件 因 此可移植性差 编写大程序时调试复杂 此可移植性差 编写大程序时调试复杂 C语言语言是一门高级语言 易学易用 它支持自上而下的是一门高级语言 易学易用 它支持自上而下的 结构化程序设计 可大大缩短应用程序的开发周期 使

3、结构化程序设计 可大大缩短应用程序的开发周期 使 软件的可读性增加 编写效率明显提高 可移植性好 软件的可读性增加 编写效率明显提高 可移植性好 因此因此C语言已成为目前最流行的单片机 语言已成为目前最流行的单片机 DSP开发语言 开发语言 F2812的开发既支持汇编语言 也支持的开发既支持汇编语言 也支持C语言 但比较语言 但比较 多的时候还是多的时候还是C语言 只有在对时间要求非常严格的地语言 只有在对时间要求非常严格的地 方才会插入汇编语言 方才会插入汇编语言 开发时 需要频繁地对开发时 需要频繁地对DSP寄存器进行配置 寄存器进行配置 本章以本章以 F2812的外设的外设SCI为例为例

4、 详细分析如何使用 详细分析如何使用C语言中语言中结构结构 体和位定义体和位定义的方法来实现的方法来实现对对DSP寄存器的操作寄存器的操作 参考资料 参考资料 Programming TMS320 x28xx and 28xxx Peripherals in C C pdf TMS320F28x Serial Communications Interface SCI Reference Guide pdf 4 1 4 1 寄存器的C语言访问 传统方法 传统方法 define CPUTIMER0 volatile unsigned long 0 x0C00 缺点 缺点 不便于对寄存器的值进行位操

5、作 不便于对寄存器的值进行位操作 无法单独查看寄存器的某一位 无法单独查看寄存器的某一位 F2812F2812提供了位定义和寄存器结构体的方式 能够很方提供了位定义和寄存器结构体的方式 能够很方 便地实现对便地实现对DSPDSP内部寄存器的访问和控制 内部寄存器的访问和控制 第一步 采用结构体 共用体 位域结构体定义寄存第一步 采用结构体 共用体 位域结构体定义寄存 器变量 器变量 第二步 通过第二步 通过pragma伪指令将寄存器变量分配到数伪指令将寄存器变量分配到数 据段 据段 第三步 通过第三步 通过MEMORY伪指令指示寄存器的实际硬伪指令指示寄存器的实际硬 件空间 件空间 第四步 通

6、过第四步 通过SECTIONS伪指令将寄存器数据段分配伪指令将寄存器数据段分配 到实际硬件空间 到实际硬件空间 4 1 1 4 1 1 了解了解SCI的寄存器的寄存器 F2812F2812的的SCISCI模块具有相同的串行通信接口模块具有相同的串行通信接口SCIASCIA和和 SCIBSCIB 也就是说 也就是说F2812F2812支持两个串口 它们具有相同的寄支持两个串口 它们具有相同的寄 存器文件 存器文件 这些这些寄存器寄存器就是定义了具体功能的就是定义了具体功能的存储单元存储单元 系统 系统 会根据这些存储单元中具体的配置来进行工作 会根据这些存储单元中具体的配置来进行工作 传统方法定

7、义SCI寄存器 传统方法访问SCI寄存器 4 1 2 4 1 2 使用位定义的方法定义寄存器 位域位域 是是C C语言中的一种数据结构 语言中的一种数据结构 位域位域 就是把一个字节中的二进制位划分为几个不就是把一个字节中的二进制位划分为几个不 同的区域 并说明每个区域的位数 同的区域 并说明每个区域的位数 每个域都有一个域名 允许在程序中按域名进行操作 每个域都有一个域名 允许在程序中按域名进行操作 位域的定义和位域变量的说明位域的定义和位域变量的说明同结构体同结构体定义和其成员说定义和其成员说 明类似 明类似 语法格式语法格式为 为 Struct位域结构名位域结构名 类型说明符类型说明符位

8、域名位域名1 位域长度 位域长度 类型说明符类型说明符位域名位域名2 位域长度 位域长度 类型说明符类型说明符位域名位域名n 位域长度 位域长度 类型说明符就是基本的数据类型 可以是类型说明符就是基本的数据类型 可以是int char型等 型等 位域名可以任意取 能够反映其位域的功能就好 位域名可以任意取 能够反映其位域的功能就好 位域长度是指这个位域是由多少个位组成的 位域长度是指这个位域是由多少个位组成的 和结构体定义一样 大括号最后的 不可缺少 和结构体定义一样 大括号最后的 不可缺少 位域也是位域也是C语言中的一种数据结构 因此需要语言中的一种数据结构 因此需要遵循先遵循先 声明后使用

9、声明后使用的原则 的原则 上例中 声明了上例中 声明了bs1 说明 说明bs1是是bs型的变量 共占型的变量 共占2字字 节 其中位域节 其中位域a占占8位 位域位 位域b占占2位 位域位 位域c占占6位 位 关于位域定义的说明关于位域定义的说明 1 1 位域的定义必须按 位域的定义必须按从右往左的顺序从右往左的顺序 即 即从最低位开始从最低位开始 定义定义 2 2 一个位域必须存储在同一个字节中 不能跨两个字节一个位域必须存储在同一个字节中 不能跨两个字节 如果一个字节所剩空间不够放一个域时 应该从下一个如果一个字节所剩空间不够放一个域时 应该从下一个 单元起存放该域 单元起存放该域 3 3

10、 位域的长度不能大于一个字节的长度 也就是 位域的长度不能大于一个字节的长度 也就是一个位一个位 域不能超过域不能超过 8 8 位位 4 4 位域 位域可以无位域名可以无位域名 这时 它 这时 它只用作填充或调整位置只用作填充或调整位置 无名的位域不能使用 如下 无名的位域不能使用 如下 以以SCIA的通信控制器的通信控制器SCICCR为例来说明如何用位域为例来说明如何用位域 的方法来定义寄存器 的方法来定义寄存器 SCIA模块所有的寄存器都是模块所有的寄存器都是8位的 当一个寄存器被访问位的 当一个寄存器被访问 时 寄存器数据位于低时 寄存器数据位于低8位 高位 高8位为位为0 在寄存器中

11、被保留的空间也要在位域中定义 只是在寄存器中 被保留的空间也要在位域中定义 只是 定义的变量不会被调用 定义的变量不会被调用 一般位域中的元素是按地址的顺序来定义的 所以中一般位域中的元素是按地址的顺序来定义的 所以中 间如果有空间保留 那么需要一个变量来代替 虽然变量间如果有空间保留 那么需要一个变量来代替 虽然变量 并不会被调用 但是必须要添加 以防后续寄存器位的地并不会被调用 但是必须要添加 以防后续寄存器位的地 址混乱 址混乱 例中声明了一个例中声明了一个SCICCR BITS的变量的变量bit 由此就可以通 由此就可以通 过过bit来实现对寄存器位的访问了 其中对位域来实现对寄存器位

12、的访问了 其中对位域SCICHAR进进 行了赋值 配置行了赋值 配置SCI字符控制长度为字符控制长度为8位 位 SCICHAR的值为的值为 7 对应于字符长度为 对应于字符长度为8位 位 4 1 3 4 1 3 声明共同体 共同体共同体是将是将不同类型的数据不同类型的数据都都存放在同一起始地址存放在同一起始地址 的内存单元中的内存单元中 共用一段内存共用一段内存以节省内存单元 以节省内存单元 定义定义 Union 共同体名共同体名 数据类型数据类型成员成员1 长度 长度 1 数据类型数据类型成员成员n 长度 长度 n 变量名表列 变量名表列 引用 共同体变量名引用 共同体变量名 成员名成员名

13、使用位定义的方法定义寄存器可以方便地实现对寄存使用位定义的方法定义寄存器可以方便地实现对寄存 器功能位进行操作 但如果需要对整个寄存器进行操作 器功能位进行操作 但如果需要对整个寄存器进行操作 那么位操作就显的有些麻烦了 那么位操作就显的有些麻烦了 所以很有必要引入能够所以很有必要引入能够对寄存器整体进行操作对寄存器整体进行操作的方式 的方式 这可以用这可以用共同体共同体来实现 来实现 先定义了一个共同体先定义了一个共同体 SCICCR REG 然后声明了一个 然后声明了一个 SCICCR REG变量变量 SCICCR 接下来变量 接下来变量 SCICCR就可以对就可以对 寄存器实现整体操作或

14、者进行位操作 很方便 寄存器实现整体操作或者进行位操作 很方便 例中先通过整体操作对寄存器的各个位进行了配置 例中先通过整体操作对寄存器的各个位进行了配置 SCICCR位被赋值为位被赋值为7 也就是说 也就是说SCI数据位长度为数据位长度为8 接着 接着 变量变量 SCICCR通过位操作的方式 将通过位操作的方式 将 SCICHAR的值改为的值改为5 即即SCI数据的长度最终被设置为数据的长度最终被设置为6 DSP2812DSP2812的的SCISCI模块除了寄存器模块除了寄存器SCICCRSCICCR之外 还有许多之外 还有许多 的寄存器 为了便于管理 需要的寄存器 为了便于管理 需要创建一

15、个结构体 用来包创建一个结构体 用来包 含含SCISCI模块的所有的寄存器模块的所有的寄存器 4 1 4 4 1 4 创建结构体文件创建结构体文件 SCI寄存器结构体寄存器结构体SCI REGS中 有的成员是中 有的成员是union形式 形式 有的是有的是Uint16形式 形式 定义为定义为union形式的成员既可以实现对寄存器的整体操作 形式的成员既可以实现对寄存器的整体操作 也可以实现对寄存器进行位操作 而定义为也可以实现对寄存器进行位操作 而定义为Uint16的成员只的成员只 能直接对寄存器进行操作 能直接对寄存器进行操作 对于对于SCIA或或SCIB 其寄存器存储空间中 有 其寄存器存

16、储空间中 有3个存储单个存储单 元是被保留的 在对元是被保留的 在对SCI的寄存器进行结构体定义时 也要的寄存器进行结构体定义时 也要 将其保留 保留的寄存器空间采用变量来代替 但该变量不将其保留 保留的寄存器空间采用变量来代替 但该变量不 会被调用 会被调用 定义了定义了结构体结构体SCI REGS之后 需要声明之后 需要声明SCI REGS型型 的的变量变量SciaRegs和和ScibRegs 分别用于代表 分别用于代表SCIA的寄存器的寄存器 和和SCIB的寄存器 的寄存器 关键字关键字extern的意思是 外部的 表明这个变量在外的意思是 外部的 表明这个变量在外 部文件中被调用 是一个全局变量 部文件中被调用 是一个全局变量 关键字关键字volatile的意思是 易变的 使得寄存器的值能的意思是 易变的 使得寄存器的值能 够被外部代码任意改变 如可以被外部硬件或者中断任意够被外部代码任意改变 如可以被外部硬件或者中断任意 改变 如果不使用关键字改变 如果不使用关键字volatile 则寄存器的值只能被程 则寄存器的值只能被程 序代码所改变 序代码所改变 定义了结构体定义了结构

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号