Да документацию я очень внимательно изучил. И сложилось такое понимание...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено JTAG 25 июня 2003 г. 14:32
В ответ на: Все подробно описано в документации. отправлено Oldring 25 июня 2003 г. 13:27


Понял следующие в регистры AIC_SVR0-AIC_SVR31 я загружаю адреса соответствующих обработчиков прерывания например так:

Обработчик
__irq __arm void irq0_func(void) // функция обработчика прерывания
{
int temp;
temp= AIC_IVR; //При входе в прерывания этот регистр должен быть считан
………………………………..//Здесь что нибудь делаем
………………………………
AIC_EOICR =0; // После возникновения прерывания это регистр должен быть записан
}

Главная программа

void main (void)
{
Инициализируем прерывание пины, регистры
AIC_SVR16=& irq0_func(void) // В регистр IRQ0 записываем адрес нашего обработчика прерывания.
Enable_interrupt (); // Разрешаем внешние прерывания путем обнуления битов 6,7 в регистре CPSR
}

Это вот пример программы
Как я понял это все работает

При возникновении прерывания из регистра соответствующего этому прерыванию (у меня AIC_SVR16 ) в котором содержится адрес обработчика прерывания происходит перепись в регистр AIC_IVR . Программный счетчик загружается адресом обработчика прерывания находящимся в регистре AIC_IVR . А старое содержимое программного счетчика сохраняется по адресу 0x18. После отработки программы обработчика прерывания значение программного счетчика извлекается из адреса 0x18. Я правильно понял или нет ? Мне не совсем понятно роль адреса 0x18


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru