Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема в обработке GPIO прерываний.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
koss
Есть следующая проблема:
В обработчике прерываний от 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?

Буду благодарен за любую помощь...
Сергей Борщ
Цитата(koss @ Sep 5 2008, 13:26) *
Может ли что-то портить JTAG Emulator?
Если у вас открыто окно, в котором просматривается содержимое PIOE_ISR, то может. Раз чтение сбрасывает флаги в этом регистре, то неважно, как это чтение происходит - ядром или автоматом JTAG.
BSVi
А квадратурный сигнал не с энкодера? Может контакты там звенят?
koss
Все, эмулятор не виноват, - без него та же ерунда.
Источником должна быть PS/2 клава, но сейчас, для тестирования, квадратурный сигнал генерю другим выходом в фоне и перемычкой кидаю на ногу с прерыванием.
По виду сигналы, когда распознается источник не отличаются от тех, когда не распознается. Спад, либо нарастание - ~15 наносекунд, дребезга не видно.
koss
Всем спасибо, проблему решил.
Виноватым оказался внутренний генератор, который пытались запустить на 50МГц, при использовании внешнего кварца на 24МГц все работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.