Имеется разделение прерываний по приоритетам. Main и ISRы находятся в одном файле, вспомогательные функции в другом.
CODE
#pragma interruptlow InterruptHandlerHigh
void InterruptHandlerHigh ()
{
…
if( INTCONbits.INT0IF) //Check for INT0
{
…
WriteConfig();
// INTCONbits.RBIE = 0; //Disbles the RB port change interrupt
// INTCON3bits.INT2IE = 0; //Disbles the INT2 external interrupt
INTCONbits.GIEL = 0;
}
}
void InterruptHandlerHigh ()
{
…
if( INTCONbits.INT0IF) //Check for INT0
{
…
WriteConfig();
// INTCONbits.RBIE = 0; //Disbles the RB port change interrupt
// INTCON3bits.INT2IE = 0; //Disbles the INT2 external interrupt
INTCONbits.GIEL = 0;
}
}
Функция WriteConfig() обеспечивает запись данных в EEPROM, во время которой на период процедуры записи, отключаются прерывания. Так вот, если прерывания отключаются в WriteConfig(), то затем отключить все низкоуровневые прерывания INTCONbits.GIEL = 0 не удается, а только посредством соответствующих битов IE=0. Если отключение прерываний убрать из WriteConfig(), то INTCONbits.GIEL = 0 работает. Если же вложить WriteConfig() в другую какую-ть подпрограмму (SOUBROTINExx-> WriteConfig),при этом отключение/подключение прерываний остается, то ситуация еще более запутывается.
Прошу сообщить, что я делаю не так?