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

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

ID:44164169

大小:926.11 KB

页数:49页

时间:2019-10-19

4 使用C语言操作DSP的寄存器_第1页
4 使用C语言操作DSP的寄存器_第2页
4 使用C语言操作DSP的寄存器_第3页
4 使用C语言操作DSP的寄存器_第4页
4 使用C语言操作DSP的寄存器_第5页
资源描述:

《4 使用C语言操作DSP的寄存器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四章使用C语言操作DSP的寄存器4.1寄存器的C语言访问4.2寄存器文件的空间分配程序设计语言从机器语言开始,程序设计语言经历了一个发展过程,如:机器语言、汇编语言、高级语言(C、C+++等)。机器语言是由二进制代码“0”和“1”组成的,能够被硬件(计算机、单片机、DSP等)直接识别和执行的语言。最终烧写到硬件的就是机器语言。用机器语言编写程序难学、难记、难懂、难用,很少使用。汇编语言是一种符号化语言,它使用助记符代替二进制指令。汇编语言比机器语言易学易懂,它的优点是效率高、占用空间少、实时性高,但由于依赖具体硬件,因此可移植性差,编写大程序时调试复杂

2、。C语言是一门高级语言,易学易用。它支持自上而下的结构化程序设计,可大大缩短应用程序的开发周期,使软件的可读性增加,编写效率明显提高,可移植性好。因此C语言已成为目前最流行的单片机、DSP开发语言。F2812的开发既支持汇编语言,也支持C语言,但比较多的时候还是C语言,只有在对时间要求非常严格的地方才会插入汇编语言。开发时,需要频繁地对DSP寄存器进行配置,本章以F2812的外设SCI为例,详细分析如何使用C语言中结构体和位定义的方法来实现对DSP寄存器的操作。参考资料:ProgrammingTMS320x28xxand28xxxPeripheral

3、sinC/C++.pdfTMS320F28xSerialCommunicationsInterface(SCI)ReferenceGuide.pdf4.1寄存器的C语言访问传统方法:#defineCPUTIMER0(volatileunsignedlong*)0x0C00缺点:不便于对寄存器的值进行位操作;无法单独查看寄存器的某一位。F2812提供了位定义和寄存器结构体的方式,能够很方便地实现对DSP内部寄存器的访问和控制。第一步:采用结构体、共用体、位域结构体定义寄存器变量。第二步:通过pragma伪指令将寄存器变量分配到数据段。第三步:通

4、过MEMORY伪指令指示寄存器的实际硬件空间。第四步:通过SECTIONS伪指令将寄存器数据段分配到实际硬件空间。4.1.1了解SCI的寄存器F2812的SCI模块具有相同的串行通信接口SCIA和SCIB,也就是说F2812支持两个串口,它们具有相同的寄存器文件。这些寄存器就是定义了具体功能的存储单元,系统会根据这些存储单元中具体的配置来进行工作。传统方法定义SCI寄存器传统方法访问SCI寄存器4.1.2使用位定义的方法定义寄存器位域是C语言中的一种数据结构。“位域”就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域都有一个域

5、名,允许在程序中按域名进行操作。位域的定义和位域变量的说明同结构体定义和其成员说明类似,语法格式为:Struct位域结构名{类型说明符位域名1:位域长度类型说明符位域名2:位域长度...类型说明符位域名n:位域长度};类型说明符就是基本的数据类型,可以是int、char型等。位域名可以任意取,能够反映其位域的功能就好。位域长度是指这个位域是由多少个位组成的。和结构体定义一样,大括号最后的“;”不可缺少。位域也是C语言中的一种数据结构,因此需要遵循先声明后使用的原则。上例中,声明了bs1,说明bs1是bs型的变量,共占2字节,其中位域a占8位,位域b占

6、2位,位域c占6位。关于位域定义的说明:1、位域的定义必须按从右往左的顺序,即从最低位开始定义。2、一个位域必须存储在同一个字节中,不能跨两个字节。如果一个字节所剩空间不够放一个域时,应该从下一个单元起存放该域。3、位域的长度不能大于一个字节的长度,也就是一个位域不能超过8位。4、位域可以无位域名,这时,它只用作填充或调整位置。无名的位域不能使用,如下:以SCIA的通信控制器SCICCR为例来说明如何用位域的方法来定义寄存器。SCIA模块所有的寄存器都是8位的,当一个寄存器被访问时,寄存器数据位于低8位,高8位为0。在寄存器中,被保留的空间也要在位域中定义,只

7、是定义的变量不会被调用。一般位域中的元素是按地址的顺序来定义的,所以中间如果有空间保留,那么需要一个变量来代替。虽然变量并不会被调用,但是必须要添加,以防后续寄存器位的地址混乱。例中声明了一个SCICCR_BITS的变量bit,由此就可以通过bit来实现对寄存器位的访问了。其中对位域SCICHAR进行了赋值,配置SCI字符控制长度为8位(SCICHAR的值为7,对应于字符长度为8位)。4.1.3声明共同体共同体是将不同类型的数据都存放在同一起始地址的内存单元中,共用一段内存以节省内存单元。定义:Union共同体名{数据类型成员1:长度1;…数据类型成员n:

8、长度n;}变量名表列;引用:共同体变

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。