Перейти к содержанию
    

1 обработчик на 2 прерывания

В моей программе возникла необходимость на 2 прерывания сделать 1 обработчик. На sport и gpio. Не подскажите правильно ли я их разрулил?

EX_INTERRUPT_HANDLER(Sport0S_PG_ISR)
{
//считываем регистр возникших прерываний
int prev = *pSIC_ISR;
if (prev&IRQ_DMA4)
  {
  //прозошло прерывание на Sport0 данные переданы

  *pDMA4_IRQ_STATUS = 0x0001;
  }
prev = *pSIC_ISR;
int b = *pPORTGIO;
//if (b & PG2)
if (prev &IRQ_PFA_PORTFG)
  {
  *pPORTGIO_CLEAR = 2;
  //прозошло прерывание на порту G прерывание по фронту

  }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А на какой ivg вы интересно повесили Sport0S_PG_ISR?

Объясните для начала что вам нужно сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на 9. с более высоким приоритетом заняты vdk под сеть и потоки. Это фрагмент реализации протокола обмена данных с ПЛИС. На время передачи данных в ПЛИС я создаю ворота на ножке gpio. ПЛИС со мной общается подобным образом. Так вот мне надо что бы при возникновении одного прерывания я не попал в обработчик другого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так вот мне надо что бы при возникновении одного прерывания я не попал в обработчик другого.
В смысле чтобы не было вложенных прерываний? Так они вроде итак запрещаются по дефолту. Прерывание DMA возникает уже после завершения передачи данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

меня волнует другое что бы когда возникло GPIO я не стал обрабатываь ветку со SPORT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем запрещать? Я сначала одно обработаю затем другое. Меня интересует правильно ли я определяю какое прерывание сейчас активно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совсем не понимаю вашей логики.

Вы хотите каким-то образом затолкать в один обработчик прерывания два события. Зачем это нужино и как это сделать понятия не имею. Одно дело когда для таймеров один обработчик и внутри него нужно определить какой таймер вызвал прерыание. А тут SPORT и GPIO...

Меня интересует правильно ли я определяю какое прерывание сейчас активно?
Сделайте два обработчика, как это обычно и делают. Попали в прерывание от SPORT обслужили, попали в прерывание от GPIO обслужили. Вы хотите сперва объединить а потом выяснять кто вызвал прерывание. Разве это не лишняя работа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так нет у меня больше свободных векторов с высоким приоритетом. Если использовать вектора с низким приоритетом то вызов обработчика происходит с опазданием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам сложно было сразу это написать?

А вам действительно нужно прерывание от GPIO. Почему бы после входа в прерывание просто не считать состояние ноги и исходя из этого передавать данные или нет через SPORT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По прерыванию с GPIO я начинаю принимать даные с ПЛИС. Так настаивает начальство. А по прерыванию SPORT я выставляю флаг конец данных и проверяю как ПЛИС приняла данные и не надо мне их повторить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нафига тогда тут вообще GPIO? Нет данных на SPORT нет прерываний от SPORT. Передали данные через SPORT возникли прерывания. Посмотрите как соединяются аудио кодеки. Ни разу не видел какого-то дополнительного пина на кодеке, через который бы хост сигнализировал что он начнет передачу через SPORT. Это же ни к чему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...