Есть следующая проблема:
В обработчике прерываний от PIOE в самом начале считываю статусный регистр PIOE_ISR, и иногда получаю ноль, хотя прерывание вызывается. При этом больше нигде этот регистр не читаю, поэтому резетиться он не должен. Ноль получается достаточно случайно. Тестирую подачей квадратурного сигнала с периодом ~100мкс, иногда получаются редкие пропуски по 2-3 раза из 20 фронтов в разных местах, независимо от того спад это или нарастание, иногда подряд 10-15 раз.
Код прост:
_INTERRUPT void vKeyboard_IT_Handler(void)
{
int tmp;
unsigned long u4Temp_ISR;
// Здесь читаю этот регистр
u4Temp_ISR = *AbsPIOE_ISR;
if(u4Temp_ISR == 0)
{
// u4Temp_ISR = 1; // так все работает
}
// Определяю какая из ног дернула (0 или 2)
u4Temp_ISR &= 0x05;
// Determine interrupt source
if(u4Temp_ISR & 0x01)
{
// для тестирования осцилом зажигаю седьмой пин, когда все ОК
*AbsPIOE_SODR = 0x80;
// просто задержка ~10мкс
for(tmp = 50; tmp > 0; tmp--);
}
*AbsPIOE_CODR = 0x80;
}
Проц не совсем обычный, секьюрный Atmel SO101.
Может ли что-то портить JTAG Emulator?
Буду благодарен за любую помощь...