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 Studio 添加自己的库

Atmel 工作室无法将 char 数组作为字符串发送

我可以在Atmel SAM E70处理器中使用“指令”TCM来获取数据吗?

使用 printf 的 atmel 传感器

Eclipse J-Link ATMEL ARM ATSAME70Q21。当代码从不同于 0x00400000 的地址开始时进行调试

Atmel 微控制器:UBRR0H 和 UBRRnH 的区别