Здравствуйте.
Я только начал изучать ARM контроллеры и столкнулся с проблемой - не работают прерывания.
Код взят из примеров с одного из сайтов. Я его полностью перечитал - вроде все нормально. Подозреваю что необходимо что-то настроить в самой среде. Работаю в uVision3.
Код
#include <LPC213x.h>
void IRQ_Handler(void) __irq;
int main(void) {
// Инициализация портов ввода-вывода
PINSEL0=0x0C+0xC0;
IODIR0 =0x00000001;
IOSET0 =0x00000001;
// Инициализация внешнего прерывания
EXTMODE=0x03;
EXTPOLAR=0x03;
// Инициализация контроллера прерывания
VICDefVectAddr = (unsigned)IRQ_Handler;
VICIntEnable=0x04000+0x08000; // Разрешение прерываний
while (1) {};
}
void IRQ_Handler(void) __irq {
if (EXTINT & 0x01) IOCLR0=0x00000001; // Зажечь светодиод
if (EXTINT & 0x02) IOSET0=0x00000001; // Потушить светодиод
EXTINT=0x03; // Сбросить флаги внешних прерываний
VICVectAddr = 0x00000000; // Что эта строчка делает? Подскажите пожалуйста.
}
Когда в Proteus подгружаю hex из архива, то все работает. Сам компилирую - не работает