是这样的,我发现我的2812这块板子上的SCI有问题,不知道你们遇到过吗?
1.我用的是SCI--FIFO;我接受9个char;发送不确定16char吧;我把接受总断打开了,如果接受9个就中断,发送总断关闭了。
2.我用的是485通信,因为除了用到RX\TX 外,还会用到一个IO引脚来控制485收发的。但是我发现如果我打开接受中断和发送中断,只能进行一次,即:接受中断---》发送中断,然后就再也进不去了,我怀疑是控制485收发IO的问题,转换不过来,(在发现过程中我还以为是清除FIFO,是FIFO复位的寄存器没有清位(ScibRegs.SCIFFRX.bit.RXFIFORESET),还有就是FIFO重启(ScibRegs.SCIFFTX.bit.SCIRST)有问题,这两个我都试了还是不好使),所以我选择了在接受中断中放入“发送”,这样我试了,还是有问题,就是接受一两次就不接受了,我怀疑是FIFO直针接受完了,没有归为,我就:
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
delay_int();
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
但是还是那样,我又在每次接收发送后加入了:
ScibRegs.SCIFFTX.bit.SCIRST=0;
delay_int();
ScibRegs.SCIFFTX.bit.SCIRST=1;
这样才无线的进入接受中断,也没有遇到我上面所谓的收发IO的影响。
但是我看了一下程序,我就想问,非得加入:
ScibRegs.SCIFFTX.bit.SCIRST=0;
delay_int();
ScibRegs.SCIFFTX.bit.SCIRST=1;
不可吗?这样不会消耗时间吗?我怎么感觉会因为重新启动耗费很多时间呢?
我感觉只要把RXFIFORESET这个寄存器复位一下就可以了,为什么还不好使,费用重新启动呢???
3.我用的传输协议是modbus的,可以用中断进行握手吗???我怎么感觉时间上不够呢?(上位机接受到数据后在10ns(我猜的,我感觉就那么短的时间)之内我把接受的数据处理好在发出去就可以握手了,但是我明显感觉我写的程序根本达不到标准,我那一个延迟都够了)。
在别人用28335就可以达到握手,我记得我用28335的时候也没有那么麻烦啊?怎么。。。。是我弄错了,还是2812就得这么处理呢?
对于我们这台系统来说,我的要求就是把cpld发上来的数据通过modbus给上位机,采样也就10K左右,我不明白为什么上位机工程师非要让我把那个程序弄成握手的,我就想问,如果我握了手,一直做这个动作吗??我的dsp采样的工作,计算的工作都不做了吗?我现在工作在上位机一直是握手失败后100ms的重新尝试握手的过程中(也就是我只能每个100ms收发一次,我让上位机工程师把这个时间调小点,1ms或者更小,他说这个是报错重新握手的时间,不能用这样来实现正常的工作,还得在我这边改,我只能保持沉默,我真的不想改了)
求帮助 |