Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по прерываниям
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
coolibin
Как сделать так, чтобы два прерывания, например, от таймера и от ножки, не прерывали друг друга? достаточно их сделать с одним приоритетом? И как из текущего прерывания очистить прерывания которые сейчас в очереди? достаточно почистить флаги, например:

Код
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_PIOA);


?
aaarrr
Цитата(coolibin @ Jun 8 2009, 12:36) *
Как сделать так, чтобы два прерывания, например, от таймера и от ножки, не прерывали друг друга? достаточно их сделать с одним приоритетом?

Или не делать вложенные прерывания, или сделать с одинаковым приоритетом.

Цитата(coolibin @ Jun 8 2009, 12:36) *
И как из текущего прерывания очистить прерывания которые сейчас в очереди? достаточно почистить флаги, например:
Код
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_PIOA);


?

Это вариант сработает только если прерывание настроено на работу по фронту, в противном случае снять можно только непосредственно у источника:
Код
AT91C_BASE_SYS->PIOA_ISR;
coolibin
А можно дурацкий вопрос? А что такое AT91C_BASE_SYS->PIOA_ISR? Это не одно и тоже что AT91C_BASE_PIOA->PIO_ISR? А то я что то в документации не могу найти((
aaarrr
Да, это одно и то же.
coolibin
А нужно еще и AT91C_BASE_AIC->AIC_ICCR чистить? Или он чистится автоматически, если я чищу AT91C_BASE_SYS->PIOA_ISR? или он вообще не юзается если прерывание по уровню?
aaarrr
Нет, не нужно - ISCR и ICCR задействованы только если прерывание работает по фронту.
В мануале же все написано.
coolibin
Благодарю!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.