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

上传人:豆浆 文档编号:24456206 上传时间:2017-12-05 格式:PPT 页数:38 大小:2.33MB
返回 下载 相关 举报
使用C语言操作DSP的寄存器_第1页
第1页 / 共38页
使用C语言操作DSP的寄存器_第2页
第2页 / 共38页
使用C语言操作DSP的寄存器_第3页
第3页 / 共38页
使用C语言操作DSP的寄存器_第4页
第4页 / 共38页
使用C语言操作DSP的寄存器_第5页
第5页 / 共38页
点击查看更多>>
资源描述

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

1、第6章 使用C语言操作DSP的寄存器,北京航空航天大学出版社 作者:顾卫钢,北京航空航天大学出版社 作者:顾卫钢,电信学院:张 蕾,DSP原理及应用,6.1 寄存器的C语言访问,特殊的存储单元,具有特殊的功能、具体的含义DSP通过对寄存器的操作能够实现对系统和外设功能的配置与控制。在DSP的开发过程中,对于寄存器的操作是极为重要的,也是很频繁的。对寄存器的操作是否方便会直接影响到DSP的开发是否方便。F2812为大家提供了位定义和寄存器结构体的方式,能够很方便的实现对DSP内部寄存器的访问和控制。,6.1.1 了解SCI的寄存器,6.1.1 了解SCI的寄存器,寄存器地址缺少0x0000 70

2、58、0x0000 705D、0x0000 705E,6.1.1 了解SCI的寄存器,寄存器地址缺少0x0000 7758、0x0000 775D、0x0000 775E,这些寄存器位于F2812存储器空间的外设帧2内,是在物理上实际存在的存储器单元。外设帧:Peripheral Frames 0、1、2三个外设帧映射空间及其包含的相关寄存器如下:,6.1.2 使用位定义的方法定义寄存器,所谓“位域”(也称位段)就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域都有一个域名,允许在程序中按域名进行操作。位域的定义和位域变量的说明同结构体定义和其成员说明类似,其语法格式

3、为:Struct 位域结构名 类型说明符 位域名1:位域长度 类型说明符 位域名2:位域长度 类型说明符 位域名n:位域长度;,例6-1 位域定义,struct bs /定义位域bs int a:8; int b:2; int c:6;struct bs bs1; /定义bs型变量bs1,位域也是C语言的一种数据结构,需要遵循先声明后使用的原则。例如声明完了“struct bs bs1; ”才能用bs型变量bs1位域的定义必须从右往左的顺序,也就是从最低位开始定义一个位域必须存储在同一个字节中,不能跨两个字节。即,如果一个字节所剩空间不够放另一个域时,应该从下一个单元起存放该域。,struct

4、 bs /定义位域bs int a:4; int :0; /空域 int b:5; /从第二个字节开始存放 int c:3;,位域的长度不能大于一个字节的长度,即,一个位域不能超过8位。位域可以无位域名,此时,只用作填充或调整位置,无名位域不能使用,struct bs /定义位域bs int a:4; int :2; /这两位不能使用 int b:2; int c:5; int d:3;,以SCIA的通信控制寄存器SCICCR为例来说明C语言用位域方法来定义寄存器,STOP BITS,R/W-0,R/W-0,R/W-0,R/W-0,R/W-0,R/W-0,R/W-0,R/W-0,EVEN/OD

5、D PARITY,PARITYENABLE,LOOPBACKENA,ADDR/IDLEMODE,SCI CHAR2,SCI CHAR1,SCI CHAR0,D7,D0,SCIA的所有寄存器都是8位的,当一个寄存器被访问时,寄存器数据位于低8位,高8位为0。D0D2 字符长度控制位:3位D3 SCI多处理模式控制位:1位D4 回送测试模式使能位:1位D5 SCI奇偶校验使能位:1位D6 奇偶校验位选择: 1位D7 SCI结束位的个数: 1位D8D15 保留位:8位,例6-2 用位域定义SCICCR,struct SCICCR_BITS Uint16 SCICHAR:3; / D2D0 字符长度控

6、制位 Uint16 ADDRIDLE_MODE:1; / D3 多处理器模式控制位 Uint16 LOOPBKENA:1; / D4 回送测试模式使能位 Uint16 PARITYENA:1; / D5 极性使能位 Uint16 PARITY:1; / D6 奇/偶极性选择位 Uint16 STOPBITS:1; /D 7 停止位个数 Uint16 rsvd1:8; / D15D8 保留;必须定义,但不会被调用;struct SCICCR_BITS bit; / 声明SCICCR_BITS 型变量bitbit.SCICHAR=7; /SCI字符长度控制位为8位,与传统#define 方法比较:

