что такое (прерывание) дескриптор? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь определить ISR для прерывания UART на esp32, обычно моя программа должна просто отправить и массив байтов из буфера передачи (tx-FIFO), сделать прерывание, как только буфер передачи пуст и начать другой вывод того же массива из буфера передачи.

В настоящее время я не могу найти, как назначить конкретный ISR (который я затем могу определить сам) прерыванию UART_TX_DONE_INT, которое указывает, что буфер передачи пуст.

Основная причина моего залипания в том, что я не понимаю, что такое дескриптор / обработчик прерываний, как этот парень http://zerothelement21.blogspot.com/2018/05/esp32-uart-interrupt-handling.html описывает это.

Expectation: Я могу определить прерывание, которое срабатывает, когда tx_FIFO пусто, и что я могу сам определить ISR этого прерывания.

1 Ответ

0 голосов
/ 21 апреля 2019

обработчик прерываний или подпрограмма обработки прерываний (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 для вас.

...