Доброго дня!!! Народ, помогите пожалуйста!!!! Несколько дней уже бьюсь с прерываниями - не могу реализовать- программа не переходит на обработчик .... Опишите, если можно , как для малолетнего идиота, пошагово алгоритм действий....
Опишу, что у делаю я. Есть контроллер LPC 2214. Есть источник прерывания ( стек W3150) . Есть IAR 4.40 . Источник висит на линии порта ввода/вывода P0.16. Линия сконфигурирована как вход внешнего прерывания EINT0 ( регистр IO0DIR = 0x000000, т.е нога P0.16 сконфигурирована как вход, регистр PINSEL1 = 0x01, т.е линия сконфигурирована как вход внешнего прерывания..) . Сигналом прерывания является низкий уровень на входе. Соответственно содержимое регистра EXMODE ( выбор типа прерывания - по фронту или по уровню , не менял - там нули..). startup файл добовляю в проект и прописываю следующее ( полную версию startup прилагаю) :
org 0x18
ldr pc, 0xFFFFF030 ; адрес регистра VicVectAddr
В xls файле по поводу стеков следующее ( полную версию прилагаю ) :
//*************************************************************************
// Stack and heap segments.
//*************************************************************************
-Z(DATA)CSTACK+2000=40000000-40003FFF
-Z(DATA)IRQ_STACK+100=40000000-40003FFF
-Z(DATA)HEAP+8000=40000000-40003FFF
-Z(DATA)FIQ_STACK+100=40000000-40003FFF
Функция обработки :
__arm __irq void irq_handler()
{
printf("socket is :");
IR_STATUS[0] = IINCHIP_READ(INT_REG);
IR_STATUS[0] = IINCHIP_READ(INT_STATUS(0));
EXTINT = 0x1;
VICVectAddr = 0; // Clear interrupt in VIC.
// iinchip_irq();
}
Определена до main.
Функция инициализации VIC :
void irq_init ()
{
IO0DIR = 0x00000000;
PINSEL1 = 0x00000001;
VICVectCntl0 = 0x2e;
VICVectAddr0 = (unsigned)&irq_handler;
VICIntSelect = 0x00000000;
VICIntEnable = 0x00004000 ;
}
Вызываю в main() до инициализации самого источника прерываний.
Что самое интересное - в регистрах EXTINT и VIQIRQStatus после возникновения прерываний еденицы, т.е контроллер прерывание ловит, но почему-то не переходит на его обработчик....
Обьясните пожалуйста пошагово, как это делать. Если можно, подкинте примеры startupa..
Пытался сделать прерывание fiq, как показывал уважаемый Andy Mozzhevilov тут
http://electronix.ru/forum/index.php?showtopic=31378
был тут
http://electronix.ru/forum/index.php?showt...mp;#entry190686
тут
http://electronix.ru/forum/index.php?showt...27621&st=15
но ничего не вышло. Пожалуйста помогите!!!!
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла