




已阅读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 定义位域bs inta 8 intb 2 intc 6 structbsbs1 定义bs型变量bs1 位域也是C语言的一种数据结构 需要遵循先声明后使用的原则 例如声明完了 structbsbs1 才能用bs型变量bs1位域的定义必须从右往左的顺序 也就是从最低位开始定义一个位域必须存储在同一个字节中 不能跨两个字节 即 如果一个字节所剩空间不够放另一个域时 应该从下一个单元起存放该域 structbs 定义位域bs inta 4 int 0 空域intb 5 从第二个字节开始存放intc 3 位域的长度不能大于一个字节的长度 即 一个位域不能超过8位 位域可以无位域名 此时 只用作填充或调整位置 无名位域不能使用 structbs 定义位域bs inta 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 D0 D2字符长度控制位 3位D3SCI多处理模式控制位 1位D4回送测试模式使能位 1位D5SCI奇偶校验使能位 1位D6奇偶校验位选择 1位D7SCI结束位的个数 1位D8 D15保留位 8位 例6 2用位域定义SCICCR structSCICCR BITS Uint16SCICHAR 3 D2 D0字符长度控制位Uint16ADDRIDLE MODE 1 D3多处理器模式控制位Uint16LOOPBKENA 1 D4回送测试模式使能位Uint16PARITYENA 1 D5极性使能位Uint16PARITY 1 D6奇 偶极性选择位Uint16STOPBITS 1 D7停止位个数Uint16rsvd1 8 D15 D8保留 必须定义 但不会被调用 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 REG Uint16all 可实现对寄存器整体操作structSCICCR BITSbit 可实现位操作 unionSCICCR REGSCICCR 声明一个共同体SCICCRSCICCR all 0 x007F SCICCR bit SCICHAR 5 structSCI REGS unionSCICCR 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 REG Uint16all 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 REG Uint16all structSCICTL1 BITSbit 定义共同体SCICTL1寄存器 structSCICTL2 BITS bitdescriptionUint16TXINTENA 1 0TransmitinterruptenableUint16RXBKINTENA 1 1Receiver bufferbreakenableUint16rsvd 4 5 2reservedUint16TXEMPTY 1 6TransmitteremptyflagUint16TXRDY 1 7TransmitterreadyflagUint16rsvd1 8 15 8reserved unionSCICTL2 REG Uint16all structSCICTL2 BITSbit 定义共同体SCICTL1寄存器 structSCIRXST BITS bitdescriptionUint16rsvd 1 0reservedUint16RXWAKE 1 1ReceiverwakeupdetectflagUint16PE 1 2ParityerrorflagUint16OE 1 3OverrunerrorflagUint16FE 1 4FramingerrorflagUint16BRKDT 1 5Break detectflagUint16RXRDY 1 6ReceiverreadyflagUint16RXERR 1 7Receivererrorflag unionSCIRXST REG Uint16all structSCIRXST BITSbit 定义共同体SCICTL1寄存器 structSCIRXBUF BITS bitsdescriptionUint16RXDT 8 7 0ReceivewordUint16rsvd 6 13 8reservedUint16SCIFFPE 1 14SCIPEerrorinFIFOmodeUint16SCIFFFE 1 15SCIFEerrorinFIFOmode unionSCIRXBUF REG Uint16all structSCIRXBUF BITSbit 定义共同体SCIRXBUF寄存器 structSCIPRI BITS bitdescriptionUint16rsvd 3 2 0reservedUint16FREE 1 3FreeemulationsuspendmodeUint16SOFT 1 4SoftemulationsuspendmodeUint16rsvd1 3 7 5reserved unionSCIPRI REG Uint16all 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 REG Uint16all 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 REG Uint16all structSCIFFRX BITSbit 定义共同体SCIFFRX寄存器 structSCIFFCT BITS bitsdescriptionUint16FFTXDLY 8 7 0FIFOtransmitdelayUint16rsvd 5 12 8reservedUint16CDC 1 13AutobaudmodeenableUint16ABDCLR 1 14AutobaudclearUint16ABD 1 15Autobauddetect unionSCIFFCT REG Uint16all structSCIFFCT BITSbit 定义共同体SCIFFCT寄存器 structSCI REGS unionSCICCR 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 继续输入 这时又弹出下拉列表 把位域选择好 STOP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内训课件评审标准
- 创造就在身边课件
- 化学实验员安全培训课件
- 创新安全培训机制课件
- 化学原料安全培训课件
- 2025年秋部编版语文五上 交流平台与初试身手(公开课一等奖创新教案+)
- 内河基本安全培训课件
- 内护循环系统讲解课件
- 非龋性牙体病的诊断与治疗
- 合同技术交底流程
- 外墙保温一体板监理细则
- 静脉专科护士汇报
- 博饼规则及奖项设置-含预算
- 体育测量与评价PPT课件-第九章 运动员选材的测量与评价
- 数据中心基础设施标识标志
- 工程质量精细化管理思路、关键点及控制方法课件
- 《情满今生》读书笔记模板
- 2021年一级注册消防工程师继续教育试题答案
- 甲醇理化性质及危险特性表MSDS
- GB/T 5796.3-1986梯形螺纹基本尺寸
- 华北理工大学2016年《互换性及技术测量》期末考试复习题
评论
0/150
提交评论