DSP开发知识 > 文章列表
教你学DSP28335 第十六讲 多通道缓冲串口 (浏览次数:9)
发表于2022/1/23 16:41:00
1、F28335的MCBSP模块
F28335的McBSP的特征如下:
1、 全双工通信
2、 发送双缓冲与接收三级缓冲,允许连续的数据流传输
3、 接收、发送具有独立的时钟信号和帧同步信号
4、 可以发出中断给CPU或发出DMA时间给DMA控制器
5、 多达128个接收通道、128个发送通道
6、 多通道选择模式,可以使能或禁止每个通道的块传输
7、 可以与工业标准的Codec(编/解码器)、AICs(模拟接口芯片)、串行A/D、D/A直接无缝连接
8、 支持外部产生的时钟信号与帧同步信号
9、 具有内部采样率发生器,可产生可编程的内部时钟和帧同步信号,同时具有帧同步逻辑模块
10、帧同步信号与时钟信号的极性可编程
11、与T1/E1帧、ST-BUS兼容芯片、IOM-2兼容芯片、AC97兼容芯片、IIS兼容芯片、SPI芯片接口等无缝连接
12、支持8/12/16/20/24/32位的数据宽度
13、状态位可显示例外与出错状态

McBSP模块接口框图如图16.1所示。McBSP通常包括一个数据通道和一个控制通道,通过6个引脚与外部设备连接(图16.1最左边)。数据发送引脚DX负责数据的发送,数据接收引脚DR负责数据的接收,发送时钟引脚CLKX,接收时钟引脚CLKR,发送帧同步引脚FSX和接收帧同步引脚FSR提供串行时钟和控制信号。McBSP通过16位的寄存器组经过内部外设总线与CPU、DMA进行通信。CPU、DMA控制器将它们的待发送的数据写入McBSP的接收寄存器(DXR1、DXR2)。写入接收寄存器的数据通过移位寄存器(XSR1、XSR2)移出接收寄存器。同样,DR引脚上接收到的数据后会移位到接收移位寄存器(RSR1、RSR2)并且被拷贝到接收缓冲寄存器(RBR1,RBR2)。然后接收缓冲寄存器内的数据会被拷贝到接收寄存器组DRR中,这样就可以被CPU或DMA读取。内部与外部之间数据通信与此类似。如果串行字是8位的话,高位寄存器组DRR2,RBR2,RSR2,DXR2和XSR2并不会被用到。若是更长的字宽的时候,这些寄存器就可以用来存放高位。

McBSP的数据具体传输路径如图16.2所示。McBSP的接收操作是三级缓冲,发送操作是双缓冲。用哪些寄存器取决于串行口的字长。

 1、8\12\16字长的数据传输过程
    串行字长小于或等于16位时,在数据传输过程中,只需要一个16位的寄存器就行了。高位寄存器组DRR2,RBR2,RSR2,DXR2和XSR2这些寄存器不会被用到。数据接收引脚DR接收数据,接收到的数据被移位到接收移位寄存器1(RSR1),当接收完一个完整串行字时,若接收缓冲寄存器(RBR1)为空(之前到达数据已经全部被传送出去),则RSR1内的数据会被拷贝到接收缓冲寄存器1中(RBR1);.若数据接收寄存器1(DRR1)为空(之前传送的数据已经被CPU或DMA读取),则接收缓冲寄存器(RBR1)内的数据会被拷贝到数据接收寄存器内(DRR1)中。若接收数据须8位,McBSP压扩(压缩与扩展)功能被使能,接收数据在从缓冲寄存器RBR1到寄存器DRR1之前,依据选定的压扩(压缩与扩展,扩展过程亦可理解为解压)模式进行压扩。
    发送过程与接收过程很相似,但是发送过程为双缓冲,而以上的接收过程是三级缓冲,中间多了接收缓冲寄存器,发送过程中无发送缓冲寄存器。CPU或DMA将数据写入发送寄存器中(DXR1),如果发送移位寄存器为空(XSR1),DXR1内的数据会被拷贝到XSR1内,如果移位寄存器内还有之前的数据,那么发送数据寄存器就会一直等到发送移位寄存器内的最后一位数据移位到发送引脚DX上。如果压扩功能被使能,要将16位数据压缩到8位格式的话,数据在移入发送移位寄存器之前按照选定压扩方式进行压缩。待发送帧同步后,发送器就开始将XSR1内的数据移位到发送引脚DX上。
    2、20\24\32字长的数据传输过程
    若串行字长大于16位,传输过程与上类似,但在传输过程的各个阶段都需要用到两个16位的寄存器,高位寄存器组DRR2,RBR2,RSR2,DXR2和XSR2都会被用来去存放高位。在DR引脚上接收到的数据首先被移位到接收移位寄存器1(RSR2)上,接着才移动到RSR1上,如果一个字被接收完后,且接收缓冲器(RBR1)为空,则RSR2、RSR1内的数据会被分别拷贝到接收缓冲寄存器中(RBR2、RBR1),若数据接收寄存器DRR1为空(之前数据已经被CPU或DMA读取),则接收缓冲器(RBR2、RBR1)内的数据会被拷贝到数据接收寄存器内(DRR2、DRR1)中。CPU或DMA首先是读DRR2内的数据,接着读DRR1的数据,DRR1的数据读完后,DRR1就为空了,RBR的数据就又拷贝到DRR来。
    对于发送过程来讲的话,CPU或DMA写数据是先入DXR2,然后DXR1,当新数据到DXR1后,XSR1为空时,则DXR2、DXR1内的数据就会被拷贝到XSR2、XSR1内。

