реклама на сайте
подробности

 
 
> Проблема в обработке GPIO прерываний.
koss
сообщение Sep 5 2008, 10:26
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 20-04-05
Пользователь №: 4 328



Есть следующая проблема:
В обработчике прерываний от 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?

Буду благодарен за любую помощь...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01315 секунд с 7
ELECTRONIX ©2004-2016