一些有趣的事情要注意,我不完全理解。我的 UART 初始化为 9600 波特。我通过逻辑分析仪查看了线上的 TX,我发送的字节延迟最小。它是每字节 36µs,这是预期的。
现在,如果我用不同的波特率初始化 UART,比如 115,200,发送的每个字节之间的延迟会显着增加。它跳到每字节 125µs。
这导致了一个问题,因为我必须在某个时候提高我的波特率,但我的响应有时间限制。
字节之间的延迟不应该减少吗,因为它应该以相同的频率发送更多位?
此阻塞方法用于写入 UART。
static inline void uart2_putchar(uint8_t data)
{
// Disable interrupts to get exclusive access to ring_buffer_out.
cli();
if (ring_buffer_is_empty(&ring_buffer_out2)) {
// First data in buffer, enable data ready interrupt
UCSR2B |= (1 << UDRIE2);
}
// Put data in buffer
ring_buffer_put(&ring_buffer_out2, data);
// Re-enable interrupts
sei();
}
这是基于中断触发的。
ISR(USART2_UDRE_vect)
{
// if there is data in the ring buffer, fetch it and send it
if (!ring_buffer_is_empty(&ring_buffer_out2)) {
UDR2 = ring_buffer_get(&ring_buffer_out2);
}
else {
// no more data to send, turn off data ready interrupt
UCSR2B &= ~(1 << UDRIE2);
}
}
时序图如下:
~9600 波特率 --
~115,200 波特率 --