1、 时钟
    从接收DR引脚到RSR移位寄存器或者是从XSR到DX引脚之间的数据传输是串行的,即每次传输一位,数据的传输通过时钟沿控制,接收器时钟(CLKR)控制数据从接收引脚(DR)到RSR的传输,发送器时钟(CLKX)控制数据从发送移位寄存器XSR到数据发送引脚(DX)传输。CLKR或CLKX可以从McBSP外部引脚获得,也可以由内部产生,当选用外部引脚作为CLKR或CLKX的输入源时,其极性是可编程的。需要注意的是CLKR与CLKX的频率不能高于CPU时钟频率的1/2。McBSP的时钟时序如图16.6所示。
2、 串行字
    RSR或XSR和DR或DX引脚间的数据传输是分组进行的,每一组成为一个串行字,用户可定义串行字长。
3、 帧与帧同步
一个或多个串行字所组成的更大的数据单元被称为帧,用户可定义每一帧中所包含的串行字数目。一帧内的各串行字连续传输,帧之间允许暂停。McBSP使用帧同步信号控制数据帧传输。当产生帧同步信号时,McBSP开始新的一帧数据传输,当接着又来一个帧同步信号,McBSP传输接下来的一帧数据。接收帧同步信号FSR启动DR引脚上的帧传输,发送帧同步信号FSX启动DX引脚上的帧传输。FSR与FSX可由McBSP外部引脚提供,也可由内部产生。McBSP操作过程中,帧同步信号由无效变为有效表示一帧数据的开始。
4、产生发送与接收中断
     McBSP能发送与接收中断以标示在McBSP中发生的特定事件,为了有效监测帧同步信号,可以利用这些中断以响应帧同步信号。设置合适的中断模式位的值为10b,串口控制寄存器1中的接收中断模式 RINTM=10b;串口控制寄存器2中发送中断模式,XINTM=10b。
     与其他串口中断模式不同的是,在McBSP发送器或接收器处于复位状态时,中断模块依然可以工作。例如,当接收器处于复位时,依然可以检测接收帧同步信号并产生RINT信号。在此情形下,管脚控制寄存器PCR中的接收或发送帧同步模式FSRM/FSXM和接收或发送帧同步信号极性FSRP/FSXP位依然能选择帧同步信号的模式和极性,各信号与CPU时钟保持同步,当相应的帧同步信号传送到McBSP接收模块或发送模块时,中断模块会向CPU传送RINT信号或XINT信号。这样CPU就可以在检测到新的帧同步脉冲后,安全地将McBSP退出复位状态。
5、忽略帧同步脉冲
     McBSP可以忽略发送或接收帧同步脉冲,为识别帧同步信号,需将相应的帧同步忽略位清零,对于接收器是接收控制寄存器2(RCR2)中的接收帧同步脉冲忽略位RFIG=0,对于发送器,发送控制寄存器2(XCR2)中发送帧同步脉冲忽略位XFIG=0。接收模块或发送模块也可以在传输指定的帧长度或串行字后忽略同步脉冲,此时需将帧同步忽略位置位(对于接收器RFIG=1,对于发送器XFIG=1)。另外,用户可以采用帧同步信号忽略功能对数据进行打包。
