打印
[DSP编程]

DSP2812串口程序第一个数据总会丢失

[复制链接]
1716|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序代码:
#include "DSP28_Device.h"
unsigned int Sci_Result[100];//用于存放接收到的数据
unsigned int i;
unsigned int Send_Flag; //发送标志位。1:有数据需要发送 0:无数据需要发送
/****************************************************************************
*
*名    称:SciaTx_Ready()
*
*功    能:查询SCICTL2寄存器的TXRDY标志位,来确认发送准备是否就绪
*
*入口参数:无
*
*出口参数:i,即TXRDY的状态
*          1:发送准备已经就绪
*          0:发送准备尚未就绪
*      
****************************************************************************/
int SciaTx_Ready()
{
        unsigned int ans;
        if(SciaRegs.SCICTL2.bit.TXRDY == 1)
        {
                ans = 1;
        }
        else
        {
                ans = 0;
        }
        return ans;
}
/****************************************************************************
*
*名    称:SciaRx_Ready()
*
*功    能:查询SCIRXST寄存器的RXRDY标志位,来确认接收准备是否就绪
*
*入口参数:无
*
*出口参数:i,即RXRDY的状态
*          1:接收准备已经就绪
*          0:接收准备尚未就绪
*      
****************************************************************************/
int SciaRx_Ready()
{
        unsigned int ans;
        if(SciaRegs.SCIRXST.bit.RXRDY == 1)
        {
                ans = 1;
        }
        else
        {
                ans = 0;
        }
        return ans;
}       
void main()
{
        InitSysCtrl();
        DINT;
        IER = 0x0000;
        IFR = 0x0000;

        InitPieCtrl();
        InitPieVectTable();
        InitGpio();
        InitSci();

        for(i=0;i<100;i++)
        {
                Sci_Result = 0; //初始化数据变量
        }
        i = 0;
        Send_Flag = 0;
        while(1)
        {
            /*查询方式实现接收功能*/
        if(SciaRx_Ready() == 1) //接收数据准备已经就绪
                {
                        Sci_Result = SciaRegs.SCIRXBUF.all;  //接收数据
                        Send_Flag = 1;  //标志位置位,有数据等待发送
                }
                /*查询方式实现发送功能*/
                if((SciaTx_Ready() == 1) && (Send_Flag == 1)) //发送准备已经就绪而且有数据需要发送
                {
                        SciaRegs.SCITXBUF = Sci_Result; //发送数据
                        Send_Flag = 0;  //清标志位
                        i++;
                        if(i == 100)
                        {
                                i = 0;
                        }
                }
        }
}
在串口中输入字符串会丢失第一个字符,输入一个字符不显示,但是在代码调试中SciaRegs.SCITXBUF是有数据的,但却没有显示在调试助手上,求解?







相关帖子

沙发
zhangmangui| | 2013-8-26 18:54 | 只看该作者
你不要查看是否准备就绪  就直接收发吧   看看
难道初始状态下SCI是没有准备就绪的?

使用特权

评论回复
板凳
asas1235813|  楼主 | 2013-8-26 20:34 | 只看该作者
zhangmangui 发表于 2013-8-26 18:54
你不要查看是否准备就绪  就直接收发吧   看看
难道初始状态下SCI是没有准备就绪的? ...

调试出来了,是代码写的有错误,后来按你说的方法直接收发发现以前能够收发一串字符串现在一个都收不到了,所以去找了接收的使能,才发现了错误。初始化SCI模板的时候没有使能SCIA模板的接收使能,只是在调试代码之前用串口助手调试过一个正确的能够收发的代码,但坑的地方是换了一个程序没使能居然也能接收到数据。。。。。浪费了好多时间。。。。。。

使用特权

评论回复
地板
zhangmangui| | 2013-8-26 20:42 | 只看该作者
asas1235813 发表于 2013-8-26 20:34
调试出来了,是代码写的有错误,后来按你说的方法直接收发发现以前能够收发一串字符串现在一个都收不到了 ...

积极错误啊   问题解决了就好   

使用特权

评论回复
5
asas1235813|  楼主 | 2013-8-26 20:47 | 只看该作者
zhangmangui 发表于 2013-8-26 20:42
积极错误啊   问题解决了就好

嗯,至少以后再遇到这种问题,会比较快找到错误的地方。也谢谢版主的解答,给了很直接思路:lol

使用特权

评论回复
6
zhangmangui| | 2013-8-26 20:49 | 只看该作者
asas1235813 发表于 2013-8-26 20:47
嗯,至少以后再遇到这种问题,会比较快找到错误的地方。也谢谢版主的解答,给了很直接思路 ...

呵呵  没有帮到你   谈不上谢  深入研究  多多分享  
同时我的送书活动  还望你多多支持
https://bbs.21ic.com/icview-603842-1-1.html

使用特权

评论回复
7
asas1235813|  楼主 | 2013-8-26 20:58 | 只看该作者
zhangmangui 发表于 2013-8-26 20:49
呵呵  没有帮到你   谈不上谢  深入研究  多多分享  
同时我的送书活动  还望你多多支持
http://bbs.21ic. ...

OK,一定顶:lol

使用特权

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

本版积分规则

4

主题

29

帖子

0

粉丝