打个比方,如果某个设备往你的设备发送"abcd","12345657",发送的设备基本可以保证每个串是连续发送的(前一个字节结束位后马上下一个字节开始位),串之间有延迟比如20ms为例:
空闲帧标志被清除后,在接收数据"d"完成后再一个字符的时间后,置位,中断(标志要被清除,否则持续进来),此后IDLEIE将不再产生,直到下一个字符串的“7”完成后的再下一个字符的时间后,再次置位请求中断。所以用这个IDLEIE来结束DMA方式的接收,是合适的。唯一一个不合适的地方是:如果你发送一个字符串后,将DMA设置好接收传输方式,然后:对方没响应,你一个字符也收不到,这时候,IDLEIE是不会来的,必须有个总超时检测来结束DMA接收方式:因为IDLEIE中断必须要有字符串收到,然后有一个字符的时间没收下一个字符的起始位,才会发生。
另外,1个字符间隔的空闲就结束接收:是默认任何对方发送字节的间隔不大于1个字符间隔,是不符合Modbus-RTU协议的,RTU协议是3.5个字符时间,如果收到"a"后,停了2个字符时间,又收到"b",Modbus-RTU还是认为ab是同一帧的连续字符。
|