多缓冲串口中文资料(共28页).doc

上传人:飞****2 文档编号:13933658 上传时间:2022-05-02 格式:DOC 页数:28 大小:900.50KB
返回 下载 相关 举报
多缓冲串口中文资料(共28页).doc_第1页
第1页 / 共28页
多缓冲串口中文资料(共28页).doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《多缓冲串口中文资料(共28页).doc》由会员分享,可在线阅读,更多相关《多缓冲串口中文资料(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上1 引言在世界上众多的DSP厂商中,德州仪器公司的DSP始终占据较大的市场份额。目前得到广泛应用的TI三大DSP处理器系列是TMS320C2000、TMS320C5000和TMS320C6000。每个系列都有繁多的品种,新的产品层出不穷,更新的速度也非常快,但是基本上每个系列的DSP都有多缓冲串口这一片内外设,利用该外设DSP可以与其他DSP、编码器等其他串口器件进行高速的数据通信。多缓冲串口的典型应用是它与串口的A/D、D/A芯片连接在一起,实现高速的数字音频采集和传输。目前,市面上有很多介绍DSP技术的书,但是书中有关多缓冲串口这部分内容的介绍较少,而且多数是直接

2、翻译TI公司多缓冲串口用户使用手册,这样当初学者刚接触多缓冲串口时,入门较难。针对这个问题,本文综合多个系列的TI公司DSP的多缓冲串口使用手册,再根据自己的理解,从整体到局部,从简单到复杂,先详细地介绍了多缓冲串口进行通信的原理,以及如何配置和控制通信过程等,再比较了各种系列DSP多缓冲串口的区别和联系,最后通过两个小例子,让读者对多缓冲串口具体的使用有了个直观的理解,实验结果的分析对加深多缓冲串口运行机制的理解应该很有帮助。2 C28x系列DSP的多缓冲串口介绍2.1 通信过程简介多缓冲串口(Multichannel Buffered Serial Port),简写为McBSP。它的通信是

3、靠6个引脚完成的,发送引脚MDX、接收引脚MDR、发送时钟信号引脚MCLKX、接收时钟信号引脚MCLKR、发送帧同步引脚MFSX和接收帧同步引脚MFSR。后面为了简单起见,发送引脚MDX简写为“DX引脚”省掉了“M”,其他三个引脚同理。如图1所示,McBSP与其他器件进行通信时,如果字长为16位或者更小(字长为8,12,16),每个数据传输阶段只需一个16位的寄存器就足够了,DRR2、RBR2、RSR2、DXR2和XSR2不使用。在这种情况下发送数据时,CPU或者DMA控制器往DXR1寄存器写数据,如果XSR1寄存器没有要发送的数据,那么DXR1中的数据传给XSR1,若XSR1中还有要发送的数

4、据(上次DXR1传给它的值还没有完全从DX引脚移出),那么DXR1等待上次的值的最后一位从DX引脚移出时才将数据传给XSR1,如果选择了压缩扩展模式(使用虚线框中的Compand Logic,压缩扩展主要是针对率或者A率来说的),那么Compand Logic会将16位的数据压缩成合适的8位的数据格式,然后才将数据传给XSR1。图1 McBSP模块图接收数据时,数据从DR引脚一位一位的移入到RSR1,当接收完一个完整的字时,RSR1中的值传给RBR1(前提是上次RSR1传给RBR1的值已经被RBR1传给DRR1),接着RBR1的值传给DRR1(前提是上次RBR1传给DRR1的值已经被CPU或者

5、DMA控制器读取了),再接着CPU或者DMA控制器读取DRR1的值,如果选择了压缩扩展模式(使用虚线框中的Expand Logic),那么Expand Logic会将接收到的8位字长的数据(必须是8位)扩展成16位的数据之后才传给DRR1;在RBR1中的数据传给DRR1之前可以选择是否进行压缩扩展处理,或者选择是否进行符号扩展和对齐的操作,符号扩展和对齐的操作由RJUST位(bit13-14在SPCR1中)控制,如表1所示,当使用压缩扩展处理时该位被忽略。如果字长大于16(字长为20,24,32)的话,那么DRR2、RBR2、RSR2、DXR2和XSR2就必须用来存放大于16位那部分的值了,数

6、据的发送和接收和字长小于16位的情况类似,只是在发送数据时CPU或DMA控制器必须先写DXR2然后再写DXR1,接收数据时CPU或DMA控制器必须先读DDR2然后再度DDR1。RJUST位对齐扩展DDR2的值DDR1的值00b右高位0填充0000h0ABCh01b右高位符号扩展FFFFhFABCh10b左低位0填充0000hABC0h11b保留保留保留保留表1 RJUST位控制12位的值ABCh调整表有关压缩扩展模式的介绍:a.压缩扩展模块可以将数据按率格式或A率格式进行压缩扩展,率和A率都将数据编码成8位进行传输,因此多缓冲串口寄存器中RWDLEN1位、RWDLEN2位、XWDLEN1位和X

7、WDLEN2位必须为0,指示字长是8位;b.在接收时,8位压缩过的数据被扩展成16位左对齐的形式存放在DRR1中,RJUST位被忽略;在发送时,采用率格式压缩, 14位的数据必须左对齐后位于DXR1中,剩余两位用0填充,采用A率格式压缩,13位的数据必须左对齐后位于DXR1中,剩余三位用0填充,如图2所示。图2 压缩后的数据格式c.压缩和扩展由RCOMPAND位(bit3-4在RCR2中)和XCOMPAND位(bit3-4在XCR2中)控制,如表2和3所示;RCOMPAND位对应的控制00b没有压缩扩展,字长任意,高位先接收01b没有压缩扩展,字长必须为8,低位先接收10b采用率压扩,字长必须

8、是8,高位先接收11b采用A率压扩,字长必须是8,高位先接收表2 数据接收压扩模式表XCOMPAND位对应的控制00b没有压缩扩展,字长任意,高位先发送01b没有压缩扩展,字长必须为8,低位先发送10b采用率压扩,字长必须是8,高位先发送11b采用A率压扩,字长必须是8,高位先发送表3 数据发送压扩模式表d.压缩扩展模块还可以用于压扩内部数据,如线性格式的数据与率或A率格式的数据相互转化。2.2 时钟和帧数据McBSP总在内部CLKX的上升沿一位一位的从DX引脚发送数据,总在内部CLKR的下降沿一位一位的从DR引脚采样接收数据;内部CLKX可以由CLKX引脚提供,也可以来自McBSP的内部;内

9、部CLKR可以由CLKR引脚提供,也可以来自McBSP内部;默认的数据传输是高位先传输。如图3所示。图3 简单的时钟信号控制波形图在移位寄存器(RSR或XSR)和数据引脚(DR或DX)之间以一个组的形式进行传递的几位就构成了一个串行字(Serial Word),简称为字,RSR装满一个完整的字后才把数据传给RBR,XSR移出完一个完整的字后才会接受DXR传递过来的数据。一个字在多通道选择模式中也可以理解为一个通道。如图3中B7-B0就是一个字,是一个8位的字。字长可以是8,12,16,20,24或者32,对于接收端字长由RWDLEN1位(bit5-bit7在RCR1寄存器中)和RWDLEN2位

10、(bit5-bit7在RCR2寄存器中)决定,对于发送端由XWDLEN1位(bit5-bit7在XCR1寄存器中)和XWDLEN2位(bit5-bit7在XCR2寄存器中)决定。一个或者多个字一组就构成了一个帧(Frame)。一个帧里的所有字是连续传输的,但帧与帧之间在传输时可以有暂停(暂停可以理解为发送端发送的全是0,接收端接收的也全是0,相当于是不工作了)。如图3是一个字长为8的字构成一个图4 复杂的时钟信号控制波形图帧长为一的帧,如图4是四个字长为8的字构成一个帧长为四的帧。每一个帧相位中可以包含1-128个字,对于接收端由RFRLEN1位(bit8-bit14在RCR1寄存器)和RFR

11、LEN2位(bit8-bit14在RCR2寄存器)决定,对于发送端由XFRLEN1位(bit8-bit14在XCR1寄存器)和XFRLEN2位(bit8-bit14在XCR2寄存器)决定。Bit14-bit8的值为0-5时对应的字长分别为8-32。帧相位(Frame Phase)可以分为单相位和双相位,如图3,图4都是一个单相位的帧,图5是一个双相位的帧,第一个相位由两个字长为12的字组成,紧接着的第二个相位由三个字长为8的字组成,帧长是5,具体帧是单相位还是双相位由控制发送端的XPHASE位(bit15在XCR2寄存器中)和控制接收端的RPHASE位(bit15在RCR2寄存器中)决定。图5

12、 双相位帧图帧同步(Frame Synchronization)用于决定下一个帧是否要发送或接收。内部帧同步信号(内部FSX或内部FSR)由低电平向高电平跳变预示着下一个帧的开始,但是并不一定跳变一发生下一个帧就立刻传输,可以有一定的延迟,该延迟由控制接收端的RDATDLY位(bit0和bit1在RCR2寄存器中)和控制发送端的XDATDLY位(bit0和bit1在XCR2寄存器中)决定,如图3显示的是延迟一个内部CLK(R/X)周期。内部FSX控制发送时的帧同步,可以由FSX引脚提供,也可以来自McBSP的内部,内部FSR控制接收时的帧同步,可以由FSR引脚提供,也可以来自McBSP的内部。

13、2.3 采样率发生器(Sample Rate Generator)每一个McBSP都有一个采样率发生器(SRG)可编程产生并输出内部数据时钟信号(CLKG)和内部帧同步信号(FSG),上面提到的“内部CLKX、内部CLKR可以来自McBSP的内部”指的就是内部数据时钟信号(CLKG),上面提到的“内部FSX、内部FSR可以来自McBSP的内部”指的就是内部帧同步信号(FSG)。由此可以归纳在一般模式下内部控制信号的来源情况,如表4和表5所示。采样率发生器的输入时钟CLKSRG可以由三种方式提供,如表6所示,表中两个控制位都为0的情况是保留的。接收器的内部接收时钟(内部CLKR)发送器的内部发送

14、时钟(内部CLKX)CLKRM位=0由MCLKR引脚输入CLKXM位=0由MCLKX引脚输入CLKRM位=1内部CLKR为CLKG 并由MCLKR引脚输出以反映其变化CLKXM位=1内部CLKX为CLKG 并由MCLKX引脚输出以反映其变化注: CLKRM位和CLKXM位在PCR寄存器(bit8和bit9)中。表4 内部接收和发送时钟来源表接收器的内部帧同步(内部FSR)发送器的内部帧同步(内部FSX)FSRM位=0由MFSR引脚输入FSXM位=0由MFSX引脚输入FSRM位=1内部FSR为FSG 并根据GSYNC位判断是否MFSR引脚输出FSXM位=1FSGM位=1内部FSX为FSG 并由M

15、FSX引脚输出以反映其变化FSXM位=1FSGM位=0当DXR中的值传给XSR时产生发送帧同步信号并由MFSX引脚输出反映其变化注: FSRM位和FSXM位在PCR寄存器(bit10和bit11)中,GSYNC位在SRGR2寄存器(bit15)中,FSGM位在SRGR2寄存器(bit12)中。表5 内部接收和发送帧同步信号来源表SCLKME位CLKSM位CLKSRG的来源00保留01由LSPCLK提供(在芯片内部来自CPU)10由MCLKR引脚提供11由MCLKX引脚提供注: SCLKME位在PCR(bit7)中,CLKSM位在SRGR2(bit13)中。表6 采样率发生器输入时钟来源表在表4

16、、表5和表6中MFSX引脚、MFSR引脚、MCLKX引脚和MCLKR引脚都可以作为时钟的输入引脚或者作为时钟的输出引脚以反映内部信号的变化,无论是输入还是输出,在输入的信号提供给内部信号之前和内部信号从引脚输出之前,它们的极性是可以反转变化的,例如原来是上升沿的可以变化为下降沿,极性的变化由对应的FSXP位、FSRP位、CLKXP位和CLKRP位(它们依次位于PCR寄存器的bit3-bit0)控制,这些极性控制位为1时极性反转变化。DX引脚和DR引脚有对应的状态位DXSTAT和DRSTAT,分别位于PCR的bit5和bit4。图6 采样率发生器的模块图在图6中也能清楚的看出CLKSRG的来源情

17、况,CLKSRG除以(CLKGDV+1)后就得到了CLKG,CLKGDV是CLKGDV位(bit7-bit0在SRGR1中)的值;CLKSRG除以(CLKGDV+1)后得到的信号一路为CLKG,另一路经过FPER和FWID分频后得到FSG,由FSG提供的两个帧同步脉冲之间的间隔(两个帧的开始之间的间隔)是(FPER+1)个CLKG周期,FPER是FPER位(bit11-bit0在SRGR2中)的值,由FSG提供的帧同步脉冲的宽度是(FWID+1)个CLKG周期,FWID是FWID位(bit15-bit8在SRGR1中)的值。图7 CLKG与外部信号同步和FSG的产生图当选择一个外部时钟(由CL

18、KX引脚或CLKR引脚输入)作为采样率发生器的输入时钟时,GSYNC位和FSR引脚可以用来控制采样率发生器的输出时钟CLKG同步于外部时钟和FSG脉冲的产生,GSYNC位=1时FSR引脚输入信号(CLKRP位=0)的低电平向高电平的跳变将触发CLKG同步于外部时钟和FSG脉冲的产生,真正的同步发生在CLKX引脚输入信号的上升沿(CLKXP位=0)或CLKR引脚输入信号的下降沿(CLKRP位=0);同步后的CLKG信号总是从高电平开始;很明显FPER位被忽略了,因为FSG的产生由FSR引脚输入信号决定;在GSYNC位=1时,为使发送端同步与接收端,个人建议选择四个内部控制信号均来自采样率发生器的

19、输出信号;如图7所示,第一行和第二行是CLKX或CLKR引脚的输入时钟,第一行为CLKX引脚的输入时钟且CLKXP=1或者CLKR引脚的输入时钟且CLKRP=0的情况,第二行为CLKX引脚的输入时钟且CLKXP=0或者CLKR引脚的输入时钟且CLKRP=1的情况,在图中由于外部的FSR引脚输入的信号发生了有效的跳变,紧接着同步发生(带有上下箭头的那条虚竖线),需要同步的CLKG被同步,同时产生FSG信号。2.4 McBSP的各种模式简介上面内容均是针对McBSP一般模式下的应用而叙述的。此外多缓冲串口还可用于数字回送模式、时钟停止模式和多通道选择模式等。在数字回送模式下(Digital loo

20、pback mode),内部接收信号由内部发送信号直接提供。该模式主要用于单个DSP多缓冲串口的测试,由DLB位(bit15在SPCR1寄存器中)为1来选择该模式,此时DR在芯片内部直接连接到DX,内部CLKR直接连接到内部CLKX,内部FSR连直接接到内部FSX。McBSP可用于时钟停止模式(Clock Stop Mode),该模式兼容SPI协议,SPI协议是一个主从式的配置包含一个主控器件和一个或多个从控器件。在时钟停止模式中,每个数据传输结束时钟就会停止,在每个数据传输的开始,时钟可以选择立即开始(CLKSTP=10b)或者半个周期延迟后再开始(CLKSTP=11b),CLKSTP为00

21、b或01b该模式将会被禁用,CLKSTP为SPCR1的bit12-11位。McBSP还可以用于多通道选择模式(multichannel selection mode),该模式下McBSP使用时分复用(TDM)数据流和其他McBSP或串口器件通信。每个McBSP端口支持128个接收通道和128个发送通道,每个通道可等同于一个字。2.5 McBSP数据通信可能产生的错误总共有五种错误类型:接收器超载,发送数据的覆盖,发送器的空载,意外的接收帧同步脉冲和意外的发送帧同步脉冲。接收器超载:DRR中的数据没有被读取,RBR也有要传递的数据,并且RSR也装满了一个完整的字,此时将发生接收器超载错误,RFU

22、LL位(bit2在SPCR1中)为1以显示该错误发生了;只要DRR1中的数据没有被读取并且DR引脚还在接收数据,那么RSR中的值就会不断的被覆盖;CPU或DMA控制器读取DRR1或者发送器复位(RRST=0)或者整个DSP芯片复位将使RFULL位清零,若要重新启动发送器需要下一个帧同步脉冲的到来。如图8所示由于一直没有读取DRR1,在接收完字C时发生错误,RSR中的字C将会被字D覆盖,若还不读取DRR1,字D可能还会被新的字覆盖。图8 接收器超载示意图发送数据的覆盖:DXR中的数据还没有传递给XSR,但是CPU或者DMA控制器又向DXR中写入数据,先前DXR中的值将被覆盖,此时错误发生,该错误

23、没有标志位。发送器的空载:与发送数据的覆盖错误相反,DXR已经把数据递给XSR,XSR也已经把传递过来的数据都从DX引脚移出去了,CPU或者DMA控制器还没有向DXR中写入数据,错误发生,XEMPT位(bit2在SPCR2中)为0以显示该错误发生了,此外发生器在复位状态(由XRST=0或DSP复位产生)时XEMPT位也为0;向DXR1中写入新的字,该新的字被DXR1传给XSR1时,XEMPT位被置为1。如图9所示,当字B被发送后,在下一个帧同步脉冲到来前,DXR1没有装入新的字,因此字B又发送了一次。图9 发送器的空载示意图意外的接收帧同步脉冲:RFIG位(bit2在RCR2中)为0,当前帧中

24、的位还没有全部接收完,但是却出现了一个新的接收帧同步脉冲,这个脉冲称为意外的接收帧同步脉冲,RSYNCERR位(bit3在SPCR1中)为1以显示该错误发生了,错误发生时还可以选择是否发出中断以通知CPU;若要将RSYNCERR位清零,只能将接收器复位或者将该位写0;RFIG=1时接收器忽略帧同步,以避免该错误。图10 意外的接收帧同步脉冲示意图如图10所示,在字B还没有完全接收时,出现了意外的帧同步脉冲,字B被抛弃接收器开始接收字C,同时RSYNCERR被置为1。意外的发送帧同步脉冲:XFIG位(bit2在XCR2中)为0,当前帧中的位还没有全部发送完,但是却出现了一个新的发送帧同步脉冲,这

25、个脉冲称为意外的发送帧同步脉冲,XSYNCERR位(bit3在SPCR2中)为1以显示该错误发生了,错误发生时还可以选择是否发出中断以通知CPU;若要将XSYNCERR位清零,只能将发送器复位或者将该位写0;XFIG=1时发送器忽略帧同步,以避免该错误。如图11所示,在字B还没有完全发送时,出现了意外的帧同步脉冲,由于没有新的值传给XSR1,字B被重新从B7开始传输,同时XSYNCERR被置为了1。图11 意外的发送帧同步脉冲示意图2.6 数据传输的控制和中断 当RBR1向DRR1传送数据时,RRDY位(bit1在SPCR1中)被置为1指示DRR中的数据可以被CPU或DMA控制器读取了,读取后

26、该位自动清零;在RINTENA位(bit2在MFFINT中)为1的情况下,如果RINTM位(bit5-4在SPCR1中)的值为00,那么RRDY从0变到1会向CPU发出中断请求,RINTM=01时帧的结束或块的结束会产生中断(用于多通道选择模式),RINTM=10时一个新的接收帧同步脉冲产生中断,RINTM=11时意外的接收帧同步(RSYNCERR=1)产生中断。当DXR1向XSR1传送数据时,XRDY位(bit1在SPCR2中)被置为1指示CPU或DMA控制器可以向DXR写入数据了,写入后该位自动清零;在XINTENA位(bit0在MFFINT中)为1的情况下,如果XINTM位(bit4-5

27、在SPCR2中)的值为00,那么XRDY从0变到1会向CPU发出中断请求,XINTM=01时帧的结束或块的结束会产生中断(用于多通道选择模式),XINTM=10时一个新的发送帧同步脉冲产生中断,XINTM=11时意外的发送帧同步(XSYNCERR=1)产生中断。帧同步逻辑、采样率发生器、发送器和接收器都有自己对应的复位位,分别是FSRT(bit7在SPCR2)、GRST(bit6在SPCR2)、RRST(bit0在SPCR1)和XRST(bit0在SPCR2),为清零时复位。2.7 McBSP初始化过程串口的初始化过程主要是:a.使帧同步逻辑、采样率发生器、接收器和发送器处于复位状态(FSRT

28、=GRST=RRST=XRST=0);b.当串口处于复位状态时,配置控制寄存器(不是数据寄存器)使处于期望的接收或发送状态;c.至少等待2个时钟周期,以保证内部的同步;d.设置GRST=1使采样率发生器工作;e. 至少等待2个时钟周期,以保证内部的同步;f.设置RRST=XRST=1使串口开始工作,在设置这些位的时候要保证不要修改SPCR1和SPCR2中其他位的值;g.如果用到内部的帧同步逻辑,那么将FSRT 设置成1;在大部分情况下,只有当发送器工作后(XRST=1),CPU或者DMA控制寄存器才向数据发送寄存器DXR写入值。初始化过程参考示例程序。表7 McBSP的寄存器一览表初始化完成后

29、,最简单的操作是:要发送数据时先判断XRDY位是否为1,若是1那么往DXR写入要发送的数据;要接收数据时先判断RRDY位是否为1,若是1那么CPU读取DRR的值就行了,这种操作可以不用理会中断的处理,该方式称为查询方式。当然也可以采用中断驱动的方式来进行发送和接收。这两种方式的应用参考示例程序部分。以下是配置接收器或发送器时的一些具体任务,每个任务需要修改对应的一个或多个McBSP的寄存器的位,表7列出了各个寄存器的地址。全局行为配置:l 将接收或发送引脚设置成McBSP外设功能;l 使能或禁用数字回送模式;l 使能或禁用时钟停止模式;l 使能或禁用多通道选择模式;数据行为配置:l 为每个接收

30、或发送帧配置单个或双相位;l 设置接收或发送数据的字长;l 设置接收或发送帧的长度;l 使能或禁用帧同步忽略功能;l 设置接收或发送压扩模式;l 设置数据接收或发送延时;l 设置数据接收的符号扩展和对齐模式及发送的DXENA模式;l 设置接收或发送的中断模式;帧同步行为配置:l 设置接收或发送帧同步模式;l 设置接收或发送帧同步极性;l 设置SRG的帧同步周期和脉冲宽度;时钟行为配置:l 设置接收或发送时钟模式;l 时钟接收或发送时钟极性;l 设置SRG时钟分频值;l 设置SRG时钟同步模式;l 设置SRG时钟模式(选择一个输入时钟);l 设置SRG输入时钟的极性;2.8 McBSP的主要特性

31、l 全双工通信方式;l 通过双缓冲发送和三缓冲接收实现连续数据流的通信;l 发送和接收具有独立的时钟和帧结构;l 具有向CPU或DMA控制器发送中断的功能;l 128个发送和接收通道;l 多通道选择模式可以允许或阻止每个通道的传输;l 支持与工业标准的编解码器、模拟接口芯片(AICs)及其他串行接口的A/D和D/A设备的直接连接;l 支持外部时钟信号和帧同步信号的产生;l 一个可编程的采样率发生器,可用于内部产生和控制时钟信号和帧同步信号;l 时钟信号和帧同步脉冲的极性可编程;l 可直接连接的接口:T1/E1帧调节器、IOM-2兼容设备、AC97兼容设备、I2S兼容设备和SPI设备;l 可选择

32、的字长:8、12、16、20、24和32位;l A率和u率的压缩扩展;l 可选择发送或接收8位数据时低字节先开始;l 各种状态位以标示数据传输;l ABIS模式不支持;(有些C28X系列DSP支持该模式如F2812);3 C54X系列DSP的多缓冲串口如图12所示为C54X系列片内外设McBSP的结构框图,从图中可以看出C54X系列的多缓冲串口和C28X系列的差别不大,主要的差别是:1.C54X系列多了一个CLKS引脚,该引脚是采样率发生器的外部输入时钟,它也有对应的极性控制位CLKSP(bit14在SRGR2中)和引脚状态位CLKS_ STAT(bit6在PCR寄存器中),C28X系列中对应

33、的位都是保留,如图13所示,C28X系列的多缓冲串口采样率发生器的外部输入时钟由CLKR引脚或CLKX引脚提供,而C54X系列的采样率发生器的外部输入时钟只能是CLKS引脚,因此PCR寄存器中bit7位SCLKME是保留的,仅用SRGR2寄存器中的bit13位CLKSM就能决定输入时钟了。上段所讲的关于C54X系列和C28X系列的差别是根据TI手册中有关McBSP部分的介绍而来的,实际上,几乎所有的C54X系列DSP芯片的引脚中都找不到CLKS引脚,如5402、5409和5416等等,TI网站对于这个问题给出的解释是“为了减少引脚数或有时为了维持以前器件的封装CLKS引脚经常给去掉了”。换句话

34、说就是该差别其实是不存在的。图12 C54X系列McBSP的结构框图图13 C54X系列McBSP的采样率发生器模块图2.如表8所示,C54X系列多缓冲串口寄存器的地址也和C28X系列的不太一样,它们好多含有子地址(Sub-Address)并且十六进制地址(Hex Address)一样,有一个子地址寄存器存放该子地址,因此在设置某个寄存器的值时,先修改子地址寄存器的值为该寄存器的子地址值,例如设置McBSP1的寄存器SPCR2为0x0000时,那么就应该:*(0x0048)=0x0001;*(0x0049)=0x0000。表8 C54X系列多缓冲串口部分寄存器表3.能直接连接McBSP的兼容器

35、件也不一样,C54X系列的多了MVIP转换兼容器件和ST-BUS兼容器件,而在C28X系列中却没有提到;C54X系列中的5410支持ABIS模式。4. C54X系列的McBSP的引脚可以用作通用I/O口,控制位分别XIOEN和RIOEN分别位于PCR寄存器的bit13和bit12,而C28X系列控制McBSP的引脚为通用I/O口,有专门的通用I/O口控制寄存器,这些寄存器不仅控制McBSP的引脚还控制其他片内外设的引脚为通用I/O口,因此对应的PCR寄存器中的位保留不用。4 C55X系列DSP的多缓冲串口C55X系列DSP的多缓冲串口几乎和C28X系列完全一样,大部分C55X 系列也是多了一个

36、CLKS引脚,该引脚是采样率发生器的外部输入时钟(这种输入时钟方式的选择对占用了C28X系列中保留的那种输入时钟的选择方式),它也有对应的极性控制位CLKSP,引脚状态位CLKS_ STAT,这些位也都位于PCR寄存器相应的位置。CLKR引脚或CLKX引脚也可作为采样率发生器的外部输入时钟(C54X不可以)。如图14所示。注:1.图示中CLKXP位和CLKRP位在VC5501和VC5502中不影响CLKSRG的极性。2. 在VC5503、VC5507、VC5509和 VC5510中McBSP internal input clock是CPU时钟,但是在在VC5501和VC5502中它是低速的外

37、设时钟。3.CLKS引脚和对应极性控制CLKSP位并不是所有的C55中都有。4. 在VC5501和VC5502中clock synchronization不支持。图14 C55X多缓冲串口的采样率发生器模块图此外在引脚控制寄存器PCR中C55X系列多了几个用于控制的位,如VC5503、VC5507、VC5509和 VC5510中的IDLEEN位(bit14),XIOEN和RIOEN。这些位用于控制C55X系列的McBSP的引脚为通用I/O口和使McBSP停止并进入低功耗状态(IDLEEN位),C28X系列的PCR中对应的为保留位,因为它有专用的控制片内外设为通用I/O口和使片内外设时钟停止的寄

38、存器。5 C64X系列DSP的多缓冲串口C64X系列DSP的多缓冲串口的采样率发生器和C55X的一样,输入时钟可以有四种:CLKS引脚、CLKR引脚、CLKX引脚及来自CPU的时钟。如图15所示,C64X系列与前面几种DSP还有一个最大的区别就是它的寄存器都是32位的,并且它们的地址是偏移地址,它们的基地址是0x01D0 0000,前面几种是16位的(不过基本上都是成对出现的,如DRR2和DRR1),但是对应寄存器中的位几乎还是一样的,可以这样理解:两个16位的寄存器合在一块构成了一个32位的,例如C28X系列有两个XCR寄存器,XCR2构成C64X系列32位的寄存器XCR的高16位,XCR1

39、构成低16位,对应像C28X系列的PCR这样只有单个的寄存器,构成C64X系列32位的寄存器时高16是保留无定义的。(1)RBR、RSR和XSR不能通过CPU或DMA控制器直接访问(2) CPU或DMA控制器只能读不能写该寄存器(3)DRR和DXR可以通过CPU或DMA控制器访问图15 C642X系列多缓冲串口寄存器表综合上面四大部分的分析可知,C28X系列、C54X系列、C55X系列和C64X系列的McBSP的基本结构和功能是完全一样的,差别只是在某些很小的方面,这些方面是由于不同系列的DSP本身特性的差别而引起的,在使用时应注意这些细微的差别。6 示例程序本文通过对TMS320VC5416

40、进行编程,分别通过查询方式和中断驱动方式,实现了单个多缓冲串口(McBSP0)的通信测试。1、查询方式程序代码如下:(1).命令文件-l rts.lib-stack 3000HMEMORYPAGE 0:PROG:origin=0x1000,length=0x6000 VECT:origin=0x80,length=0x80PAGE 1:DATA:origin=8000H,length=2000HUSERDATA:origin=0A000H,length=04000HSECTIONS.vectors VECT PAGE 0.text PROG PAGE 0.cinit PROG PAGE 0.s

41、witch PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1.system DATA PAGE 1.stack USERDATA PAGE 1(2).源文件#define IMR *(volatile unsigned int *)(0x0000)#define IFR *(volatile unsigned int *)(0x0001)#define SWWSR *(volatile unsigned int *)(0x0028)#define BSCR *(volatile unsigned int *)(0x0029)#define SWCR *

42、(volatile unsigned int *)(0x002b)#define CLKMD *(volatile unsigned int *)(0x0058)#define PMST *(volatile unsigned int *)(0x001D)#define DRR20 *(volatile unsigned int *)(0x0020)#define DRR10 *(volatile unsigned int *)(0x0021)#define DXR20 *(volatile unsigned int *)(0x0022)#define DXR10 *(volatile uns

43、igned int *)(0x0023)#define SPSA0 *(volatile unsigned int *)(0x0038)#define SPSD0 *(volatile unsigned int *)(0x0039)/SPSD0包括SPCR1、SPCR2、RCR1、RCR2、XCR1、XCR2、SRGR1/SRGR2、MCR1、MCR2、RCERA、RCERB、XCERA、XCERB和PCR,它们的16位地址/都是0x0039,它们的子地址依次是0x0000-0x000E unsigned int send_data; unsigned int first_receive9=1