7、,C代码访问寄存器的传统方法是使用#define宏为每一个寄存器分配一个地址。例如:,同样的#define 方法将在每个外设寄存器上不断重复。甚至对于诸如SCI-A 和SCI-B这样完全相同的外设,每个寄存器都必须被一一分配地址。,传统#define 方法有以下显著弊端:(1)不容易访问寄存器中的位域部分;(2)不容易在CCS 观察窗内显示位域的值;(3)不能利用CCS 的自动完成功能;(4)对于重复的外设,头文件开发者不能获得重复使用的便利。,注意以下几点:(1)寄存器名出现的顺序必须与它们在内存中被安排的顺序相同;(2)在结构体中,通过使用保留变量(rsvd1,rsvd2 等)来预留内存中

8、的保留位置。这种保留结构仅仅用以预留内存中的空间;(3)Uint16 和Uint32 分别是无符号16 位或者32 位数的类型定义,在DSP281x 中,则用来定义无符号整型和无符号长整型。这样使用起来就方便一些。相应的类型定义声明由DSP281x_Device.h 文件建立。2)声明可访问寄存器的变量寄存器结构体类型可被用于声明一个可访问寄存器的变量,对器件的每个外设都采用这一相同的做法,同一种外设的复用外设可以采用同样的结构体类型定义。例如,如果一个器件上有3 个CPU-Timers,可以创建如下所示的3 个具有“struct CPUTIMER_REGS”结构体类型的变量。,例6-3 SC

9、ICCR的共同体定义,结构体变量不能作为一个整体进行输入、输出。如果需要对整个寄存器进行操作,位域操作就过于复杂,这时考虑到共同体,可以进行整体操作和位操作二选一的方式。共同体(公用体):把几种不同类型的变量放在同一段内存单元中。变量在内存中所占字节数不同,但都从同一地址开始存放。也就是采用覆盖技术,几个变量相互覆盖。共同体类型变量定义形式:union 共同体名成员表列;,例6-3 SCICCR的共同体定义,union SCICCR_REG Uint16 all; /可实现对寄存器整体操作 struct SCICCR_BITS bit; /可实现位操作;union SCICCR_REG SCI

10、CCR; /声明 一个共同体SCICCRSCICCR.all=0x007F;SCICCR.bit.SCICHAR=5;,struct SCI_REGS union SCICCR_REG SCICCR; /通信控制寄存器 union SCICTL1_REG SCICTL1; / 控制寄存器1 Uint16 SCIHBAUD; / 波特率寄存器(高字节) Uint16 SCILBAUD; / 波特率寄存器(低字节) union SCICTL2_REG SCICTL2; / 控制寄存器2 union SCIRXST_REG SCIRXST; / 接收状态寄存器 Uint16 SCIRXEMU; /

11、接收仿真缓冲寄存器 union SCIRXBUF_REG SCIRXBUF; / 接收数据寄存器 Uint16 rsvd1; / 保留 Uint16 SCITXBUF; / 发送数据缓冲寄存器 union SCIFFTX_REG SCIFFTX; / FIFO 发送寄存器 union SCIFFRX_REG SCIFFRX; / FIFO 接收寄存器 union SCIFFCT_REG SCIFFCT; / FIFO 控制寄存器 Uint16 rsvd2; / 保留 Uint16 rsvd3; / 保留 union SCIPRI_REG SCIPRI; / FIFO 优先级控制寄存器 ;ext

12、ern volatile struct SCI_REGS SciaRegs;extern volatile struct SCI_REGS ScibRegs;,例6-4 创建SCI寄存器的结构体文件,/*文件名:DSP28_Sci.h*功 能:2812 SCI模块寄存器的定义*/#ifndef DSP28_SCI_H#define DSP28_SCI_H struct SCICCR_BITS / bit description Uint16 SCICHAR:3; / 2:0 Character length control Uint16 ADDRIDLE_MODE:1; / 3 ADDR/ID

13、LE Mode control Uint16 LOOPBKENA:1; / 4 Loop Back enable Uint16 PARITYENA:1; / 5 Parity enable Uint16 PARITY:1; / 6 Even or Odd Parity Uint16 STOPBITS:1; / 7 Number of Stop Bits Uint16 rsvd1:8; / 15:8 reserved; union SCICCR_REG Uint16 all; struct SCICCR_BITS bit;,位域方式定义SCICCR寄存器,定义共同体SCICCR寄存器,struc

14、t SCICTL1_BITS / bit description Uint16 RXENA:1; / 0 SCI receiver enable Uint16 TXENA:1; / 1 SCI transmitter enable Uint16 SLEEP:1; / 2 SCI sleep Uint16 TXWAKE:1; / 3 Transmitter wakeup method Uint16 rsvd:1; / 4 reserved Uint16 SWRESET:1; / 5 Software reset Uint16 RXERRINTENA:1; / 6 Recieve interrupt enable Uint16 rsvd1:9; / 15:7 reserved; union SCICTL1_REG Uint16 all; struct SCICTL1_BITS bit;,

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

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

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