Имеется LPC2148 на платке и кварц 32кГц для часов.
На LPC2148 поставил пример уКОСа, в настройках порта и стека ничего не менял.
Настороил RTC на внешний кварц 32кГц.
Установил FIQ на 1 секундное прерывание RTC, и дергаю в прерывании ножкой.
После запуска, некоторое время работает, а потом в дебагере попадаю на while(1){;}
с ошибкой "EXCEPT PREFETCH ABORT"

(пробовал делать источник 1 сек. прерыванй с TIMER0 - работает). В чем проблема?
И еще может кто подскажет насколько FIQ "тормозится" уКОСом. Следует ли как-то переделовать порт?
(требуется чтоб 1 сек. импульсы на ножеке как можно меньше "плавали").
Код
void RTC_Init(void)
{
CCR_bit.CLKEN = 0; // RTC_Disable
CCR_bit.CLKSRC = 1; // External 32kHz
CCR_bit.CTCRST = CCR_bit.CTTEST = 0; // test disable and reset
AMR=0xFF;
CIIR_bit.IMSEC = 1; // Setup 1-SEC interrupt
ILR = 0x03; // Clear RTC interrupt
CCR_bit.CLKEN = 1; // RTC_Enable
VICIntSelect |= (1<<VicIntSource);
VICIntEnable |= (1<<VIC_RTC);
}
__arm void RTC_ISR(void)
{
ILR = 0x03; // Clear RTC interrupt flag
IO0DIR |= (1<<29);
if(IO0PIN & (1<<29) ) IO0CLR = (1<<29);
else IO0SET = (1<<29);
}
void OS_CPU_ExceptHndlr (CPU_INT32U except_id)
{
CPU_FNCT_VOID pfnct;
if(except_id == OS_CPU_ARM_EXCEPT_FIQ) // FIQ
{
RTC_ISR();
}
else
if(except_id == OS_CPU_ARM_EXCEPT_IRQ) // IRQ
{
...
}
else while(1){;} // EXCEPT PREFETCH ABORT there
}
{
CCR_bit.CLKEN = 0; // RTC_Disable
CCR_bit.CLKSRC = 1; // External 32kHz
CCR_bit.CTCRST = CCR_bit.CTTEST = 0; // test disable and reset
AMR=0xFF;
CIIR_bit.IMSEC = 1; // Setup 1-SEC interrupt
ILR = 0x03; // Clear RTC interrupt
CCR_bit.CLKEN = 1; // RTC_Enable
VICIntSelect |= (1<<VicIntSource);
VICIntEnable |= (1<<VIC_RTC);
}
__arm void RTC_ISR(void)
{
ILR = 0x03; // Clear RTC interrupt flag
IO0DIR |= (1<<29);
if(IO0PIN & (1<<29) ) IO0CLR = (1<<29);
else IO0SET = (1<<29);
}
void OS_CPU_ExceptHndlr (CPU_INT32U except_id)
{
CPU_FNCT_VOID pfnct;
if(except_id == OS_CPU_ARM_EXCEPT_FIQ) // FIQ
{
RTC_ISR();
}
else
if(except_id == OS_CPU_ARM_EXCEPT_IRQ) // IRQ
{
...
}
else while(1){;} // EXCEPT PREFETCH ABORT there
}