Данные UART теряются при работе с внешними прерываниями

Я использую два прерывания в ARM7 lpc2378:

  1. UART1 для получения данных от какого-то внешнего модуля
  2. Внешнее прерывание для чтения АЦП

Во время выполнения External-Interrupt ISR данные от UART1 теряются, поскольку прерывания отключены.

Как я должен собирать или сохранять данные UART1, когда выполняется какой-либо другой ISR?

Какие меры нужно предпринять, чтобы данные с UART1 не терялись?


person Ashish Garag    schedule 17.06.2014    source источник
comment
Включение прерываний в начале ISR звучит как тривиальное решение (хотя обычно оно применяется внутри самого вектора прерывания, непосредственно перед вызовом ISR).   -  person barak manos    schedule 17.06.2014
comment
у твоего уарта есть fifo? Это включено? Вы проводите минимум времени в изоляторе? Почему uart isr отключен?   -  person old_timer    schedule 25.08.2014


Ответы (1)


Я не знаю деталей этого конкретного микроконтроллера, но обычно вы должны проводить в ISR как можно меньше времени: не делать там никакой дорогостоящей обработки. Например, в вашем ISR прочитайте важную информацию, запишите ее в некоторые переменные, оставьте ISR. В основном цикле вашего приложения реагируйте на изменения переменных (есть несколько способов добиться этого, поэтому я описываю это очень общим образом).

person DarkDust    schedule 17.06.2014
comment
Поскольку оба события прерывания являются асинхронными, и потеря данных в UART1 происходит нечасто, важно сохранить данные UART1 без потери в любом случае. В моем проекте Внешнее прерывание ISR занимает максимум около 7,5 мс, и в течение этого периода иногда пропускаются данные, полученные UART1. Теперь, даже если я уменьшу время обработки внешнего прерывания ISR, но будет некоторая вероятность потери данных UART1, которые я не хочу пропустить. Должен быть какой-то способ или техника для обработки таких случаев. - person Ashish Garag; 17.06.2014