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

|
вы не внимательны. этот таймер не имеет прерывания, он идет без остановок и запусков потому его может использовать любой другой модуль без опаски что кто-то его выключит или сменит интервал. Прерывание кнопки позволяет точно фиксировать момент, что в отличии от полинга дает неопределенность с точностью до частоты опроса. если же таймер вызывает прерывание и сканирует кнопку - это таймер занятый на кнопки, и использовать его для чего либо другого не безопасно, опять же он дает неопределенность длительности до частоты опроса. Естественно это немного идеализированный пример, потому что в большинстве случаев неопределенность до частоты опроса не важна... но если уж мы копаем нюансы - так вот они. Причем еще один момент, этот таймер может быть и не регистром контроллера, это может быть таймер внешний в ЛПИСе или же спец микросхема с высокой стабилизацией времени, которые могут и не иметь возможности генерить прервания с интервалами или вообще не иметь возможности генерить прерывание... заряжать конденсатор - это сильно конечно, там и АЦП можно к процессу подключить, но достаточно просто внешнего таймера  как я и написал... Кстати! совсем забыл  ))) Кнопка на прерывании легко и безоговорочно побеждает кнопку по полингу если речь идет о режиме энергосбережения и пробуждению по нажатию кнопки... При полинге вы либо не проснетесь вообще, либо регулярными пробуждениями потратите всю энергию! тадам!!!! прерывание - полинг 1 : 0
|
|
|
|
|
Feb 9 2013, 18:20
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(Golikov A. @ Feb 9 2013, 21:36)  Кнопка на прерывании легко и безоговорочно побеждает кнопку по полингу если речь идет о режиме энергосбережения и пробуждению по нажатию кнопки... Вот так и знал, что про это зайдет. Но не надо путать, событие "wake_up" и событие "button_pressed" - абсолютно разные, хотя, как частный случай, могут наступить от одного источника. Для "wake_up" - только прерывания, без вариантов. А дальше... угу, он самый, поллинг кнопок.
|
|
|
|
Сообщений в этой теме
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, 11:39 _Артём_ Цитата(Golikov A. @ Feb 8 2013, 13:39) Ка... Feb 8 2013, 12:03  Golikov A. Цитата(_Артём_ @ Feb 8 2013, 16:03) Выигр... Feb 8 2013, 12:14   _Артём_ Цитата(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 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|