|
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 8 2013, 11:39
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
надо разделить сложности проектирования и текущую реализацию.
имеем кнопка подключена к ножке процессора, которая умеет генерить прерывание на изменение фронта этой ножки. Вешаем на эту ножку кнопку, применяем все меры по устранению дребезга на схемотехническом уровне. Теперь вопрос, почему в данной ситуации не использовать прерывание? Чем оно хуже полинга? Зачем в этой ситуации нужен полинг? Какой выигрыш от периодического опроса?
Когда я пишу потенциально - это значит потенциально, а не всегда. пишешь приложение с главным циклом
опрос кнопок измерение вывод на экран
а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор. А за ней начинает расти скорость реакции на кнопку после нажатия, то есть время между тем как вы нажали и тем как приложение отозвалось.
И тут мы приходим к светлому решению вынести кнопки в отдельный поток на таймер. Сделать прерывание и опрашивать с периодами, все супер, но только пришли к тому же прерыванию что и от кнопки, но еще в добавок заняли таймер. А что выиграли то?
|
|
|
|
|
Feb 8 2013, 12:03
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Golikov A. @ Feb 8 2013, 13:39)  Какой выигрыш от периодического опроса? Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет. Цитата(Golikov A. @ Feb 8 2013, 13:39)  а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор. Проверяйте состояние входа в функции прерывания таймера.
|
|
|
|
|
Feb 8 2013, 12:14
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(_Артём_ @ Feb 8 2013, 16:03)  Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет.
Проверяйте состояние входа в функции прерывания таймера. про таймер написал чуть ниже, тоже прерывание, только еще и таймер заюзали. Про то что будет работать для любого входа, аргумент, но есть ли смысл? Если есть устройство, в нем есть прерывание и кнопка, зачем писать так чтобы работало и без этого? На будущее? Мы решаем эти вопросы во время проектирования, если прерывания выделить невозможно, решается так, если есть порты с прерываниями - сяк. Конкретный прибор - конкретная реализация, переносимость кода и его изменяемость решается на более высоком уровне, на том где уже состояние кнопок получено, а как получается состояние кнопок - это уже конкретный прибор == конкретный способ.
|
|
|
|
Сообщений в этой теме
deplen LPC11xx и обработка прерываний Feb 6 2013, 16:16 Golikov A. в дребезге контактов?
кнопка - это не четкий фро... Feb 6 2013, 16:38 Black Pahan А дребезг контактов как устраняете? Feb 6 2013, 16:39 _Артём_ Цитата(deplen @ Feb 6 2013, 18:16) В чем ... Feb 6 2013, 16:42 deplen Просто задача стоит что бы по последовательности н... Feb 6 2013, 16:51 _Артём_ Цитата(deplen @ Feb 6 2013, 18:51) Просто... Feb 6 2013, 16:58 Golikov A. это просто.
после прерывания считает отсчет и ста... Feb 6 2013, 17:27 DVF А разве ноги на вход не имеют Schmitt Trigger? Tог... Feb 6 2013, 19:24 Alex11 Триггеров Шмитта как правило нет. Но даже если ест... Feb 6 2013, 22:43 jcxz 0.5мс????
Вы реально способны нажимать на кнопк... Feb 7 2013, 06:50 Alex11 0.5 мс, если Вы внимательно прочитали пост, - это ... Feb 7 2013, 14:51 Сергей Борщ Опрашиваю кнопки раз в 50 мс. При этом дребезг гас... Feb 7 2013, 15:14 jcxz Цитата(Alex11 @ Feb 7 2013, 20:51) 0.5 мс... Feb 8 2013, 05:37 deplen а что делает HYSTERESYS в настройках каждого пина,... Feb 7 2013, 15:54 _Артём_ Цитата(deplen @ Feb 7 2013, 17:54) а что ... Feb 7 2013, 16:22 Golikov A. зависит от задачи.
Опрос кнопок в цикле частеньк... Feb 7 2013, 18:48 Сергей Борщ QUOTE (Golikov A. @ Feb 7 2013, 20:48) Пе... Feb 7 2013, 23:39 Golikov A. по определению...
быстрые клики попавшие в паузы... Feb 8 2013, 03:22 HHIMERA Цитата(Golikov A. @ Feb 8 2013, 06:22) Гл... Feb 8 2013, 05:39 Сергей Борщ QUOTE (Golikov A. @ Feb 8 2013, 05:22) по... Feb 8 2013, 10:45   _Артём_ Цитата(Golikov A. @ Feb 8 2013, 14:14) то... Feb 8 2013, 12:21   Tahoe Цитата(Golikov A. @ Feb 8 2013, 16:14) Ес... Feb 8 2013, 12:57 scifi Цитата(Golikov A. @ Feb 8 2013, 15:39) Ка... Feb 8 2013, 12:06  Golikov A. Цитата(scifi @ Feb 8 2013, 16:06) Я думал... Feb 8 2013, 12:27   scifi Цитата(Golikov A. @ Feb 8 2013, 16:27) Хо... Feb 8 2013, 12:31 Golikov A. мне кажется меня не слышат, наверное вам кажется т... Feb 8 2013, 12:41 scifi Цитата(Golikov A. @ Feb 8 2013, 16:41) Мо... Feb 8 2013, 12:46 HHIMERA Цитата(Golikov A. @ Feb 8 2013, 15:41) Мо... Feb 8 2013, 13:17 Golikov A. ну все, убедили.
переписываю все проекты с прерыв... Feb 8 2013, 13:15 Golikov A. Окей Окей ... Feb 8 2013, 15:29 adnega Пример, конечно, надуманный, но все же: что будет,... Feb 8 2013, 18:05 Golikov A. ну я же согласился
второй надуманный пример,
что ... Feb 8 2013, 18:45 Tahoe Цитата(Golikov A. @ Feb 8 2013, 22:45) чт... Feb 8 2013, 19:09 jcxz Цитата(Golikov A. @ Feb 9 2013, 00:45) вт... Feb 9 2013, 08:56 Golikov A. В целом я уже согласился, прерывание плохо, полинг... Feb 9 2013, 12:49 jcxz Вот!!! Так и думал!
Т.е. - тайм... Feb 9 2013, 17:24 Golikov A. вы не внимательны.
этот таймер не имеет прерывания... Feb 9 2013, 17:36 Tahoe Цитата(Golikov A. @ Feb 9 2013, 21:36) Кн... Feb 9 2013, 18:20 deplen даже не думал, что обработка нажатия на кнопку выз... Feb 10 2013, 18:31 deplen Реализовал чтение порта на нажатие кнопки. Каждые ... Feb 11 2013, 15:12 Golikov A. запустить в таймере счетчик? Feb 11 2013, 15:21 deplen Цитата(Golikov A. @ Feb 11 2013, 19:21) з... Feb 11 2013, 15:49 Golikov A. естественно
первое нажатие задает значение счетчи... Feb 11 2013, 16:07 deplen Все. Всем спасибо. Прерывание реализовано по тайме... Feb 13 2013, 19:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|