6、帧频率
    帧频由下式决定:

帧频受每帧传送位数的限制。随着帧频的增加,相邻传输的数据包之间的无效周期会减小至零。
7、最大帧频率
帧同步脉冲间最小的时钟周期数等于每帧传输的位数,因此最大帧频如下:
McBSP允许用户配置每一个帧包含一个或两个相位(phase),在不同的相位阶段,每帧串行字的数目和串行字长可以独立配置,以实现灵活的数据传输。例如,用户可以定义一帧包含两个相位,相位1传送两个16位串行字,相位2传送10个8位串行字。这样,用户可以根据需求构造合适的数据帧,以达到最大的传输效率。
        1、每帧的相数、每相的字长与位数
   McBSP寄存器对每帧相位数、每相位串行字数及串行字长的相应控制位如表16.1所示。单相位帧每帧最多允许传送128个串行字,双相位帧每帧最多允许传送256个串行字。

数据传输

每帧相位数

每相位串行字数

串行字长

接收

1(PHASE=0)

RFRLEN1

RWDLEN1

接收

2(PHASE=1)

RFRLEN1  RFRLEN2

RWDLEN1 RWDLEN2

发送

1(PHASE=0)

XFRLEN1

XWDLEN1

发送

2(PHASE=1)

XFRLEN1  XFRLEN2

XWDLEN1 XWDLEN2


单相位帧,帧中包含1个8位长度的串行字
双相位帧,相位1包含2个12位串行字,相位2包含3个8位串行字

数据从DR引脚到CPU或DMA的数据传输过程如下:

1、McBSP等待接收帧同步脉冲FSR;
2、当接收到帧同步信号后,McBSP根据RCR2寄存器中RDATDLY位的设置插入相应的时间延迟;
3、McBSP将DR引脚上的数据移位到RSR中。如前文所述,当串行字长小于或等于16位时,只使用RSR1;当串行字长大于16位时,还需使用RSR2,且RSR2保存数据的高有效位。
4、当接收到一个完整串行字时,如果RBR1为空,McBSP将RSR中的数据传送到RBR中。同样,当串行字长小于或等于16位时,只使用RBR1;当串行字长大于16位时,还需使用RBR2,且RBR2保存数据的高有效位。如果DRR1为空,McBSP就会将RBR中的数据传送到DRR中。当DRR1接收到新的数据后,SPCR1中的接收准备好为(RRDY)置位,表明接收数据已准备好,CPU可以读取接收到的数据。同样,当串行字长小于或等于16位时,只使用DRR1;当串行字长大于16位时,还需使用DRR2,且DRR2保存数据高有效位。如果在数据接收过程中使用了压扩功能(RCOMPAND=10b或11b),RBR1中8位压缩数据将先被扩展成左对齐的16位数据,然后传送到DRR1中;如果未使用压扩功能,则数据在从RBR向DRR传送过程中,根据RJUST位的设置进行对齐和位填充。
5、CPU或DMA读取DRR。当DRR1被读完后,RRDY被清除,启动下一个从RBR到DRR的数据传输。
    值得注意的是,如果需同时使用DRR1和DRR2(串行字长大于16位),CPU应先读DRR2后读DRR1,因为一旦DRR1被读取,将启动下一个从RBR到DRR的数据传输。如果DRR2中的数据没有被先读取,DDR2中的数据就会丢失。

数据发送过程如下:

    1、CPU或DMA将数据写入DXR。当DXR1被加载后,SPCR2中的发送准备好位(XRDY)清除,表示发送器暂不能接收新的数据。当串行字长小于或等于16位时只使用DXR1;当串行字长大于16位时,还需使用DXR2,且DXR2保存数据的高有效位。值得注意的是,如果需同时使用 DXR1和DXR2(串行字长大于16位),CPU必须先写DXR2,后写DXR1,因为一旦DXR1被加载且XSR1为空,McBSP就会将DXR中的数据复制到XSR。如果DXR2没有先被加载,DXR2中先前的值就会传到XSR2中。
    2、当新的数据加载到DXR1中,且XSR1为空时,McBSP将DXR中的数据传送到XSR中,同时发送准备好位(XRDY)置位,表示发送器可以接收新的数据。当串行字长小于或等于16位时,只能使用XSR1;当串行字长大于16位时,还需使用XSR2,且XSR2用于保存数据的高有效位。如果在发送过程中使用了压扩功能(XCR2中XCOMPAND=10b或11b),McBSP会依据u律或A律把在DXR1中的16位数据压缩成8位数据传送到XSR1中;如果未使用压扩功能,McBSP则将DXR中的数据直接传给XSR。
   3、McBSP等待发送帧同步脉冲FSX
   4、当发送帧同步脉冲FSX到来时,McBSP数据XDATDLY位的设置插入一定的数据延迟。   5、McBSP将XSR中的数据逐位从DX引脚发出。

