打印

28033的SCI问题

[复制链接]
4114|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在28335上,通信正常,但是移植到28035上,发送8个字节,只能收到5个字节[img]file:///C:/Users/HuJP/AppData/Roaming/Tencent/Users/1506699531/QQ/WinTemp/RichOle/CEX9A40W$NGY~6[(A%7D8%7BU0M.jpg[/img] ,基本配置如下:static void UARTConfigSet(Uint16 BaudRate,Uint8 CONFIG)
{

/* Initialize SCI-C: */

    /*SCIC reset */

SciaRegs.SCICTL1.bit.SWRESET = 0;

SciaRegs.SCICTL1.bit.SWRESET = 1;

   SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                  // No parity,8 char bits,
                                  // async mode, idle-line protocol
   SciaRegs.SCIHBAUD = 0x0000;
   SciaRegs.SCILBAUD= SCI_PRD;          //设置波特率为38400, 晶振为60MHZ,理论应该为2F


/*FIFO enable */

SciaRegs.SCIFFTX.bit.SCIFFENA = 1; //使能FIFO增强功能  使能SCI FIFO的功能
    SciaRegs.SCIFFTX.bit.TXFFIL = 0;  //发送中断级别为0,也就是当发送FIFO为空时发生中

SciaRegs.SCIFFRX.bit.RXFFIL = 1;   //FIFO接收中断级别为1.也就是说当接收FIFO中有1个字符时发生中断


/*FIFO interrup enable */

SciaRegs.SCIFFRX.bit.RXFFIENA = 1;     ////使能FIFO接收中断

SciaRegs.SCICTL1.bit.RXERRINTENA = 1;  //

SciaRegs.SCIFFTX.bit.TXFFIENA = 0;  ////没有产生接收中断

    SciaRegs.SCICTL1.bit.RXENA = 1; /*enable RX */
    SciaRegs.SCICTL1.bit.TXENA = 1; /*enable TX */
}


interrupt void scicTxFifoIsr(void)
{

( void )xMBRTUTransmitFSM(); //发送状态机,实现数据发送


SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;  // Clear Interrupt flag

PieCtrlRegs.PIEACK.all|=PIEACK_GROUP9;      // Issue PIE ACK

}

在发送状态机中,把8个字节依次放到了SciaRegs.SCITXBUF 寄存器中,但是接受的时候确实5个字节,哪位可以帮忙看下,谢谢

相关帖子

沙发
五谷道场| | 2012-11-21 11:31 | 只看该作者
第2、3、4三个字节丢了,多发几个字节试试,看看是否就丢这三个字节呢?

使用特权

评论回复
板凳
hujinping99|  楼主 | 2012-11-21 11:51 | 只看该作者
2# 五谷道场 是的,每次都是这几个字节丢失

使用特权

评论回复
地板
airwill| | 2012-11-22 16:45 | 只看该作者
应该是 FIFO 处理的问题.

使用特权

评论回复
5
hujinping99|  楼主 | 2012-11-22 18:20 | 只看该作者
问题找到了,在28335里面,没有第三条语句,但是接收发送都是正确的,在28035中,没有第三条语句就会漏掉数据xMBPortSerialPutByte( ( Uint8 )*pucSndBufferCur );

pucSndBufferCur++;  /* next byte in sendbuffer. */


while(SciaRegs.SCICTL2.bit.TXRDY != 1) {}

使用特权

评论回复
6
五谷道场| | 2012-11-23 09:47 | 只看该作者
问题找到了,在28335里面,没有第三条语句,但是接收发送都是正确的,在28035中,没有第三条语句就会漏掉数据xMBPortSerialPutByte( ( Uint8 )*pucSndBufferCur );

pucSndBufferCur++;  /* next byte in sendbuffer ...
hujinping99 发表于 2012-11-22 18:20
为什么会这样,28335没有这几句也可以,28035就不行呢?

使用特权

评论回复
7
z_jzhao| | 2012-11-30 16:28 | 只看该作者
因为28035的FIFO是16级缓存,而28035的FIFO是4级缓存

可以把你的例程发一份给我吗?谢谢!
z-jzhao@163.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

17

帖子

1

粉丝