您好!我现在使用F2812的Mcbsp串口通信,遇到问题是发送数据时,偶尔会出现数据重复发送现象。如:
0x005A27F6 ,
0x006E6B11 ,
0x007B27D0 ,
0x007F7FFF ,
0x007F7FFF ,
0x007B27D 第四个数据发送了两次,我用自发自接功能检查也是如此,请问一般出现这种问题,有什么建议方法吗?谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!我现在使用F2812的Mcbsp串口通信,遇到问题是发送数据时,偶尔会出现数据重复发送现象。如:
0x005A27F6 ,
0x006E6B11 ,
0x007B27D0 ,
0x007F7FFF ,
0x007F7FFF ,
0x007B27D 第四个数据发送了两次,我用自发自接功能检查也是如此,请问一般出现这种问题,有什么建议方法吗?谢谢!
给您贴一个MCBSP初始化的代码供参考:
/*********************************MCBSP初始化******************************************/
/************************函数功能描述************************/
/*********每6个字产生一次Mcbsp接收中断,每个字为16位*********/
/******发送(接收)帧同步,发送(接收)时钟同步均由外部提供******/
void mcbsp_init()
{
/*************** MCBSP 复位*********************/
McbspaRegs.SPCR2.bit.FRST=0; // 帧同步产生器复位
McbspaRegs.SPCR2.bit.GRST=0; // 采样速率生成器复位
McbspaRegs.SPCR2.bit.XRST=0; // 发送器复位
McbspaRegs.SPCR1.bit.RRST=0; // 接收器复位
/***************McBSP 寄存器 初始化************/
McbspaRegs.SPCR2.all=0x0100; // 串口控制寄存器2
//(9)FREE=0 自由运行模式是禁止的
//(8)SOFT=1 SOFT模式是使能的
//(7)FRST=0
//(6)GRST=0 采样速率生成器是复位的
//(5.4)XINTM=00 (X)INT由(X)RDY驱动
//(3)XSYNCERR=0 没有发送同步错误
//(2)XEMPTY=0 发送移位寄存器(XSR)为空 只读
//(1)XREDY=0 发送器没有准备好 只读
//(0)XRST=0 发送器是复位的
McbspaRegs.SPCR1.all=0x0000; // 串口控制寄存器1
//(15)DLB=0 数字回路自测试模式 禁用
//(1413)RJUST=00 DRR采用右对齐模式,用0填充MSB
//(1211)CLKSTP=00 禁止时钟停止模式,工作在非SPI模式
//(10~8)保留
//(7)DXENA=0 DX使能器关闭
//(6)ABIS=0 禁止A-bis模式
//(5.4)RINTM=0 (R)INT由(R)RDY驱动
//(3)RSYNCERR=0 没有接收同步错误
//(2)RFULL=0 接收移位寄存器(RSR) 不是满的 只读
//(1)RRDY=0 接收器没有准备好 只读
//(0)RRST=0 接收器是复位的
McbspaRegs.RCR2.all=0x0001;//接收控制寄存器2
//(15)RPHASE=0 接收相位 单项
//(4~3)RCOMPAND 接收压缩解压模式 不进行压缩解压 从MSB开始发送数据
//??(2)RFIG=0 接收帧忽略 第一个重新发送后的接受帧同步脉冲
//(1.0)RDATDLY=1 接收数据延迟 1位数据延迟
McbspaRegs.RCR1.all=0x0040;//接收控制寄存器1
//(14~8)RFRLEN1=0接收帧长1=0000000 每帧一个字
//(7~5)RWDLEN1=0接收字长1=010 每字16位
McbspaRegs.XCR2.all=0x0001;//发送控制寄存器2
McbspaRegs.XCR1.all=0x0040;//发送控制寄存器1
McbspaRegs.MCR2.all=0x0000;//多通道控制寄存器2
McbspaRegs.MCR1.all=0x0000;//多通道控制寄存器1
/***************帧同步设置*************************/
McbspaRegs.SRGR2.all=0x8000;//采样速率生成器2
//(15)GSYNC=1 采样速率生成器时钟同步
//(13)CLKSM=0 外部CLKR引脚时钟
//(12)FSGM=0 只有当内部提供帧同步信号时有效
//(11~0)FPER=0 由于外部帧提供帧同步信号 FPER的设置对帧周期没有影响
McbspaRegs.SRGR1.all=0x0000;//采样速率生成器1
//(15~8)FWID=0 帧宽度
//(7~0)CLKGDV=0 采样速率生成器时钟分频系数
McbspaRegs.PCR.all=0x0080;//引脚控制寄存器 ok
//(11)FSXM=0(发送帧同步) 外部提供发送帧同步
//(10)FSRM=0(接收帧同步) 外部提供接收帧同步
//(9)CLKXM=0(发送时钟) 外部引脚CLK(R/X)提供
//(8)CLKRM=0(接收时钟) 外部引脚CLK(R/X)提供
//(7)SCLKME=1 外部CLKR引脚时钟
/************MCBSP FIFO 寄存器配置****************/
McbspaRegs.MFFTX.all= 0x4000;//FIFO 发送寄存器 ok
//MFFENA=1 MCBSP FIFO增强功能 使能
//发送FIFO处于复位状态
//TX FIFO中断 禁止
McbspaRegs.MFFRX.all= 0x0026; //FIFO 接收寄存器 ok
//6个字产生一次接收中断 每个字16位
//基于RXFFIVL匹配的RX FIFO的中断使能
//当RXFFST>=RXFFIL=6个字时产生Mcbsp接收中断
//接收FIFO处于 复位状态
McbspaRegs.MFFCT.all= 0x0000;//FIFO 控制寄存器 ok
//只有在SPI模式下才使用该寄存器,在Mcbsp模式下 这些位不起作用
McbspaRegs.MFFINT.all=0x0000;//FIFO 中断寄存器 ok
//只有在非FIFO和A-bis FIFO模式下 才使用该寄存器
McbspaRegs.MFFST.all=0x000;//FIFO 状态寄存器 ok
//FSR标志:检测到接收帧同步脉冲=1
//FSX标志:检测到发送帧同步脉冲=1
/************** Enable FIFO**********************/
McbspaRegs.MFFTX.bit.TXFIFO_RESET=1;//发送FIFO 脱离 复位状态 ok
McbspaRegs.MFFRX.bit.RXFIFO_RESET=1;//接收FIFO 脱离 复位状态 ok
/************* Enable Sample rate generator******/
McbspaRegs.SPCR2.bit.GRST=1;
// delay_loop(1000000);
DELAY_US(1000);
}