McBSP通过如下信号表16.3所示,将重要事件发送给DMA或CPU
表16.3 McBSP产生的DMA事件与中断

内部信号

描述

RINT

接收中断McBSP可以发出一个接收中断

XINT

发送中断McBSP可以发出一个发送中断

REVT

接收同步事件数据接收寄存器收到数据时,接收同步事件发送给DMA

XEVT

发送同步事件发送寄存器准备好发送下边的数据时,发送同步事件发送给DMA


McBSP内部包含一个采样率发生器模块,通过对该模块的编程可以产生内部数据时钟(CLKG)和帧同步信号(FSG)。McBSP中采样率发生器功能框图如图16.14所示。用户可以通过PCR(管脚控制寄存器)中的SCLKME(采样率发生器时钟模式位)位和SRGR2(采样率发生器控制寄存器2)中CLKSM(时钟源模式位)位选择采样率发生器的输入时钟。
内部数据时钟(CLKG)和帧同步信号(FSG)可分别被用作发送器或接收器时钟信号和帧同步信号。采样率发生器的时钟源(CLKSRG)依据引脚控制寄存器(PCR)中的采样率发生器时钟模式位(SCLKME)位和采样率发生器控制寄存器2(SRGR2)中的时钟模式位(CLKSM)的设置,可以选LSPCLK或外部引脚(CLKXA或CLKRA)。如果选择外部引脚提供时钟,可以通过引脚控制寄存器(PCR)中发送时钟极性位(CLKXP)或接收时钟极性位(CLKRP)控制输入信号的极性。

    采样率发生器有三级时钟分配器,使得CLKG和FSG信号具有可编程特性。三级时钟分配器提供以下功能。
1、时钟分频:依据采样率发生器控制寄存器1(SRGR1)中时钟分频位(CLKGDV)的设置对采样率时钟(CLKSRG)进行分频,产生内部时钟(CLKG)信号;

2、帧周期控制 根据SRGR2中内部帧同步脉冲周期控制位(FPER)的设置对CLKG分频,控制帧周期(帧周期是指从一个帧同步信号开始到下一个帧同步信号开始的时间间隔);

3、帧同步脉冲宽度控制:根据SRGR1中内部帧同步脉冲宽度控制位(FWID)的设置,控制帧同步脉冲的宽度。

    除了三级时钟分频器外,采样发生器还有一个帧同步脉冲检测和时钟同步模块,以实现时钟分频信号和接收帧同步引脚(FSRA)输入的帧同步脉冲同步,该功能可以通过SRGR2的内部时钟同步模式控制位(GSYNC)使能或禁止。

在McBSP工作过程中,可能产生五种错误,分别如下.
   1、接收器溢出(RFULL=1)
    假定RSR、RBR及DRR均为空,新接收的第一个串行字首先保存在RSR中,然后顺次传送到RBR和DRR中;如果CPU没有读取DRRl(如果RBR中有新的数据,读取DRRl将触发RBR到DRR的数据传输),则新接收的第二个串行字将保存在RBR中,而不向DRR中传输;接收到的第三个串行字则保存在RSR中,此时置RFULL=l,指示任何新的数据到来后会覆盖RSR中的内容而造成先前数据丢失。
2、接收帧同步信号异常
接收帧同步信号异常是指还未接收完当前帧的所有位就启动了下一帧的同步信号。在接收过程中,如果RFIG=0且产生了接收帧同步信号异常,就会置RSYNCERR=l。接收帧同步异常信号会终止当前数据接收,并开始接收下一帧数据。
3、发送数据覆盖
在数据从DXR被复制到XSR之前,CPU再次向DXR中写数据,此时将会发生发送数据覆盖的错误,且先前存储在DXR中的数据将会丢失。
4、发送器下溢
    当SPCR2中的XEMPTY位清零时,表示发送器为空(下溢),以下情况会产生发送器下溢:
     (1)最后一个串行字从DXR复制到XSR中,且XSR中数据的所有位都已经通过DX引脚发送出去,再没有向DR中装载新的数据。
     (2)发送器复位(SPCR2中的XRST=0或DSP复位)后重新启动。
