打印
[DSP编程]

28069串口通讯

[复制链接]
1981|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dididi112233|  楼主 | 2020-5-11 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用串口助手与DSP通讯  但是发现没有返回值 接收到的值也不对 这是我的接收发送 希望得到前辈帮助 感谢
USART_RX_STA(串口接收中断标志位---16位)
__interrupt void sciaRxFifoIsr(void)
/*
    bit15:帧尾2--0xfd--USART_RX_STA & 0x8000--也是接收完成标志-

    bit14: 帧头---0xfd--USART_RX_STA & 0x4000

    bit13: 帧尾1--0xfc--USART_RX_STA & 0x2000

    bit[12:0]: 存储一次接收的数据字节数,其最大为0x1fff



            串口通信协议:数据帧格式为:帧头+字符串数据+帧尾1+帧尾2

                    本程序中实际格式为:0xfd+..........+0xfc +0xfd
*/

    Uint8 Res;



    Res = SciaRegs.SCIRXBUF.all; //读取接收到的数据

    if(USART_RX_STA & 0x8000)                         //判断是否接收到 帧尾2,即是否接收完成一帧数据

    {                                                 //如果接收 帧尾2,在USART_RX_STA标志位没有清零时,不执行任何操作

    }

    else                                              //如果没有接收 帧尾2,则执行下面程序

    {

        if(USART_RX_STA & 0x2000)                     //判断是否接收到 帧尾1

        {

          if(Res == 0xfd)                             //判断本次接收字符是否为  帧尾2--0x8000

          {

             USART_RX_STA |= 0x8000;                   //如果本次接收数据为 帧尾2,则表明本次数据接收完成,置位接收完成标志位

             USART_RX_BUF[USART_RX_STA & 0x1fff] = '\0'; //并在接收到的字符数组后面添加字符串结束标志,即把接收到的所有字符组成一个字符串

          }

          else

          {

             USART_RX_STA = 0;                          //在接收到帧尾1后,没有接收到帧尾2,则表明数据接收出错,清除标志位,重新接收串口中断数据

          }

        }

        else

        {

          if(USART_RX_STA & 0x4000)                    //在没有接收到帧尾1前提下,通过标志位判断是否接收到帧头

          {

            if(Res == 0xfc)                            //如果接收到帧头,则在判断本次接收到的数据是否为 帧尾1--0x2000

            {

                USART_RX_STA |= 0x2000;                  //如果本次接收到的字节数据是 帧尾1,则置位标志位

            }

            else                                       //如果接收到帧头,而本次接收的字节数据不是 帧尾1,那么就是我们要的数据了

            {

                USART_RX_BUF[USART_RX_STA & 0x1fff] = Res;//将数据存储在缓存中

                USART_RX_STA++;                         //利用标志位低13位存储缓存的数据字节数

            }

          }

          else

          {

            if(Res == 0xfd)                            //如果之前没有接收到帧头,则判断本次接收到的字节数据是否为帧头 --0x4000

            {

                USART_RX_STA |= 0x4000;                  //如果是帧头,则置位标志位

            }

            else

            {

                USART_RX_STA = 0;                        //否则,清除标志位,重新接收

            }

          }

        }

    }
__interrupt void sciaTxFifoIsr(void)

{

    Uint16 i;

    for(i=0; i< 1; i++)

    {

        SciaRegs.SCITXBUF=sdataA[i];     // Send data

    }



    for(i=0; i< 1; i++)                 //Increment send data for next cycle

    {

        sdataA[i] = (sdataA[i]+1) & 0x00FF;

    }



    //SciaRegs.SCIFFTX.bit.TXFFIENA = 0;



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

    PieCtrlRegs.PIEACK.all|=0x100;      // Issue PIE ACK

}

使用特权

评论回复

相关帖子

沙发
dididi112233|  楼主 | 2020-5-11 10:41 | 只看该作者
DSP初学者 希望得到大家的指点  谢谢了

使用特权

评论回复
板凳
dididi112233|  楼主 | 2020-5-12 12:03 | 只看该作者
有人吗 初学DSP 感觉很难 求指点

使用特权

评论回复
地板
yklstudent| | 2020-5-13 08:38 | 只看该作者
先能进中断接收数据再说

使用特权

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

本版积分规则

3

主题

9

帖子

0

粉丝