реклама на сайте
подробности

 
 
> LPC11xx и обработка прерываний
deplen
сообщение Feb 6 2013, 16:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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. Вобщем разные цифры.
В чем я ошибся при кодировании прерывания?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Feb 8 2013, 11:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надо разделить сложности проектирования и текущую реализацию.


имеем
кнопка подключена к ножке процессора, которая умеет генерить прерывание на изменение фронта этой ножки. Вешаем на эту ножку кнопку, применяем все меры по устранению дребезга на схемотехническом уровне. Теперь вопрос, почему в данной ситуации не использовать прерывание? Чем оно хуже полинга? Зачем в этой ситуации нужен полинг? Какой выигрыш от периодического опроса?

Когда я пишу потенциально - это значит потенциально, а не всегда. пишешь приложение с главным циклом

опрос кнопок
измерение
вывод на экран

а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор. А за ней начинает расти скорость реакции на кнопку после нажатия, то есть время между тем как вы нажали и тем как приложение отозвалось.

И тут мы приходим к светлому решению вынести кнопки в отдельный поток на таймер. Сделать прерывание и опрашивать с периодами, все супер, но только пришли к тому же прерыванию что и от кнопки, но еще в добавок заняли таймер. А что выиграли то?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 8 2013, 12:03
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Golikov A. @ Feb 8 2013, 13:39) *
Какой выигрыш от периодического опроса?

Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет.

Цитата(Golikov A. @ Feb 8 2013, 13:39) *
а потом оно начинает обрастать, фильтрацией, обработкой измерения, и так далее и пауза между опросами кнопок становиться все больше больше... И начинает расти минимальная длительность нажатия которую видит прибор.

Проверяйте состояние входа в функции прерывания таймера.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 8 2013, 12:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(_Артём_ @ Feb 8 2013, 16:03) *
Выигрыш в том, что будет работать для любого входа, независимо поддерживает оно прерывания по входу или нет.


Проверяйте состояние входа в функции прерывания таймера.


про таймер написал чуть ниже, тоже прерывание, только еще и таймер заюзали.

Про то что будет работать для любого входа, аргумент, но есть ли смысл? Если есть устройство, в нем есть прерывание и кнопка, зачем писать так чтобы работало и без этого? На будущее?
Мы решаем эти вопросы во время проектирования, если прерывания выделить невозможно, решается так, если есть порты с прерываниями - сяк. Конкретный прибор - конкретная реализация, переносимость кода и его изменяемость решается на более высоком уровне, на том где уже состояние кнопок получено, а как получается состояние кнопок - это уже конкретный прибор == конкретный способ.


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016