обработчик прерываний или подпрограмма обработки прерываний (ISR) - это просто функция / подпрограмма, которая вызывается аппаратными средствами каждый раз, когда происходит прерывание, в вашем случае, когда UART TXFIFO опускается ниже определенной точки, UART установит соответствующий флаг прерывания, который затем говорит контроллеру прерываний «остановить» ЦП и затем вызвать соответствующий ISR.Таким образом, общий процесс будет состоять в том, чтобы создать обработчик прерываний как функцию, в которой вы снова заполняете FIFO, регистрируете функцию как подпрограмму обработки прерываний, затем включаете прерывание и запускаете TX.
К счастью, в случае ESP32 Espressif настроил несколько удобных функций в своем SDK, чтобы помочь с обработкой прерываний, см. этот раздел в руководстве по программированию .TL; DR заключается в том, что вам нужно настроить прерывание путем вызова uart_intr_config()
, зарегистрировать свой собственный обработчик (просто любая функция C будет делать) с помощью uart_isr_register
, а затем активировать прерывание с помощью uart_enable_tx_intr()
.
Отредактировано, чтобы добавить: считали ли вы, что вам не нужно писать собственный ISR для достижения того, что вы хотите?Проверьте uart_write_bytes()
, который копирует данные в промежуточный кольцевой буфер и затем завершает работу, в то время как предоставляемый SDK ISR передает данные в FIFO для вас.