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

|
В целом я уже согласился, прерывание плохо, полинг это хорошо. Просто потому что это ничего не меняет, а вам это почему то важно  уточню только эти моменты: если пользователь хочет нажимать с частотой 1 МГц, а вы пропустите половину нажатий - это некорректная работа!  мер не нужно, но они уже сделаны, зачем отговаривать человека от использования прерывания в этом случае? если подбирать подходящий таймер, то это делает трудным поддержку проекта. Если есть модуль и он занял таймер, то таймер можно менять как хочешь, если от этого таймера начинают зависит другие модули - это пипец. Это код где каждый шаг как на минном поле, и ты никогда не узнаешь все ли хорошо, если ты что-то поменял... Пример: естественно чудес не бывает). один глобальный таймер идет насквозь за все время жизни проекта (в частности там был внешний таймер на батарейке который возвращал текущее время). По прерыванию - запрос времени, по разнице верхнего и нижнего клока - определение длительности нажатия, мертвых зон и прочее... прочее прочее... этот сквозной таймер могут использовать все модули, без возможности менять его параметры. Проект легко обслуживается, и поддерживается. Можно делать все что хочешь в основном цикле, хоть пихать паузы while(1), делать длительные обработки, реакция на кнопки будет правильной и корректной.
|
|
|
|
Сообщений в этой теме
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, 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
|
|
|