Не могу понять почему при попадании в прерывание по захвату фронта или по фронту на выводе PIO1_0, проц повисает на исключениях.
Несмотря на то что JTAG у этой ноги мы выключили.
Значения некоторых регистров во время остановки дебагера:
GPIO1DIR=0;
GPIO1IBE=1;
GPIO1IC=0;
GPIO1IE=1;
GPIO1IEV=0;
GPIO1IS=0;
GPIO1MIS=1;
GPIO1RIS=9;
Недавно обнаружил что код с примером внешних прерываний от IARa адекватно работает, после изменения имени прерывания с PIOINT1_IRQHandler на PIO1_IRQHandler.
Отсюда пару вопросов:
Какие ошибки в коде?
И правильно ли выключен JTAG?
Уменьшил программу до минимума. в maine только вызов init_int_front()
Код:
|
void init_int_front(void)
{
EVENT_InitTypeDef PIOconfig;
LPC_IOCON-›JTAG_TMS_PIO1_0 &= ~0x07;
LPC_IOCON-›JTAG_TMS_PIO1_0 |= 0x11;
GPIO_PortIntCmd(PORT1,ENABLE);
GPIO_SetDir(PORT1, GPIO_Pin_0, 0);
PIOconfig.port=PORT1;
PIOconfig.pins=GPIO_Pin_0;
PIOconfig.EVENT_Mode=EVENT_BOTH_EDGE;//EVENT_RISING_EDGE;
PIOconfig.INTCmd=ENABLE;
GPIO_EventInit(&PIOconfig);
}
void PIOINT1_IRQHandler(void)
{
unsigned long regVal;
regVal = GPIO_GetIntStatus( PORT1);
if ( regVal )
{
GPIO_ClearInt(PORT1,GPIO_Pin_0);
}
GPIO_ResetBits(PORT3, LED_RED);
} |