Atmel SAME70 USART 接收超时未触发
Posted
技术标签:
【中文标题】Atmel SAME70 USART 接收超时未触发【英文标题】:Atmel SAME70 USART Receive Timeout not triggered 【发布时间】:2017-05-04 00:47:02 【问题描述】:谁能帮我让 Atmel ATSAME70 ARM M7 USART 接收超时工作?
我的 USART 以 115200 波特率正确发送和接收。我正在使用 ASF 库,并将 Rx Timeout 设置如下:
#define TBUS_RX_TIMEOUT_MS 200
usart_set_rx_timeout(USART0, UART_BAUDRATE * RX_TIMEOUT_MS / 1000);
我验证了 US_RTOR 寄存器中的 TO 值设置是否正确。
然后我使用这个调用开始超时:
usart_restart_rx_timeout(USART0);
此时串行总线上没有流量,所以我希望设置 TIMEOUT 标志。它永远不会被设置。
还有什么其他要求可以触发超时吗?
【问题讨论】:
是否允许中断?尝试添加usart_enable_interrupt(USART0, US_IER_TIMEOUT);
非常感谢。是的,中断已启用。我将 IER 超时添加到预先存在的掩码中,如下所示:usart_enable_interrupt(TBUS_UART, UART_IER_RXRDY | UART_IER_FRAME | UART_IER_OVRE | US_IER_TIMEOUT);
所有其他中断都被触发,只是没有超时。
【参考方案1】:
计时器问题是由该串行总线具有反转空闲状态引起的。
数据表指出,当“收到字符”事件发生时,计数器会被重置。这不是全貌。我的测试表明,只要电线上有空间电压,计数器就会重置。
有了这个新的认识,定时器工作正常,不能用于检测倒置空闲状态(即非标准)串行总线的超时。
【讨论】:
以上是关于Atmel SAME70 USART 接收超时未触发的主要内容,如果未能解决你的问题,请参考以下文章
我可以在Atmel SAM E70处理器中使用“指令”TCM来获取数据吗?
Eclipse J-Link ATMEL ARM ATSAME70Q21。当代码从不同于 0x00400000 的地址开始时进行调试