您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 28335多缓冲串口中文资料
-1-1引言在世界上众多的DSP厂商中,德州仪器公司的DSP始终占据较大的市场份额。目前得到广泛应用的TI三大DSP处理器系列是TMS320C2000、TMS320C5000和TMS320C6000。每个系列都有繁多的品种,新的产品层出不穷,更新的速度也非常快,但是基本上每个系列的DSP都有多缓冲串口这一片内外设,利用该外设DSP可以与其他DSP、编码器等其他串口器件进行高速的数据通信。多缓冲串口的典型应用是它与串口的A/D、D/A芯片连接在一起,实现高速的数字音频采集和传输。目前,市面上有很多介绍DSP技术的书,但是书中有关多缓冲串口这部分内容的介绍较少,而且多数是直接翻译TI公司多缓冲串口用户使用手册,这样当初学者刚接触多缓冲串口时,入门较难。针对这个问题,本文综合多个系列的TI公司DSP的多缓冲串口使用手册,再根据自己的理解,从整体到局部,从简单到复杂,先详细地介绍了多缓冲串口进行通信的原理,以及如何配置和控制通信过程等,再比较了各种系列DSP多缓冲串口的区别和联系,最后通过两个小例子,让读者对多缓冲串口具体的使用有了个直观的理解,实验结果的分析对加深多缓冲串口运行机制的理解应该很有帮助。2C28x系列DSP的多缓冲串口介绍2.1通信过程简介多缓冲串口(MultichannelBufferedSerialPort),简写为McBSP。它的通信是靠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-2-中还有要发送的数据(上次DXR1传给它的值还没有完全从DX引脚移出),那么DXR1等待上次的值的最后一位从DX引脚移出时才将数据传给XSR1,如果选择了压缩扩展模式(使用虚线框中的CompandLogic,压缩扩展主要是针对μ率或者A率来说的),那么CompandLogic会将16位的数据压缩成合适的8位的数据格式,然后才将数据传给XSR1。图1McBSP模块图接收数据时,数据从DR引脚一位一位的移入到RSR1,当接收完一个完整的字时,RSR1中的值传给RBR1(前提是上次RSR1传给RBR1的值已经被RBR1传给DRR1),接着RBR1的值传给DRR1(前提是上次RBR1传给DRR1的值已经被CPU或者DMA控制器读取了),再接着CPU或者DMA控制器读取DRR1的值,如果选择了压缩扩展模式(使用虚线框中的ExpandLogic),那么ExpandLogic会将接收到的8位字长的数据(必须是8位)扩展成16位的数据之后才传给DRR1;在RBR1中的数据传给DRR1之前可以选择是否进行压缩扩展处理,或者选择是否进行符号扩展和对齐的操作,符号扩展和对齐的操作由RJUST位-3-(bit13-14在SPCR1中)控制,如表1所示,当使用压缩扩展处理时该位被忽略。如果字长大于16(字长为20,24,32)的话,那么DRR2、RBR2、RSR2、DXR2和XSR2就必须用来存放大于16位那部分的值了,数据的发送和接收和字长小于16位的情况类似,只是在发送数据时CPU或DMA控制器必须先写DXR2然后再写DXR1,接收数据时CPU或DMA控制器必须先读DDR2然后再度DDR1。RJUST位对齐扩展DDR2的值DDR1的值00b右高位0填充0000h0ABCh01b右高位符号扩展FFFFhFABCh10b左低位0填充0000hABC0h11b保留保留保留保留表1RJUST位控制12位的值ABCh调整表有关压缩扩展模式的介绍:a.压缩扩展模块可以将数据按μ率格式或A率格式进行压缩扩展,μ率和A率都将数据编码成8位进行传输,因此多缓冲串口寄存器中RWDLEN1位、RWDLEN2位、XWDLEN1位和XWDLEN2位必须为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,高位先接收11b采用A率压扩,字长必须是8,高位先接收表2数据接收压扩模式表XCOMPAND位对应的控制00b没有压缩扩展,字长任意,高位先发送-4-01b没有压缩扩展,字长必须为8,低位先发送10b采用μ率压扩,字长必须是8,高位先发送11b采用A率压扩,字长必须是8,高位先发送表3数据发送压扩模式表d.压缩扩展模块还可以用于压扩内部数据,如线性格式的数据与μ率或A率格式的数据相互转化。2.2时钟和帧数据McBSP总在内部CLKX的上升沿一位一位的从DX引脚发送数据,总在内部CLKR的下降沿一位一位的从DR引脚采样接收数据;内部CLKX可以由CLKX引脚提供,也可以来自McBSP的内部;内部CLKR可以由CLKR引脚提供,也可以来自McBSP内部;默认的数据传输是高位先传输。如图3所示。图3简单的时钟信号控制波形图在移位寄存器(RSR或XSR)和数据引脚(DR或DX)之间以一个组的形式进行传递的几位就构成了一个串行字(SerialWord),简称为字,RSR装满一个完整的字后才把数据传给RBR,XSR移出完一个完整的字后才会接受DXR传递过来的数据。一个字在多通道选择模式中也可以理解为一个通道。如图3中B7-B0就是一个字,是一个8位的字。字长可以是8,12,16,20,24或者32,对于接收端字长由RWDLEN1位(bit5-bit7在RCR1寄存器中)和RWDLEN2位(bit5-bit7在RCR2寄存器中)决定,对于发送端由XWDLEN1位(bit5-bit7在XCR1寄存器中)和XWDLEN2位(bit5-bit7在XCR2寄存器中)决定。一个或者多个字一组就构成了一个帧(Frame)。一个帧里的所有字是连续传输的,但帧与帧之间在传输时可以有暂停(暂停可以理解为发送端发送的全是0,接收端接收的也全是0,相当于是不工作了)。如图3是一个字长为8的字构成一个-5-图4复杂的时钟信号控制波形图帧长为一的帧,如图4是四个字长为8的字构成一个帧长为四的帧。每一个帧相位中可以包含1-128个字,对于接收端由RFRLEN1位(bit8-bit14在RCR1寄存器)和RFRLEN2位(bit8-bit14在RCR2寄存器)决定,对于发送端由XFRLEN1位(bit8-bit14在XCR1寄存器)和XFRLEN2位(bit8-bit14在XCR2寄存器)决定。Bit14-bit8的值为0-5时对应的字长分别为8-32。帧相位(FramePhase)可以分为单相位和双相位,如图3,图4都是一个单相位的帧,图5是一个双相位的帧,第一个相位由两个字长为12的字组成,紧接着的第二个相位由三个字长为8的字组成,帧长是5,具体帧是单相位还是双相位由控制发送端的XPHASE位(bit15在XCR2寄存器中)和控制接收端的RPHASE位(bit15在RCR2寄存器中)决定。图5双相位帧图帧同步(FrameSynchronization)用于决定下一个帧是否要发送或接收。内部帧同步信号(内部FSX或内部FSR)由低电平向高电平跳变预示着下一个帧的开始,但是并不一定跳变一发生下一个帧就立刻传输,可以有一定的延迟,该延迟由控制接收端的RDATDLY位(bit0和bit1在RCR2寄存器中)和控制发送端的XDATDLY位(bit0和bit1在XCR2寄存器中)决定,如图3显示的是延迟一个内部CLK(R/X)周期。内部FSX控制发送时的帧同步,可以由FSX引脚提供,也可以来自McBSP的内部,内部FSR控制接收时的帧同步,可以由FSR引脚提-6-供,也可以来自McBSP的内部。2.3采样率发生器(SampleRateGenerator)每一个McBSP都有一个采样率发生器(SRG)可编程产生并输出内部数据时钟信号(CLKG)和内部帧同步信号(FSG),上面提到的“内部CLKX、内部CLKR可以来自McBSP的内部”指的就是内部数据时钟信号(CLKG),上面提到的“内部FSX、内部FSR可以来自McBSP的内部”指的就是内部帧同步信号(FSG)。由此可以归纳在一般模式下内部控制信号的来源情况,如表4和表5所示。采样率发生器的输入时钟CLKSRG可以由三种方式提供,如表6所示,表中两个控制位都为0的情况是保留的。接收器的内部接收时钟(内部CLKR)发送器的内部发送时钟(内部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并由MFSX引脚输出以反映其变化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引脚提供-7-注:SCLKME位在PCR(bit7)中,CLKSM位在SRGR2(bit13)中。表6采样率发生器输入时钟来源表在表4、表5和表6中MFSX引脚、MFSR引脚、MCLKX引脚和MCLKR引脚都可以作为时钟的输入引脚或者作为时钟的输出引脚以反映内部信号的变化,无论是输入还是输出,在输入的信号提供给内部信号之前和内部信号从引脚输出之前,它们的极性是可以反转变化的,例如原来是上升沿的可以变化为下降沿,极性的变化由对应的FSXP位、FSRP位、CLKXP位和CLKRP位(它们依次位于PCR寄存器的bit3-bit0)控制,这些极性控制位为1时极性反转变化。DX引脚和DR引脚有对应的状态位DXSTAT和DRSTAT,分别位于PCR的bit5和bit4。图6采样率发生器的模块图在图6中也能清楚的看出CLKSRG的来源情况,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
本文标题:28335多缓冲串口中文资料
链接地址:https://www.777doc.com/doc-7192216 .html