44、1,22,33,44,55,66,77,88,99; unsigned int receive_data; unsigned int i=0;/延时函数/void waitloop( unsigned long loopval ) while( loopval ) loopval-; /McBSP初始化函数/void McBSP0_init_DLB() asm( SSBX INTM);/关闭所有可屏蔽中断/使帧同步逻辑、采样率发生器、接收器和发送器处于复位状态SPSA0=0x0000;SPSD0=0x0000;/SPCR1=0x0000SPSA0=0x0001;SPSD0=0x0000;/SP

45、CR2=0x0000/当串口处于复位状态时,配置控制寄存器使处于期望的接收或发送状态SPSA0=0x0000;SPSD0|=0x8000;/SPCR1=0x8000,使能DLB /SPCR2保持为0x0000SPSA0=0x0002;/RCR1SPSD0|=0x0000;/每个接收帧长度为1,字长为8SPSA0=0x0003;/RCR2SPSD0|=0x0002;/单相位,接收数据延时2bitSPSA0=0x0004;/XCR1SPSD0|=0x0000;/每个发送帧长度为1,字长为8SPSA0=0x0005;/XCR2SPSD0|=0x0002;/单相位,发送数据延时2bitSPSA0=0x

46、0006;/SRGR1SPSD0|=0x001F;/FSG脉冲宽1CLKG周期,CLKG=CLKSRG/32SPSA0=0x0007;/SRGR2SPSD0|=0x301F;/CLKSRG=CPU clock,帧周期是32个CLKG /多通道选择模式的寄存器不用/SPSA0=0x000E;/PCR,发送帧同步和发送时钟由内部SRG提供SPSD0|=0x0A00;/接收帧同步和接收时钟由发送器提供/至少等待2个时钟周期,以保证内部的同步waitloop(0x0100);/设置GRST=1使采样率发生器工作SPSA0=0x0001;SPSD0|=0x0040;/GRST=1/至少等待2个时钟周期,以保证内部的同步waitloop(0x0100);/设置RRST=XRST=1使串口开始工作SPSA0=0x0001;SPSD0|=0x0001;

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