5、发送帧同步脉冲异常(XSYNCERR=1)
    发送帧同步信号异常是指还未发送完当前帧的所有位就启动了下一帧的同步信号。在发送过程中,如果XFIG=0且产生了帧同步信号异常,就会置位XSYNCERR=1。发送帧同步脉冲异常会终止当前数据传输,并开始传输下一帧数据,即再次发送XSR中的数据。
McBSP的通道、块、分区
    McBSP通道是指对一个串行字进行移位操作所对应的时间段,McBSP支持多达128个数据接收通道和128个数据发送通道。在接收器和发送器中,128个通道被分为8个块,每块包含相邻的16个通道。
   McBSP可选择2分区模式(A区和B区)和8分区模式(A~H区)。在2分区模式中,用户可以分配一个偶数块(块0.2.4或6)给A区,分配一个奇数块(块1.3.5或7)给B区;在8分区模式中,块0~7分别分配给A~H区。接收过程和发送过程所选择的分区模式是彼此独立的,如接收模块可使用2分区模式,而发送模块使用8分区模式。
       1、当McBSP使用时分复用数据流与其他McBSP或串行设备通信,McBSP可能仅需要较少的通道进行数据传输。为节省存储空间和总线带宽,可以使用多通道选择模式以阻止数据流流入其它通道,而占用资源。每通道分区有专门的通道使能寄存器,其中的每一位用于控制相应分区中对应通道的数据流。McBSP有一种接收多通道选择模式和三种发送多通道选择模式。
在使能多通道选择模式前必须按照以下设置数据帧:
    (1) 选择单相位帧(RPHASE/XPHASE=0),每帧代表一个时分复用数据流(TDM)。
    (2) 设置帧长度(RFRLRN1/XFRLEN1),帧长度值应大于要使用的最大通道号。例如,如果要使用通道0、15和39进行数据接收,则接收帧长度至少是40(RFRLEN1=39)。设置RFRLEN1=39,接收器为每帧创建40个时间段。但每帧只接收通道0、15和39的数据。
       2、如果用户选择2分区模式(对于接收RMCME=0,对于发送XMCME=0),McBSP通道采用轮换调度方式;每来一个帧同步脉冲,接收器或发送器从A区的通道开始传输,然后在B区和A区之间反复切换,直到整个帧传输完毕。当下一帧同步脉冲到来时,仍然从A区通道开始传输。
    对于接收,通过设置RPABLK位,将偶数块分配给接收区A。分区内的通道由接收通道使能寄存器A(RCERA/XCER)控制;因为采取双分区模式,实际上会有两个块分配给了接收区,设置RPBBLK/XPB-BLK位,可以分配一个奇数通道块(块1、3、5或7)给接收区B,分区内的通道由接收通道使能寄存器B(RCERB/XCERB)控制。对于发送,过程与接收过程类似。
     如果用户选择了8分区模式(对于接收RMCME=1,对于发送XMCME=1),McBSP顺次传输A.B.C.D.E.F.G.H分区中各通道中的数据,当帧同步脉冲到来时,接收器或发送器首先传输分区A中各通道数据,然后按照上述顺序传输其他分区通道中的数据,直到整个帧传输完毕。当下一个帧同步脉冲产生时,开始下一帧的传输,且仍然从分区A开始。在8分区模式中,RPABLK/XPBBLK位无效。表16.7给出了各块与各分区的对应关系,该对应关系是固定的,不可更改。表16.7同时给出了控制各区各通道的相关寄存器。

分区

块;通道

通道控制寄存器

A

块0;通道0~15

RCERA/XCERA

B

块1;通道16~31

RCERB/XCERB

C

块2;通道32~47

RCERC/XCERC

D

块3;通道48~63

RCERD/XCERD

E

块4;通道64~79

RCERE/XCERE

F

块5;通道80~95

RCERF/XCERF

G

块6;通道96~111

RCERG/XCERG

H

块7;通道112~127

RCERH/XCERH


2、MCBSP寄存器
3、MCBSP应用
楼主

您必须登录后才能进行回复或者发起新的主题