Прерывание по входу байта через UART

Alexey198
Offline
Зарегистрирован: 23.09.2013

Здравствуйте.

Необходимо, чтобы запускалось прерывание, когда в буфер UART поступал байт.

Как это реализовать.

Гуглить пробовал не нашел.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Это не по прерыванию, но по завешению функции loop, там и примеры есть:

http://arduino.cc/en/Reference/SerialEvent

 

Alexey198
Offline
Зарегистрирован: 23.09.2013

kisoft пишет:

Это не по прерыванию, но по завешению функции loop, там и примеры есть:

http://arduino.cc/en/Reference/SerialEvent

А зачем по завершению функции loop?

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

Каким образом ваш пример может заменить вышеописанную необходимость?

Если ждать когда закончится loop (который вообще не заканчивается. Или я может чего-то не понимаю, поясните, пожалуйста) то я непосредственно и в самой функции могу опрашивать буфер. Мне то нужно в любой момент остановить действие программы, в обработчике прерываний получить данные по UART и обработать их, потом продолжить выполнение основной программы. 

Пример, который вы прислали на английском, перевод гугл тьолком ничего не пояснил.

Пояните, пожалуйста и приведите пример программного кода с подробными пояснениями в комментариях к каждой строке кода

maksim
Offline
Зарегистрирован: 12.02.2012

Для начала это почитайте что бы таких вопросов не возникало.

http://arduino.ru/forum/obshchii/migaem-vstroennym-svetodiodom-s-chastotoi-opredelyaemoi-kompyuterom

step962
Offline
Зарегистрирован: 23.05.2011

Alexey198 пишет:

Необходимо, чтобы запускалось прерывание, когда в буфер UART поступал байт.

Ну так и воспользуйтесь прерыванием 19 "Завершение приема по каналу USART"

Onkel
Offline
Зарегистрирован: 22.02.2016

подниму зомбятину...

---Ну так и воспользуйтесь прерыванием 19 "Завершение приема по каналу USART"

Это включение в код по сути асма atmega328. А такой команды ардуино, чтобы годилась и на atmega328, и на другие чипы (вроде sam3) нету?

Technolog
Offline
Зарегистрирован: 19.11.2014

То что вам нужно

http://arduino.ru/forum/programmirovanie/preryvanie-po-postupleniyu-bait...

Работает быстро, надёжно,  вовремя и без ожиданий, задержек ...

Onkel
Offline
Зарегистрирован: 22.02.2016

Technolog пишет:

То что вам нужно

http://arduino.ru/forum/programmirovanie/preryvanie-po-postupleniyu-baita-usart-preryvanie-arduino-mega-2560

Работает быстро, надёжно,  вовремя и без ожиданий, задержек ...

Пасиб, но это немного не то - это по сути включение в код в arduino ide cпецифических асм команд мк atmega2560  вроде ISR(USART0_RX_vect) . На любом другом мк, в том числе и на atmega328, этот код уже не пойдет, Там другие команды, там нужно будет ISR(USART_RX_vect). Но тем не менее спасибо.