15603|14

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何清除接受FIFO中的数据 [复制链接]

最近在F28035最小系统板子上开发一个DA卡系统,一块板子发送数据,另一块板子接收数据,需要通过发送和接收FIFO收发数据,接受和发送FIFO都能存放4个字节的数据,所以我的设计的是接收FIFO每接收到4个字节数据就产生一个接收中断读取FIFO中的数据。但是这样的话会有缺陷,如果发送数据和接收数据都在不间断进行,数据收发都不会产生错误,如果中断,比如信号传输线断开又连接上,这时候数据接收就会错误,我的解决方法是每当发送一个数据块(4个字节)时,就对接收FIFO进行清空,这样就不会因数据接收错位而错误接收数据了问题出来了,如何有效的清空FIFO??有大侠懂不,望不吝赐教

最新回复

Sci*Regs.SCIFFRX.bit.RXFIFORESET=0; Sci*Regs.SCIFFRX.bit.RXFIFORESET=1; 这两句是可以使用的,但记得不能在SCI中断里面调用。  详情 回复 发表于 2017-3-23 14:24
点赞 关注
 

回复
举报

172

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
队头和队尾指针重合

点评

FIFO是一个寄存器,没有什么指针啊:Sad:  详情 回复 发表于 2013-9-11 13:26
一语中的  详情 回复 发表于 2013-9-11 11:07
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发walkwk 的帖子

一语中的
 
 
 

回复

5979

帖子

8

TA的资源

版主

4
 
哈哈
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复 沙发walkwk 的帖子

FIFO是一个寄存器,没有什么指针啊
 
 
 

回复

581

帖子

0

TA的资源

五彩晶圆(初级)

6
 
不管内容,只动指针。
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

7
 
“对接收FIFO清空”,手册上明确说明使用读的办法。

占了几个FIFO也可以知道。

点评

大神  详情 回复 发表于 2014-10-8 23:51
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

8
 
楼主应该使用全双工功能,我觉得这样更好,

不管你指的是SCI还是SPI,都可以这样使用。
 
 
 

回复

47

帖子

2

TA的资源

一粒金砂(中级)

9
 
dontium 发表于 2013-9-12 18:19
“对接收FIFO清空”,手册上明确说明使用读的办法。

占了几个FIFO也可以知道。

大神

点评

ScibRegs.SCIFFRX.bit.RXFIFORESET=0; //复位FIFO指针为0 ScibRegs.SCIFFRX.bit.RXFIFORESET=1; //重新启用FIFO 这样岂不是更简单?  详情 回复 发表于 2014-10-9 00:59
 
 
 

回复

47

帖子

2

TA的资源

一粒金砂(中级)

10
 

ScibRegs.SCIFFRX.bit.RXFIFORESET=0;       //复位FIFO指针为0
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;       //重新启用FIFO

这样岂不是更简单?


点评

这样是简单,但还要重新设置FIFO。 实际上,楼主在和大家玩“脑筋急转弯”,我也被迷糊了! “我的解决方法是每当发送一个数据块(4个字节)时,就对接收FIFO进行清空,这样就不会因数据接收错位而错误接收数  详情 回复 发表于 2014-10-9 10:47
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

11
 
xklzw 发表于 2014-10-9 00:59
ScibRegs.SCIFFRX.bit.RXFIFORESET=0;       //复位FIFO指针为0
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;   ...

这样是简单,但还要重新设置FIFO。

实际上,楼主在和大家玩“脑筋急转弯”,我也被迷糊了!

“我的解决方法是每当发送一个数据块(4个字节)时,就对接收FIFO进行清空,这样就不会因数据接收错位而错误接收数据了,问题出来了,如何有效的清空FIFO??”

如果FIFO里面的数据不使用,还清它干吗?
如果FIFO的数据是有用,那么必须要读它,一读不就自动清除了吗?
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

12
 
还有人吗??????
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

13
 
dontium 发表于 2014-10-9 10:47
这样是简单,但还要重新设置FIFO。

实际上,楼主在和大家玩“脑筋急转弯”,我也被迷糊了!

“我的解决方法是每当发送一个数据块(4个字节)时,就对接收FIFO进行清空,这样就不会因数据接收错位而错误接收数据了,问题出来了,如何有效的清空FIFO??”

如果FIFO里面的数据不使用,还清它干吗?
如果FIFO的数据是有用,那么必须要读它,一读不就自动清除了吗?

我的问题跟楼主差不多,用的28335.
interrupt void scicRxFifoIsr(void)
{
    Uint16 i;
        for(i=0;i<16;i++)
        {
           rdataC=ScicRegs.SCIRXBUF.all;         // Read data
        }
        if(rdataC[0]==0xEB&&rdataC[1]==0x90&&rdataC[2]==0xEB&&rdataC[3]==0x90)
        {  
     if(rdataC[4]==0x00&&rdataC[5]==0x06)
     {Tyd=1;}
     else if(rdataC[4]==0x01&&rdataC[5]==0x03)
     {
       Tyd=2;
     }
     else if(rdataC[4]==0x01&&rdataC[5]==0x04)
     {Tyd=3;}
    }
    else
    {
            ScicRegs.SCIFFRX.bit.RXFIFORESET=0;
            ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
    }
   
        ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1;  // Clear Overflow flag
        ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;         // Clear Interrupt flag
        PieCtrlRegs.PIEACK.all|=0x80;          // Issue PIE ack
}
问题是这样的,我接收中断使用的16级FIFO。上位机给我传16帧(EB90EB9000060102030405060708090A)的数据正好进一次中断,然后判断前四个是不是EB90EB90以及功能码。但是这种方法容易出现的问题是假如第一位错误比如先发过来一个01,然后才是需要的16帧数据,这样当FIFO接收到09时就会进入中断,读过FIFO数据后 FIFO清0,然后0A就留在了FIFO第一位,然后等满16级再次进入中断,这样就会出现一直错一位数据。所以我想当判断接收错误时,把FIFO清0,这样下次再接收EB90EB9000060102030405060708090A时就不会错位了。但是发现清不了还是一直错位

点评

对于这种情况,应该使用软件重新整理数据,不能从FIFO上考虑,因为如果让FIFO完成,需要设置,模块的设置改来改去,不是个好办法。  详情 回复 发表于 2015-6-13 10:08
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

14
 
DSPscififo 发表于 2015-6-12 16:35
我的问题跟楼主差不多,用的28335.
interrupt void scicRxFifoIsr(void)
{
    Uint16 i;
        for(i=0;i

对于这种情况,应该使用软件重新整理数据,不能从FIFO上考虑,因为如果让FIFO完成,需要设置,模块的设置改来改去,不是个好办法。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
Sci*Regs.SCIFFRX.bit.RXFIFORESET=0;
Sci*Regs.SCIFFRX.bit.RXFIFORESET=1;
这两句是可以使用的,但记得不能在SCI中断里面调用。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表