|
|
|
LPC11xx и обработка прерываний |
|
|
|
Feb 6 2013, 16:16
|
Частый гость
Группа: Участник
Сообщений: 143
Регистрация: 19-11-12
Пользователь №: 74 471
|
Код volatile uint32_t count = 1; void PIOINT1_IRQHandler(void) { GPIOIntClear( 1, 9 ); if( count != 7 ) { count++; } else { LPC_GPIO0->MASKED_ACCESS[( 1 << 7 )] = ( 0 << 7 ); count = 1; } }
int main(void) { LPC_SYSCON->SYSAHBCLKCTRL |= ( 1 << 6 ); NVIC_EnableIRQ( EINT1_IRQn ); LPC_GPIO0->DIR |= ( 1 << 7 ); // настраиваем PIO0.7 на вывод (светодиод LPCXpresso) GPIOSetDir( 1, 9, 0 );
GPIOSetInterrupt( 1, 9, 0, 0, 0 ); GPIOIntEnable( 1, 9 ); } Есть вот такой код обработки прерывания. Суть его такая: при запуске горит светодоид, но при 7 разовом нажатии на кнопку светодиод должен погаснуть. Но работает как то странно. То 7 раз нажать на кнопку и гаснет, то 6, то 4, то 3. Вобщем разные цифры. В чем я ошибся при кодировании прерывания?
|
|
|
|
|
Feb 7 2013, 16:22
|
Гуру
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322
|
Цитата(deplen @ Feb 7 2013, 17:54) а что делает HYSTERESYS в настройках каждого пина, не триггер ли это? Хоть бы и триггер, но кнопка всё равно дребезжать будет... Цитата(deplen @ Feb 7 2013, 17:54) P.S. да и общий вопрос, вешать такой нестабильный фронт как кнопка на прерывание хорошая идея? Чего ж хорошего в такой идее. Цитата(deplen @ Feb 7 2013, 17:54) или проще и надежнее сделать простой опрос пина в цикле? Лучше опрос, но не в цикле, а периодически.
|
|
|
|
|
Feb 7 2013, 18:48
|
Гуру
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454
|
зависит от задачи.
Опрос кнопок в цикле частенько приводить к тупящим приложениям. Где надо каждый раз нажимать основательно, и ты каждый раз не уверен нажалось оно или нет...
Если главный цикл короткий, и фактически один опрос кнопок и малая индикация можно и полингом, если реакция на кнопки нужна четкая и быстрая, а главный цикл загружен, то прерывание.
И нет никакой проблемы в прерываниях на кнопки, просто надо в этом прерывании не тупить. Обработал клик, поставил флаг что кнопка была, и вывалился. Весьма корректное решение...
Периодический опрос - потенциально приложения пропускающие клики...
да гистерезис не особо поможет, конденсатор на кнопицу и пауза в опросе, ну и хорошая дорогая кнопочка.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|