Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC 2106 исключение Data prefetch abort
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dimone
Доброго времени.
Надеюсь кто-то подскажет по теме...
Использую прерывание по входу (низкий уровень), ксожалению чип LPC 2106 не работает с фронтами,
поэтому прерывание самоболокирующееся, восстанавливает же прерывание от таймера , работающего
на частоте в 10 раз большей, и контролирующего логический уровень на пине.
Работает такая конструкция хорошо, но иногда исключение Data prefetch abort срывает работу;
Поясните, пожалуст кто знает, где тут может крыться грабли...
CODE


__irq void IRQ_Hndlr_INT2 (void)//Прерывание EXTINT2
{
if(!sem)
{
VICIntEnClr= 1<<16; //Блокировка прерываний EXTINT2
PINSEL0 &=~0x80000000;//переключение в режим GPIO
sem=1;
}
VICVectAddr=0; //Reset priority
}

__irq void FIQ_Handler (void)//прерывание таймера
{
if(sem&&IOPIN&(1<<15))// проверка EXTINT2 на "заблокрованность" и "высокого" логического на пине
{
PINSEL0 |=0x80000000;//переключение в режим EXTINT2
EXTINT = 0x00000004;//Reset interrupt source
VICIntEnable= 1<<16;//Разблокировка прерываний EXTINT2
sem=0;
}
T0IR = 0x00000001; //Reset interrupt source
}
GetSmart
Криминала вроде не видно. Кроме отсутствия сброса EXTINT внутри IRQ_Hndlr_INT2. Он нужен если sem!=0, но даже если sem==0 он ничем не мешает. Но Data Abort почти наверняка не из-за этого. Чтоб узнать поточнее нужно взглянуть на регистр LR (R14) внутри обработчика Data Abort. Этот адрес-8 вызвал исключение. Далее в листинге найти что по этому адресу.
dimone
Спасибо большое за помощь, не очень приятно констатировть,
но протупил...
Заюзав "fiq" не удосужился ему стек отрегулировать... laughing.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.