McBSP


本文摘抄改编自http://blog.csdn.net/findaway123/article/details/20727017
权当学习与交流使用,谨向findaway兄致以敬意。


TMS320F28335总共有2个McBSP(多通道缓冲串口)接口。每个接口有六根引脚, 分别是:
MCLKX(发送时钟引脚)
MCLKR(接收时钟引脚)
MFSX(发送帧同步引脚)
MFSR(接收帧同步引脚)
MDX(数据发送)
MDR (数据接收)

一.结构原理
McBSP结构框图

二.McBSP的数据传输过程
这里写图片描述

CPU和DMA控制器通过外设总线与MCBSP进行通信。
当发送数据时,CPU和DMA将数据写入数据发送寄存器(DXR1,DXR2),接着复制到发送移位寄存器(XSR1,XSR2),通过发送移位寄存器输出至DX引脚。
同样,当接收数据时,DR引脚上接收到的数据先移位到接收移位寄存器(RSR1,RSR2),接着复制到接收缓冲寄存器(RBR1,RBR2)中,RBR再将数据复制到数据接收寄存器(DRR1,DRR2)中,由CPU或DMA读取数据。这样就可以同时进行内部和外部的数据采集。
由结构原理图可知,发送缓冲寄存器DXR和接收缓冲寄存器DRR通过外设总线直接和DMA总线连接。(外设之中,有ADC、McBSP、ePWM通过DMA总线连接至RAM)

简化之:

这里写图片描述

 注:
 
 1)MCBSP的接收操作是三缓冲(triple buffered)的,而发送操作是双缓冲(double buffered)的。寄存器值的使用取决于串行字长是否符合16bits。
  如果字长为16bits或小于16bits(8bits、12bits),则只须使用一套寄存器(RSR1,RBR1,DRR1,DXR1,XSR1)。
  如果字长大于16bits,则需要使用两套寄存器(RSR1/2,RBR1/2,DRR1/2,DXR1/2,XSR1/2)。

2)数据的压缩和扩展

MCBSP的压缩和扩展硬件可以将数据按照μ-律和A-律格式进行压缩和扩展。其示意图如上:
接收时,8位压缩过的数据被扩展成16位左对齐的形式放在DRR1中,RJUST位被忽略。
  发送时,a.对于使用μ-律压缩和扩展的数据,要保证其在DXR1中进行14位左对齐,如下图:
这里写图片描述

  b.对于使用A-律压缩和扩展的数据,要保证其在DXR1中进行13位左对齐,如下图:
这里写图片描述

三.时钟

两个时钟信号可来自内部或外部。
一般上升沿发送,下降沿接收。高位在前,低位在后。


四.McBSP串口初始化

//以下设置适用于数据回送模式,也即自发自收

void mcbsp_init()
{
/*----------------------------------------
1.使帧同步逻辑、采样率发生器、接收器和发送器处于复位状态,即FRST=GRST=XRST=RRST=0
----------------------------------------*/
   McbspaRegs.SPCR2.bit.FRST=0; 
   McbspaRegs.SPCR2.bit.GRST=0; 
   McbspaRegs.SPCR2.bit.XRST=0; 
   McbspaRegs.SPCR1.bit.RRST=0; 
/*----------------------------------------
2. 控制寄存器配置
  a.串行端口控制寄存器SPCR1&SPCR2
  b.接收控制寄存器RCR1&RCR2
  c.发送控制寄存器XCR1&XCR2
  d.采样率发生寄存器SRGR1&SRGR2:采样率发生寄存器用于产生时钟信号CLKG和帧同步信号FSG
  1).SRGR2.bit.CLKSM+PCR.bit.SCLKME共同确定输入时钟源,本次为01内部输入时钟LSPCLK
  2). f clkg=f 输入时钟/(SRGR1.bit.CLKGDV+1)
FSG周期:每(SRGR2.bit.FPER+1 )个CLKG周期 输出一个FSG脉冲
----------------------------------------*/
   McbspaRegs.SPCR2.all=0x0000; 
   McbspaRegs.SPCR1.all=0x8000; //DLB=1,表示数字回环测试
   McbspaRegs.RCR2.all=0x0001;  
   McbspaRegs.RCR1.all=0x0;
   McbspaRegs.XCR2.all=0x0001;  
   McbspaRegs.XCR1.all=0x0;    //收发都是单向帧,每帧1个字,8位字长,不压扩,1位数据延迟

   McbspaRegs.SRGR2.all=0x3140;
   McbspaRegs.SRGR1.all=0x010f;

   McbspaRegs.MCR2.all=0x0;
   McbspaRegs.MCR1.all=0x0;
   McbspaRegs.PCR.all=0x0A00;//由采样率发生器提供发送时钟和发送帧同步,照样上面。另外后4位对极性进行了配置

/*----------------------------------------- 
 添注:采用中断时,SPCR1.bit.RINTM或者SPCR2.bit.XINTM+MFFINT.bit.RINT(XINT)要设置好,进入中断后读DRR或写DXR
-----------------------------------------*/

   McbspaRegs.MFFINT.bit.XINT = 1; 
   McbspaRegs.MFFINT.bit.RINT = 1;

/*----------------------------------------
3.  等待2个时钟周期及以上,保证内部的同步
    a.设置GRST=1,采样率发生器工作
    等待2个时钟周期及以上,保证内部的同步
    b.设置RRST=XRST=1,允许发送和接收数据
    c.若使用内部帧同步逻辑,则需将FRST=1
----------------------------------------*/

   //省略delay_loop();                   
   // Wait at least 2 SRG clock cycles

   McbspaRegs.SPCR2.bit.GRST=1;   

   //省略delay_loop();                   
   // Wait at least 2 SRG clock cycles


   McbspaRegs.SPCR2.bit.XRST=1;
   McbspaRegs.SPCR1.bit.RRST=1;         
   McbspaRegs.SPCR2.bit.FRST=1;         
}
  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值