使用C语言操作DSP的寄存器.ppt
《使用C语言操作DSP的寄存器.ppt》由会员分享,可在线阅读,更多相关《使用C语言操作DSP的寄存器.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6 6章章 使用使用C C语言操作语言操作DSPDSP的寄存器的寄存器北京航空航天大学出版社 作者:顾卫钢北京航空航天大学出版社 作者:顾卫钢 电信学院:张电信学院:张 蕾蕾DSP原理及应用6.1 寄存器的C语言访问特殊的存储单元,具有特殊的功能、具体的含义特殊的存储单元,具有特殊的功能、具体的含义DSP通过对寄存器的操作能够实现对系统和外设功能的配通过对寄存器的操作能够实现对系统和外设功能的配置与控制。置与控制。在在DSP的开发过程中,对于寄存器的操作是极为重要的,的开发过程中,对于寄存器的操作是极为重要的,也是很频繁的。也是很频繁的。对寄存器的操作是否方便会直接影响到对寄存器的操作是否
2、方便会直接影响到DSP的开发是否方的开发是否方便。便。F2812为大家提供了为大家提供了位定义位定义和和寄存器结构体寄存器结构体的方式,能的方式,能够很方便的实现对够很方便的实现对DSP内部寄存器的访问和控制。内部寄存器的访问和控制。6.1.1 了解SCI的寄存器6.1.1 了解SCI的寄存器寄存器名寄存器名地址地址占用空占用空间功能描述功能描述SCICCR0 x0000 705016位位SCI-A通信控制寄存器通信控制寄存器SCICTL10 x0000 705116位位SCI-A控制寄存器控制寄存器1SCIHBAUD0 x0000 705216位位SCI-A波特率波特率设置寄存器高字置寄存器
3、高字节SCILBAUD0 x0000 705316位位SCI-A波特率波特率设置寄存器低字置寄存器低字节SCICTL20 x0000 705416位位SCI-A控制寄存器控制寄存器2SCIRXST0 x0000 705516位位SCI-A接收状接收状态寄存器寄存器SCIRXEMU0 x0000 705616位位SCI-A接收仿真数据接收仿真数据缓冲寄存器冲寄存器SCIRXBUF0 x0000 705716位位SCI-A接收数据接收数据缓冲寄存器冲寄存器SCITXBUF0 x0000 705916位位SCI-A发送数据送数据缓冲寄存器冲寄存器SCIFFTX0 x0000 705A16位位SCI-
4、A FIFO发送寄存器送寄存器SCIFFRX0 x0000 705B16位位SCI-A FIFO接收寄存器接收寄存器SCIFFCT0 x0000 705C16位位SCI-A FIFO控制寄存器控制寄存器SCIPRI0 x0000 705F16位位SCI-A 极性控制寄存器极性控制寄存器寄存器地址缺少寄存器地址缺少0 x0000 7058、0 x0000 705D、0 x0000 705E6.1.1 了解SCI的寄存器寄存器名寄存器名地址地址占用空占用空间功能描述功能描述SCICCR0 x0000 775016位位SCI-B通信控制寄存器通信控制寄存器SCICTL10 x0000 775116位
5、位SCI-B控制寄存器控制寄存器1SCIHBAUD0 x0000 775216位位SCI-B波特率波特率设置寄存器高字置寄存器高字节SCILBAUD0 x0000 775316位位SCI-B波特率波特率设置寄存器低字置寄存器低字节SCICTL20 x0000 775416位位SCI-B控制寄存器控制寄存器2SCIRXST0 x0000 775516位位SCI-B接收状接收状态寄存器寄存器SCIRXEMU0 x0000 775616位位SCI-B接收仿真数据接收仿真数据缓冲寄存器冲寄存器SCIRXBUF0 x0000 775716位位SCI-B接收数据接收数据缓冲寄存器冲寄存器SCITXBUF0
6、 x0000 775916位位SCI-B发送数据送数据缓冲寄存器冲寄存器SCIFFTX0 x0000 775A16位位SCI-B FIFO发送寄存器送寄存器SCIFFRX0 x0000 775B16位位SCI-B FIFO接收寄存器接收寄存器SCIFFCT0 x0000 775C16位位SCI-B FIFO控制寄存器控制寄存器SCIPRI0 x0000 775F16位位SCI-B 极性控制寄存器极性控制寄存器寄存器地址缺少寄存器地址缺少0 x0000 7758、0 x0000 775D、0 x0000 775E这些寄存器位于这些寄存器位于F2812F2812存储器空间的外设帧存储器空间的外设帧
7、2 2内,是在物理上实际内,是在物理上实际存在的存储器单元。存在的存储器单元。外设帧:外设帧:Peripheral Frames 0Peripheral Frames 0、1 1、2 2三个外设帧映射空间及其包含三个外设帧映射空间及其包含的相关寄存器如下:的相关寄存器如下:6.1.2 使用位定义的方法定义寄存器所谓所谓“位域位域”(也称位段)就是把一个字节中的二进制位划(也称位段)就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。分为几个不同的区域,并说明每个区域的位数。每个域都有一个域名,允许在程序中按域名进行操作。每个域都有一个域名,允许在程序中按域名进行操作。位域的定
8、义和位域变量的说明同结构体定义和其成员说明类位域的定义和位域变量的说明同结构体定义和其成员说明类似,其语法格式为:似,其语法格式为:Struct Struct 位域结构名位域结构名 类型说明符类型说明符 位域名位域名1 1:位域长度:位域长度 类型说明符类型说明符 位域名位域名2 2:位域长度:位域长度 类型说明符类型说明符 位域名位域名n n:位域长度:位域长度;关键字关键字自定义自定义int、float、char等等该位域由多少位组成该位域由多少位组成例6-1 位域定义struct bs /struct bs /定义位域定义位域bsbs int a:8;int a:8;int b:2;in
9、t b:2;int c:6;int c:6;struct bs bs1;struct bs bs1;/定义定义bsbs型变量型变量bs1bs1位域也是位域也是C语言的一种数据结构,需要遵循语言的一种数据结构,需要遵循先声明后使用的原则。例如声明完了先声明后使用的原则。例如声明完了“struct bs bs1;struct bs bs1;”才能用才能用bs型变量型变量bs1位域的定义必须位域的定义必须从右往左从右往左的顺序,也就是的顺序,也就是从最低位开始定义从最低位开始定义一个位域必须存储在同一个字节中一个位域必须存储在同一个字节中,不能,不能跨两个字节。即,如果一个字节所剩空间跨两个字节。即
10、,如果一个字节所剩空间不够放另一个域时,应该从下一个单元起不够放另一个域时,应该从下一个单元起存放该域。存放该域。struct bs /struct bs /定义位域定义位域bsbs int a:4;int a:4;int int :0;/0;/空域空域 int b:5;int b:5;/从第二个字节开始存放从第二个字节开始存放 int c:3;int c:3;位域的长度不能大于一个字节的长度,即,位域的长度不能大于一个字节的长度,即,一个位域不能超过一个位域不能超过8位。位。位域可以无位域名,此时,只用作填充或位域可以无位域名,此时,只用作填充或调整位置,无名位域不能使用调整位置,无名位域不
11、能使用struct bs /struct bs /定义位域定义位域bsbs int a:4;int a:4;int int :2;/2;/这两位不能使用这两位不能使用 int b:2;int b:2;int c:5;int c:5;int d:3;int d:3;以以SCIA的的通信控制寄存器通信控制寄存器SCICCR为例来说明为例来说明C语言语言用位域方法来定义寄存器用位域方法来定义寄存器STOP BITSR/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0EVEN/ODD PARITYPARITYENABLELOOPBACKENAADDR/IDLEMODESCI
12、 CHAR2SCI CHAR1SCI CHAR0位位名称名称说明说明7STOP BITSSCI结束位的个数。该位表示发送的结束位的个数,接收器只对结束位的个数。该位表示发送的结束位的个数,接收器只对1个结个结束位检查。束位检查。1,两个结束位;,两个结束位;0,1个结束位个结束位6EVEN/ODD PARITY奇偶校验位选择。如果奇偶校验位选择。如果PARITY ENABLE置置1,该位决定采用偶极性或者,该位决定采用偶极性或者奇极性校验。奇极性校验。1,偶极性,偶极性,0,奇极性,奇极性5PARITY ENABLESCI奇偶校验使能位。奇偶校验使能位。1,奇偶校验使能。,奇偶校验使能。0,奇
13、偶校验禁止。,奇偶校验禁止。4LOOPBACKENA回送测试模式使能。该位能够使能回送测试模式,此时发送引脚回送测试模式使能。该位能够使能回送测试模式,此时发送引脚SCITXD和接收引脚和接收引脚SCIRXD在系统内部连在一起。在系统内部连在一起。1,使能回送测试模,使能回送测试模式功能。式功能。0,禁止回送测试模式功能,禁止回送测试模式功能3ADDR/IDLEMODESCI多处理模式控制位,该位选择多处理器协议中的一种。多处理模式控制位,该位选择多处理器协议中的一种。1,选择地,选择地址位模式协议;址位模式协议;0,选择空闲线模式协议,选择空闲线模式协议20SCI CHAR2SCI CHAR
14、0字符长度控制位。字符长度控制位。18位可选。长度小于八位的字符在位可选。长度小于八位的字符在SCIRXBUF和和SCIRXEMU中靠右对齐,在中靠右对齐,在SCIRXBUF中前面的位用中前面的位用0补充,补充,SCITXBUF中前面的位不需补充。对应字符长度:中前面的位不需补充。对应字符长度:000:长度长度1;001:长度长度2;010:长度长度3;011:长度长度4;100:长度长度5;101:长度长度6;110:长度长度7;111:长度长度8D7D0SCIA的所有寄存器都是的所有寄存器都是8位的,当一个寄存器被访位的,当一个寄存器被访问时,寄存器数据位于低问时,寄存器数据位于低8位,高
15、位,高8位为位为0。D0D2 字符长度控制位:字符长度控制位:3位位D3 SCI多处理模式控制位:多处理模式控制位:1位位D4 回送测试模式使能位:回送测试模式使能位:1位位D5 SCI奇偶校验使能位:奇偶校验使能位:1位位D6 奇偶校验位选择:奇偶校验位选择:1位位D7 SCI结束位的个数:结束位的个数:1位位D8D15 保留位:保留位:8位位例6-2 用位域定义SCICCRstruct SCICCR_BITSstruct SCICCR_BITS Uint16 SCICHAR:3;/D2D0 Uint16 SCICHAR:3;/D2D0 字符长度控制位字符长度控制位 Uint16 ADDRI
16、DLE_MODE:1;/D3 Uint16 ADDRIDLE_MODE:1;/D3 多处理器模式控制位多处理器模式控制位 Uint16 LOOPBKENA:1;/D4 Uint16 LOOPBKENA:1;/D4 回送测试模式使能位回送测试模式使能位 Uint16 PARITYENA:1;/D5 Uint16 PARITYENA:1;/D5 极性使能位极性使能位 Uint16 PARITY:1;/D6 Uint16 PARITY:1;/D6 奇奇/偶极性选择位偶极性选择位 Uint16 STOPBITS:1;/D 7 Uint16 STOPBITS:1;/D 7 停止位个数停止位个数 Uint
17、16 rsvd1:8;/D15D8 Uint16 rsvd1:8;/D15D8 保留;必须定义,但不会被调用保留;必须定义,但不会被调用;struct SCICCR_BITS bit;/struct SCICCR_BITS bit;/声明声明SCICCR_BITS SCICCR_BITS 型变量型变量bitbitbit.SCICHAR=7;/SCIbit.SCICHAR=7;/SCI字符长度控制位为字符长度控制位为8 8位位与传统与传统#define#define 方法比较:方法比较:C C代码访问寄存器的传统方法是使用代码访问寄存器的传统方法是使用#define#define宏为每一个寄存器
18、宏为每一个寄存器分配一个地址。例如:分配一个地址。例如:同同样样的的#define#define 方方法法将将在在每每个个外外设设寄寄存存器器上上不不断断重重复复。甚甚至至对对于于诸诸如如SCI-A SCI-A 和和SCI-BSCI-B这这样样完完全全相相同同的的外外设设,每每个个寄寄存存器器都都必必须须被被一一一一分分配配地地址。址。传统传统#define#define 方法有以下显著弊端:方法有以下显著弊端:(1 1)不容易访问寄存器中的位域部分;)不容易访问寄存器中的位域部分;(2 2)不容易在)不容易在CCS CCS 观察窗内显示位域的值;观察窗内显示位域的值;(3 3)不能利用)不能
19、利用CCS CCS 的自动完成功能;的自动完成功能;(4 4)对于重复的外设,头文件开发者不能获得重复使用的便利)对于重复的外设,头文件开发者不能获得重复使用的便利。注意以下几点:注意以下几点:(1 1)寄存器名出现的顺序必须与它们在内存中被安排的顺序相同;)寄存器名出现的顺序必须与它们在内存中被安排的顺序相同;(2 2)在结构体中,通过使用保留变量()在结构体中,通过使用保留变量(rsvd1rsvd1,rsvd2 rsvd2 等)来预留等)来预留内存中的保留位置。内存中的保留位置。这种保留结构仅仅用以预留内存中的空间;这种保留结构仅仅用以预留内存中的空间;(3 3)Uint16 Uint16
20、 和和Uint32 Uint32 分别是无符号分别是无符号16 16 位或者位或者32 32 位数的类型定义,位数的类型定义,在在DSP281x DSP281x 中,则用来定义中,则用来定义无符号整型和无符号长整型无符号整型和无符号长整型。这样使。这样使用起来就方便一些。相应的类型定义声明由用起来就方便一些。相应的类型定义声明由DSP281x_Device.h DSP281x_Device.h 文件文件建立。建立。2 2)声明可访问寄存器的变量)声明可访问寄存器的变量寄存器结构体类型可被用于声明一个可访问寄存器的变量,对器寄存器结构体类型可被用于声明一个可访问寄存器的变量,对器件的每个外设都采
21、用这一相同的做法,件的每个外设都采用这一相同的做法,同一种外设的复用外设可同一种外设的复用外设可以采用同样的结构体类型定义以采用同样的结构体类型定义。例如,如果一个器件上有。例如,如果一个器件上有3 3 个个CPU-TimersCPU-Timers,可以创建如下所示的,可以创建如下所示的3 3 个具有个具有“struct struct CPUTIMER_REGSCPUTIMER_REGS”结构体类型的变量。结构体类型的变量。例6-3 SCICCR的共同体定义结构体变量不能作为一个整体进行输入、输出结构体变量不能作为一个整体进行输入、输出。如果需要对整。如果需要对整个寄存器进行操作,位域操作就过
22、于复杂,这时考虑到共同体,个寄存器进行操作,位域操作就过于复杂,这时考虑到共同体,可以进行整体操作和位操作二选一的方式。可以进行整体操作和位操作二选一的方式。共同体(公用体):把几种不同类型的变量放在同一段内存单共同体(公用体):把几种不同类型的变量放在同一段内存单元中。变量在内存中所占字节数不同,但都从同一地址开始存元中。变量在内存中所占字节数不同,但都从同一地址开始存放。也就是采用覆盖技术,几个变量相互覆盖。放。也就是采用覆盖技术,几个变量相互覆盖。共同体类型变量定义形式:共同体类型变量定义形式:union union 共同体名共同体名 成员表列成员表列;例6-3 SCICCR的共同体定义
23、union SCICCR_REG union SCICCR_REG Uint16 all;/Uint16 all;/可实现对寄存器整体操作可实现对寄存器整体操作 struct SCICCR_BITS bit;/struct SCICCR_BITS bit;/可实现位操作可实现位操作;union SCICCR_REG SCICCRunion SCICCR_REG SCICCR;/声明声明 一个共同体一个共同体SCICCRSCICCRSCICCR.all=0 x007F;SCICCR.all=0 x007F;SCICCR.bit.SCICHAR=5;SCICCR.bit.SCICHAR=5;关键字
24、关键字struct SCI_REGS struct SCI_REGS union SCICCR_REG SCICCR;/union SCICCR_REG SCICCR;/通信控制寄存器通信控制寄存器 union SCICTL1_REG SCICTL1;/union SCICTL1_REG SCICTL1;/控制寄存器控制寄存器1 1 Uint16 SCIHBAUD;/Uint16 SCIHBAUD;/波特率寄存器波特率寄存器(高字节高字节)Uint16 SCILBAUD;/Uint16 SCILBAUD;/波特率寄存器波特率寄存器(低字节低字节)union SCICTL2_REG SCICTL
25、2;/union SCICTL2_REG SCICTL2;/控制寄存器控制寄存器2 2 union SCIRXST_REG SCIRXST;/union SCIRXST_REG SCIRXST;/接收状态寄存器接收状态寄存器 Uint16 SCIRXEMU;/Uint16 SCIRXEMU;/接收仿真缓冲寄存器接收仿真缓冲寄存器 union SCIRXBUF_REG SCIRXBUF;/union SCIRXBUF_REG SCIRXBUF;/接收数据寄存器接收数据寄存器 Uint16 rsvd1;Uint16 rsvd1;/保留保留 Uint16 SCITXBUF;/Uint16 SCITX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 语言 操作 DSP 寄存器
限制150内