




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章使用C语言操作DSP的寄存器,北京航空航天大学出版社作者:顾卫钢,北京航空航天大学出版社作者:顾卫钢,电信学院:张蕾,DSP原理及应用,6.1寄存器的C语言访问,特殊的存储单元,具有特殊的功能、具体的含义DSP通过对寄存器的操作能够实现对系统和外设功能的配置与控制。在DSP的开发过程中,对于寄存器的操作是极为重要的,也是很频繁的。对寄存器的操作是否方便会直接影响到DSP的开发是否方便。F2812为大家提供了位定义和寄存器结构体的方式,能够很方便的实现对DSP内部寄存器的访问和控制。,6.1.1了解SCI的寄存器,6.1.1了解SCI的寄存器,寄存器地址缺少0 x00007058、0 x0000705D、0 x0000705E,6.1.1了解SCI的寄存器,寄存器地址缺少0 x00007758、0 x0000775D、0 x0000775E,这些寄存器位于F2812存储器空间的外设帧2内,是在物理上实际存在的存储器单元。外设帧:PeripheralFrames0、1、2三个外设帧映射空间及其包含的相关寄存器如下:,6.1.2使用位定义的方法定义寄存器,所谓“位域”(也称位段)就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域都有一个域名,允许在程序中按域名进行操作。位域的定义和位域变量的说明同结构体定义和其成员说明类似,其语法格式为:Struct位域结构名类型说明符位域名1:位域长度类型说明符位域名2:位域长度类型说明符位域名n:位域长度;,例6-1位域定义,structbs/定义位域bsinta:8;intb:2;intc:6;structbsbs1;/定义bs型变量bs1,位域也是C语言的一种数据结构,需要遵循先声明后使用的原则。例如声明完了“structbsbs1;”才能用bs型变量bs1位域的定义必须从右往左的顺序,也就是从最低位开始定义一个位域必须存储在同一个字节中,不能跨两个字节。即,如果一个字节所剩空间不够放另一个域时,应该从下一个单元起存放该域。,structbs/定义位域bsinta:4;int:0;/空域intb:5;/从第二个字节开始存放intc:3;,位域的长度不能大于一个字节的长度,即,一个位域不能超过8位。位域可以无位域名,此时,只用作填充或调整位置,无名位域不能使用,structbs/定义位域bsinta:4;int:2;/这两位不能使用intb:2;intc:5;intd:3;,以SCIA的通信控制寄存器SCICCR为例来说明C语言用位域方法来定义寄存器,STOPBITS,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/ODDPARITY,PARITYENABLE,LOOPBACKENA,ADDR/IDLEMODE,SCICHAR2,SCICHAR1,SCICHAR0,D7,D0,SCIA的所有寄存器都是8位的,当一个寄存器被访问时,寄存器数据位于低8位,高8位为0。D0D2字符长度控制位:3位D3SCI多处理模式控制位:1位D4回送测试模式使能位:1位D5SCI奇偶校验使能位:1位D6奇偶校验位选择:1位D7SCI结束位的个数:1位D8D15保留位:8位,例6-2用位域定义SCICCR,structSCICCR_BITSUint16SCICHAR:3;/D2D0字符长度控制位Uint16ADDRIDLE_MODE:1;/D3多处理器模式控制位Uint16LOOPBKENA:1;/D4回送测试模式使能位Uint16PARITYENA:1;/D5极性使能位Uint16PARITY:1;/D6奇/偶极性选择位Uint16STOPBITS:1;/D7停止位个数Uint16rsvd1:8;/D15D8保留;必须定义,但不会被调用;structSCICCR_BITSbit;/声明SCICCR_BITS型变量bitbit.SCICHAR=7;/SCI字符长度控制位为8位,与传统#define方法比较:,C代码访问寄存器的传统方法是使用#define宏为每一个寄存器分配一个地址。例如:,同样的#define方法将在每个外设寄存器上不断重复。甚至对于诸如SCI-A和SCI-B这样完全相同的外设,每个寄存器都必须被一一分配地址。,传统#define方法有以下显著弊端:(1)不容易访问寄存器中的位域部分;(2)不容易在CCS观察窗内显示位域的值;(3)不能利用CCS的自动完成功能;(4)对于重复的外设,头文件开发者不能获得重复使用的便利。,注意以下几点:(1)寄存器名出现的顺序必须与它们在内存中被安排的顺序相同;(2)在结构体中,通过使用保留变量(rsvd1,rsvd2等)来预留内存中的保留位置。这种保留结构仅仅用以预留内存中的空间;(3)Uint16和Uint32分别是无符号16位或者32位数的类型定义,在DSP281x中,则用来定义无符号整型和无符号长整型。这样使用起来就方便一些。相应的类型定义声明由DSP281x_Device.h文件建立。2)声明可访问寄存器的变量寄存器结构体类型可被用于声明一个可访问寄存器的变量,对器件的每个外设都采用这一相同的做法,同一种外设的复用外设可以采用同样的结构体类型定义。例如,如果一个器件上有3个CPU-Timers,可以创建如下所示的3个具有“structCPUTIMER_REGS”结构体类型的变量。,例6-3SCICCR的共同体定义,结构体变量不能作为一个整体进行输入、输出。如果需要对整个寄存器进行操作,位域操作就过于复杂,这时考虑到共同体,可以进行整体操作和位操作二选一的方式。共同体(公用体):把几种不同类型的变量放在同一段内存单元中。变量在内存中所占字节数不同,但都从同一地址开始存放。也就是采用覆盖技术,几个变量相互覆盖。共同体类型变量定义形式:union共同体名成员表列;,例6-3SCICCR的共同体定义,unionSCICCR_REGUint16all;/可实现对寄存器整体操作structSCICCR_BITSbit;/可实现位操作;unionSCICCR_REGSCICCR;/声明一个共同体SCICCRSCICCR.all=0 x007F;SCICCR.bit.SCICHAR=5;,structSCI_REGSunionSCICCR_REGSCICCR;/通信控制寄存器unionSCICTL1_REGSCICTL1;/控制寄存器1Uint16SCIHBAUD;/波特率寄存器(高字节)Uint16SCILBAUD;/波特率寄存器(低字节)unionSCICTL2_REGSCICTL2;/控制寄存器2unionSCIRXST_REGSCIRXST;/接收状态寄存器Uint16SCIRXEMU;/接收仿真缓冲寄存器unionSCIRXBUF_REGSCIRXBUF;/接收数据寄存器Uint16rsvd1;/保留Uint16SCITXBUF;/发送数据缓冲寄存器unionSCIFFTX_REGSCIFFTX;/FIFO发送寄存器unionSCIFFRX_REGSCIFFRX;/FIFO接收寄存器unionSCIFFCT_REGSCIFFCT;/FIFO控制寄存器Uint16rsvd2;/保留Uint16rsvd3;/保留unionSCIPRI_REGSCIPRI;/FIFO优先级控制寄存器;externvolatilestructSCI_REGSSciaRegs;externvolatilestructSCI_REGSScibRegs;,例6-4创建SCI寄存器的结构体文件,/*文件名:DSP28_Sci.h*功能:2812SCI模块寄存器的定义*/#ifndefDSP28_SCI_H#defineDSP28_SCI_HstructSCICCR_BITS/bitdescriptionUint16SCICHAR:3;/2:0CharacterlengthcontrolUint16ADDRIDLE_MODE:1;/3ADDR/IDLEModecontrolUint16LOOPBKENA:1;/4LoopBackenableUint16PARITYENA:1;/5ParityenableUint16PARITY:1;/6EvenorOddParityUint16STOPBITS:1;/7NumberofStopBitsUint16rsvd1:8;/15:8reserved;unionSCICCR_REGUint16all;structSCICCR_BITSbit;,位域方式定义SCICCR寄存器,定义共同体SCICCR寄存器,structSCICTL1_BITS/bitdescriptionUint16RXENA:1;/0SCIreceiverenableUint16TXENA:1;/1SCItransmitterenableUint16SLEEP:1;/2SCIsleepUint16TXWAKE:1;/3TransmitterwakeupmethodUint16rsvd:1;/4reservedUint16SWRESET:1;/5SoftwareresetUint16RXERRINTENA:1;/6RecieveinterruptenableUint16rsvd1:9;/15:7reserved;unionSCICTL1_REGUint16all;structSCICTL1_BITSbit;,定义共同体SCICTL1寄存器,structSCICTL2_BITS/bitdescriptionUint16TXINTENA:1;/0TransmitinterruptenableUint16RXBKINTENA:1;/1Receiver-bufferbreakenableUint16rsvd:4;/5:2reservedUint16TXEMPTY:1;/6TransmitteremptyflagUint16TXRDY:1;/7TransmitterreadyflagUint16rsvd1:8;/15:8reserved;unionSCICTL2_REGUint16all;structSCICTL2_BITSbit;,定义共同体SCICTL1寄存器,structSCIRXST_BITS/bitdescriptionUint16rsvd:1;/0reservedUint16RXWAKE:1;/1ReceiverwakeupdetectflagUint16PE:1;/2ParityerrorflagUint16OE:1;/3OverrunerrorflagUint16FE:1;/4FramingerrorflagUint16BRKDT:1;/5Break-detectflagUint16RXRDY:1;/6ReceiverreadyflagUint16RXERR:1;/7Receivererrorflag;unionSCIRXST_REGUint16all;structSCIRXST_BITSbit;,定义共同体SCICTL1寄存器,structSCIRXBUF_BITS/bitsdescriptionUint16RXDT:8;/7:0ReceivewordUint16rsvd:6;/13:8reservedUint16SCIFFPE:1;/14SCIPEerrorinFIFOmodeUint16SCIFFFE:1;/15SCIFEerrorinFIFOmode;unionSCIRXBUF_REGUint16all;structSCIRXBUF_BITSbit;,定义共同体SCIRXBUF寄存器,structSCIPRI_BITS/bitdescriptionUint16rsvd:3;/2:0reservedUint16FREE:1;/3FreeemulationsuspendmodeUint16SOFT:1;/4SoftemulationsuspendmodeUint16rsvd1:3;/7:5reserved;unionSCIPRI_REGUint16all;structSCIPRI_BITSbit;,定义共同体SCIPRI寄存器,structSCIFFTX_BITS/bitdescriptionUint16TXFFILIL:5;/4:0InterruptlevelUint16TXFFIENA:1;/5InterruptenableUint16TXINTCLR:1;/6ClearINTflagUint16TXFFINT:1;/7INTflagUint16TXFFST:5;/12:8FIFOstatusUint16TXFIFOXRESET:1;/13FIFOresetUint16SCIFFENA:1;/14EnhancementenableUint16resvd:1;/15reserved;unionSCIFFTX_REGUint16all;structSCIFFTX_BITSbit;,定义共同体SCIFFTX寄存器,structSCIFFRX_BITS/bitsdescriptionUint16RXFFIL:5;/4:0InterruptlevelUint16RXFFIENA:1;/5InterruptenableUint16RXFFINTCLR:1;/6ClearINTflagUint16RXFFINT:1;/7INTflagUint16RXFIFST:5;/12:8FIFOstatusUint16RXFIFORESET:1;/13FIFOresetUint16RXOVF_CLR:1;/14ClearoverflowUint16RXFFOVF:1;/15FIFOoverflow;unionSCIFFRX_REGUint16all;structSCIFFRX_BITSbit;,定义共同体SCIFFRX寄存器,structSCIFFCT_BITS/bitsdescriptionUint16FFTXDLY:8;/7:0FIFOtransmitdelayUint16rsvd:5;/12:8reservedUint16CDC:1;/13AutobaudmodeenableUint16ABDCLR:1;/14AutobaudclearUint16ABD:1;/15Autobauddetect;unionSCIFFCT_REGUint16all;structSCIFFCT_BITSbit;,定义共同体SCIFFCT寄存器,structSCI_REGSunionSCICCR_REGSCICCR;/CommunicationscontrolregisterunionSCICTL1_REGSCICTL1;/Controlregister1Uint16SCIHBAUD;/Baudrate(high)registerUint16SCILBAUD;/Baudrate(low)registerunionSCICTL2_REGSCICTL2;/Controlregister2unionSCIRXST_REGSCIRXST;/RecievestatusregisterUint16SCIRXEMU;/RecieveemulationbufferregisterunionSCIRXBUF_REGSCIRXBUF;/RecievedatabufferUint16rsvd1;/reservedUint16SCITXBUF;/TransmitdatabufferunionSCIFFTX_REGSCIFFTX;/FIFOtransmitregisterunionSCIFFRX_REGSCIFFRX;/FIFOrecieveregisterunionSCIFFCT_REGSCIFFCT;/FIFOcontrolregisterUint16rsvd2;/reservedUint16rsvd3;/reservedunionSCIPRI_REGSCIPRI;/FIFOPrioritycontrol;externvolatilestructSCI_REGSSciaRegs;externvolatilestructSCI_REGSScibRegs;#endif/=/Nomore./=,例6-5对SCICCR按位进行操作,SciaRegs.SCICCR.bit.STOPBITS=0;/1位停止位SciaRegs.SCICCR.bit.PARITYENA=0;/禁止极性校验功能SciaRegs.SCICCR.bit.LOOPBKENA=0;/禁止回送测试模式功能SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;/空闲线模式SciaRegs.SCICCR.bit.SCICHAR=7;/8位数据位,操作方法1,例6-6对SCICCR整体进行操作,SciaRegs.SCICCR.all=0 x0007;,操作方法2,例6-7对SCIHBAUD和SCILBAUD进行操作,SciaRegs.SCIHBAUD=0;SciaRegs.SCILBAUD=0 xF3;,SCIHBAUD和SCILBAUD在结构体中定义是Unit16型的,即无符号整型的,只能直接给寄存器整体进行赋值用C语言对他们进行操作:,操作方法3,DSP包含了很多寄存器,每个寄存器又有若干位域组成,每个位域也有自己的名字和功能,如何方便的操作寄存器呢?CCS3.3为我们提供帮助,写语句时如要配置停止位个数为1,需要书写语句“SciaRegs.SCICCR.bit.STOPBITS=0”先在CCS中输入“SciaRegs”,然后输入“.”,就会弹出下拉列表框,将SCIA所有的寄存器列了出来,单击选择需要操作的寄存器“SCICCR”,然后在弹出来的变量下拉列表中选择“bit.”,继续输入“.”,这时又弹出下拉列表,把位域选择好“S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扬帆计划培训简报
- 儿童小古文课件设计要点
- 口罩的样子课件
- 培训行业施工知识课件
- 高端AI学术论文自动生成系统使用权购买合同
- 2025年度专业舞台剧演员团体合作协议书
- 网红直播平台场地租赁合作框架合同
- 2025年新型船舶融资租赁合同定制版
- 2025年纸箱生产线设备租赁与技术支持一体化合同范本
- 2025年度园林景区生态环保玻璃钢化粪池制作与安装合作协议
- 2025历年退役军人考试题库及答案
- 第一二单元月考综合试卷(试题)四年级上册数学沪教版
- 2025级新生军训开训仪式动员大会
- 农产品质量安全标准体系与实施路径-洞察及研究
- 中组部选调生管理办法
- 克痉方湿热敷:缺血性脑卒中后上肢肌肉痉挛康复新路径
- 血常规检验中的质量控制
- 高尿酸血症健康管理方案
- 秋季肌肤护理课件
- 骨科总论教学课件
- 大单元教学培训
评论
0/150
提交评论