Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 04.02.2015, 12:07  
andr_larr
Временная регистрация
 
Регистрация: 11.09.2007
Сообщений: 39
Сказал спасибо: 11
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
andr_larr на пути к лучшему
По умолчанию CodeVision передача в компьютер по прерыванию

Звиняюсь если вопрос покажется примитивным.
В CodeVision при работе контроллера с компьютером необходимо пересылать информацию через Сом - порт.Причём в компьютер слать как байты так и строки.И чтоб сократить время простоя контроллера решил слать их по прерываниям...В CodeWizard установил Tx Interrupt в программе появилось interrupt [USART_TXC] void usart_tx_isr(void). И тут немного не понял.При приёме я анализирую начало и конец строки что приходят в rx_buffer и как они совпали - перебрасываю данные в другой буфер очищая приёмный...Ну а там уж разбираюсь что пришло...А как работать с прерываниями в передаче ? Мне нужно что-то запихивать в tx_counter вручную и как мне это сделать из программы ?
Тоесть из программы putchar(c); или puts(string_out); автоматически будут передаваться на прерывания или нужны какие телодвижения....?

С уважением...
Реклама:
andr_larr вне форума  
Сказали "Спасибо" andr_larr
warel (29.06.2019)
Непрочитано 04.02.2015, 12:31  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,924
Сказал спасибо: 2,543
Сказали Спасибо 11,821 раз(а) в 5,927 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

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

Видимо, надо чуть уточнить.
Опустошается буфер приема функцией чтения getchar(). При этом все счетчики работают корректно. Перед чтением байта полезно убедиться, что буфер не пустой, иначе можно зависнуть до приема байта УАРТом.
putchar(char) помещает байт в буфер передачи. Как там что-то появилось, начинается передача до опустошения буфера передачи.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 04.02.2015 в 12:53.
akegor вне форума  
Сказали "Спасибо" akegor
warel (29.06.2019)
Непрочитано 04.02.2015, 16:49  
andr_larr
Временная регистрация
 
Регистрация: 11.09.2007
Сообщений: 39
Сказал спасибо: 11
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
andr_larr на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Сообщение от akegor Посмотреть сообщение
Прерывания по передаче нужны для работы с буфером передачи - выплюнул в буфер то. что хочешь передать, а дальше голова болит у контроллера.
Вот этот вопрос и непонятен."выплюнул в буфер"...это как ?Ну вот есть у меня строка в массиве или число в переменной - как правильно его в буфер передать ? Если можно пример или кусок кода....Именно передача...

С уважением....
andr_larr вне форума  
Сказали "Спасибо" andr_larr
warel (29.06.2019)
Непрочитано 04.02.2015, 17:01  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,924
Сказал спасибо: 2,543
Сказали Спасибо 11,821 раз(а) в 5,927 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Сообщение от andr_larr Посмотреть сообщение
Ну вот есть у меня строка в массиве или число в переменной - как правильно его в буфер передать ?
Побайтно, putchar(char). Вот здесь отвечал на подобный вопрос.

Посмотрите ту тему, на которую ссылался.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
warel (29.06.2019)
Непрочитано 04.02.2015, 17:43  
andr_larr
Временная регистрация
 
Регистрация: 11.09.2007
Сообщений: 39
Сказал спасибо: 11
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
andr_larr на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Посмотрите ту тему, на которую ссылался.[/QUOTE]
Во уже ближе....
"Визард используете для генерации "рыбы"?"(с)....
Именно так...рыба - самое привлекательное в Визарде....
Вот вопрос...Почти всё понятно но как-то последние шестерёнки не складываются....
У Вас настроена передача по прерыванию..
Это кусок вашей программы...
----------------------------------
i2btoa(rez, mas); // Подготовка строки
mas[4]=0; // Запись признака конца строки
putchar('?'); // Передача признака начала пакета
putstr(mas); // Передача подготовленной строки
----------------------------------------------
Когда Вы даёте команду putstr(mas); программа автоматически переходит в передачу по прерыванию ? Тоесть процессор передаст строку в tx_buffer и далее занимается своими делами а подпрограмма прерывания сама уже строку передаёт или это как-то надо организовать вручную ?

