-
这么强悍的m4资料 谢谢分享
-
什么东西看看 谢谢分享
-
学习一下,谢谢楼主的分享。
-
你把你的工程打包发到39248122@qq.com,我帮你测试。
-
被你搞晕了,rs485通讯是半双工的,收发不同同时进行,怎么自己发出去的数据又被自己接收呢。我觉的你是不是引用错了接收和发送fifo或者是你自己开辟的缓冲区数据。
-
因为有fifo呀,如果你设定接收fifo中断深度6/8,那么当发生接收中断时接收fifo中就有12个字节在fifo中。
例如:
void
UART0IntHandler(void)
{
unsigned long ulStatus;
//读中断源
ulStatus = UARTIntStatus(UART0_BASE, true);
//清除中断源
UARTIntClear(UART0_BASE, ulStatus);
//判断中断源
if(ulStatus & (UART_INT_RX | UART_INT_RT))
{
//如果是接收或者超时中断,读取fifo直到fifo空
while(UARTCharsAvail(UART0_BASE))
{
g_pucUISerialReceive[g_ulUISerialReceiveWrite] =
UARTCharGet(UART0_BASE);
}
}
-
恶劣的环境迫使不得不做,如果要实现这么多项目的可靠检测,预算的成本我觉得放10倍都不一定够。
-
原帖由 benbending 于 2013-2-16 10:51 发表 [/url]
很赞同楼主想法,但是有些疑问,请大侠指教。:)
[url=https://bbs.eeworld.com.cn/thread-366011-1-1.html]https://bbs.eeworld.com.cn/thread-366011-1-1.html
回10楼:
接收中断意思是接收fifo满中断,如果设置6/8即12个字节,意思是当fifo中有正确的12字节时将产生接收中断。如果不配置默认是16个字节,一般设置12字节中断这样的好处是当有更高优先级中断或者更高优先级的任务发生后并处理后,接收fifo不至于超出16个字节溢出而丢失接收数据。如果不启用超时中断无法判断一帧数据的结束。
例如19个字节的一帧数据从主机发送过来,接收端配置为接收fifo中断6/8启用超时中断,当接收了12个字节到从机的接收fifo中后只触发接收中断,在中断程序中用while循环把接收fifo的数据全部读出,放入协议处理程序中开辟的缓冲区中,随即后面7个字节正确进入接收fifo中后,此时只触发超时中断,因为主机再无其他数据发出并且也未到达12个字节fifo满的接收中断。以上是一个帧接收的简单分析,本人才疏学浅难免有误,请大虾予以指正。
编辑修改错别字
[ 本帖最后由 mxfahm 于 2013-2-16 22:36 编辑 ]
-
原帖由 暖暖美少 于 2011-12-14 15:44 发表 [url=https://bbs.eeworld.com.cn/redirect.php?goto=findpost&pid=1231175&ptid=309157][/url]
朋友在么?遇到一个问题,帮帮忙么?
我使用UART时,设置了FIFO接收中断深度,同时使能接收超时中断。
请问,这个接收超时中断是什么情况下触发的?手册上有这样一句话,“当接收FIFO不为空时接收超时中断有效 ...
当至少接收到一个或多个字节压入接收fifo中后,在正确接收的最后一个字节后,有超过3个字节的时间但没有接收到任何信息,即为超时中断,简单的将超时中断就是一个帧结束的标志。如果做modbus主机,当发送完后马上转为接收状态,启动等待计时器,在等地一段时间后(从机最大相应时间,这个参数可设置)认为从机无响应,如果在规定的时间内有接收到正确的信息,则清计时器,处理通讯内容。其实有了超时中断大可不必再设置一个用于modbus协议里德那个3.5t的超时定时器。如果在没有从机的情况下仍然会进入超时中断,有可能是接收引脚有一个下拉脉冲,让接收器误认为有一个ox00进入接收fifo,但后面又无其他数据所以就进入了超时中断。以上是个人己见,本人才疏学浅难免有误,请大虾予以指正。
-
什么样的好东西这么神秘。。。
-
同求团购.
-
支持一下。。。。
-
瞧瞧看。。。。。。。。。。
-
瞧瞧看。。。。。。。。。。
-
好文章!!!
-
我也收到开发板了,支持楼主的想法,如果能加入网络播放就更好了。
-
一般modbus从设备手册里都有一个响应最大时间'一般都在100ms左右'发送设备也有一个设定的等待时间'plc编程一般默认2s'我的观点是只要超时就切换接收'如果没有接受到'2s后才能转回发送
-
这样做效率不高'打开发送fifo空中断'把中断条件设为一个字节'在中断再查询最后一个字节是否d发送完毕'这样主程序可以有更多时间处理别的任务'
-
rs485置发送后,只要发送fifo未满就往里面丢发送数据直至全部放入发送fifo,发送fifo发完后置接收并开超时定时器,如果定时器超时(一般为2秒)则从设备无响应、如果接收fifo满中断,读出fifo至开辟的缓冲区,如果fifo超时中断说明modbus包接收结束,处理缓冲区的数据,按modbus协议响应命令、错误处理或者丢弃数据包。
-
真是个好消息。等了很久终于可以出手了。