С уважением....
andr_larr вне форума  
Сказали "Спасибо" andr_larr
warel (29.06.2019)
Непрочитано 04.02.2015, 18:16  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,924
Сказал спасибо: 2,543
Сказали Спасибо 11,821 раз(а) в 5,927 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Сообщение от andr_larr Посмотреть сообщение
программа автоматически переходит в передачу по прерыванию ?
Как бы, не совсем так. Функция передачи строки вызывает функцию передачи байта. Эта функция (если буфер передачи пустой и УАРТ не занят) отдает байт УАРТу. Если УАРТ занят передачей, байт помещается в буфер. При освобождении UDR возникает прерывание, по которому из непустого буфера в UDR помещается следующий байт из буфера.
Таким образом, при вызове putstr(mas) первый байт идет непосредственно на передачу, а остальные помещаются в буфер и будут передаваться по прерываниям освобождения UDR.
Поэтому
Сообщение от andr_larr Посмотреть сообщение
У Вас настроена передача по прерыванию..
несколько не то, что Вы предполагаете. Начало передачи не связано с прерываниями.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
warel (29.06.2019)
Непрочитано 05.02.2015, 11:36  
andr_larr
Временная регистрация
 
Регистрация: 11.09.2007
Сообщений: 39
Сказал спасибо: 11
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
andr_larr на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Спасибо...Начинаю понимать ньюансы о которых читал но как-то не отложилось в голове...
Тоесть как я понял я вызываю функцию передачи строки,она помещает первый байт в UDR и по завершению передачи байта выставляется флаг прерываний по завершению передачи,берёт следующий и так до конца...
Если я не надоел 2 уточнения...
1.При реализации putstr(mas) вся строка передаётся в tx_buffer или частями ? Тоесть есть-ли необходимость устанавливать размер буфера как минимум более величины передаваемой строки ?
2.Перед реализации putstr(mas) есть-ли необходимость проверять пустоту UDR или функция это произведёт сама и дождавшись пустоты UDR начнёт передачу ?

С уважением...
andr_larr вне форума  
Сказали "Спасибо" andr_larr
warel (29.06.2019)
Непрочитано 05.02.2015, 12:11  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,924
Сказал спасибо: 2,543
Сказали Спасибо 11,821 раз(а) в 5,927 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

1. Да. Вся строка в буфер, потому как пересылка быстрее передачи. Смотря насколько часты передачи. Если гарантируется передача полного пакета между сеансами, то можно буфер иметь равным пакету.
2. Нет. Функция сама помещает В БУФЕР при помощи putchar(...). А вот путчар уже сам ориентируется, куда всунуть байт - в пустой УДР или, если он занят, в буфер.
Не надо забывать, что putstr(mas) выводит в УАРТ СТРОКУ, т.е., строка должна заканчиваться признаком конца строки (0х00).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
warel (29.06.2019)
Непрочитано 05.02.2015, 13:11  
andr_larr
Временная регистрация
 
Регистрация: 11.09.2007
Сообщений: 39
Сказал спасибо: 11
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
andr_larr на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Понял.Спасибо.Я вывожу с помощью puts(); он автоматически добавляет конец строки - по этому символу у меня в компьютере модуль синхронизируется определяя что пришла информация...
Щас буду пробовать с использованием прерывания....Спасибо за советы...

С уважением....
andr_larr вне форума  
Сказали "Спасибо" andr_larr
warel (29.06.2019)
Непрочитано 05.02.2015, 13:30  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,924
Сказал спасибо: 2,543
Сказали Спасибо 11,821 раз(а) в 5,927 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: CodeVision передача в компьютер по прерыванию

Сообщение от andr_larr Посмотреть сообщение
Я вывожу с помощью puts();
Есть у меня большое подозрение, что эта функция сделана из стандартного путчара. А стандартный от Визардовского отличается отсутствием буфера и, как следствие, завешиванием контроллера в ожидании передачи байта.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
warel (29.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу пример uart для mega в codevision code-by Микроконтроллеры, АЦП, память и т.д 2 04.01.2011 12:20
AVR Butterfly evaluation kit - передача данных по СОМ порту ramilkazus Микроконтроллеры, АЦП, память и т.д 5 27.06.2009 23:15
Tiny 15L & CodeVision Beduin Микроконтроллеры, АЦП, память и т.д 3 24.08.2007 09:23
CodeVision Проблеммы при программе более 50% памяти Andrewg Proteus, KiCAD и другие ECAD 2 07.08.2007 17:20
[Решено] Помогите с символьной отладкой в Proteus + CodeVision Ku Proteus, KiCAD и другие ECAD 0 04.07.2005 18:40


Часовой пояс GMT +4, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot