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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

STM32 USART+прерывания

Непрочитано 17.02.2012, 14:57  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

А зачем массив отправлять побайтово вообще?? Не проще ли будет отправить его с помощью прямого доступа к памяти (DMA). Я правда на STM32 еще не пробовал, но работая с AT91SAM7 использовал неоднократно. Кинул адрес первого байта и длину, больше никаких хлопот, само уедет непрерывным потоком. Чтобы не быть пустозвоном, дам ссылочку, ребята используют ПДП и USART в STM32 для других целей, но думаю всем будет интересно. А прерывание можно взвести уже по окончанию всей передачи.
Реклама:

Последний раз редактировалось dadigor; 17.02.2012 в 15:00.
dadigor вне форума  
Непрочитано 17.02.2012, 20:11  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

dadigor DMA на UART это шарообразный конь в вакууме. Реально на железе должно быть квитирование, а оно практически нигде нормально не реализовано = побайтная отправка.
PS для поделок а-ля "морг-морг диодом" можно и без квитирования
Hives вне форума  
Непрочитано 19.02.2012, 17:39  
Nik_UFO
Частый гость
 
Регистрация: 22.04.2007
Сообщений: 26
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Nik_UFO на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

Сообщение от Hives Посмотреть сообщение
Реально на железе должно быть квитирование, а оно практически нигде нормально не реализовано = побайтная отправка.
Что такое квитирование?
Nik_UFO вне форума  
Непрочитано 19.02.2012, 18:35  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

Сообщение от Nik_UFO Посмотреть сообщение
Что такое квитирование?
Подтверждение доставки. Приемник сообщает передатчику - принял, давай исчо..
kison вне форума  
Непрочитано 20.02.2012, 11:43  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

Сообщение от Hives Посмотреть сообщение
dadigor DMA на UART это шарообразный конь в вакууме. Реально на железе должно быть квитирование, а оно практически нигде нормально не реализовано = побайтная отправка.
PS для поделок а-ля "морг-морг диодом" можно и без квитирования
Я бы не был так категоричен... хотя здесь, на форуме, для многих это как бы норма общения... Шарообразного коня в вакууме (DMA) придумали далеко не глупые люди для далеко не глупых людей, другое дело, что не все его используют - кто-то по незнанию, кто-то по отсутствию необходимости, а кто-то и по чисто религиозным причинам.
Реально на железе квитирование в моих приложениях я привык получать от приемника на другом конце линии - это подтверждение не только правильного ухода сообщения, но и его правильного приема на том конце, что для меня не менее важно. А сами сообщения в моих "поделках а ля морг-морг диодом" как правило имеют контрольную сумму в конце - для проверки приемником правильности приема. Если контрольная сумма не сойдется - приемник "не вправе" доверять такому сообщению и пошлет сообщение об ошибке приема. А вот когда от приемника не приходят ни сообщение об ошибке, ни квитанция, процессор передающей стороны может заняться вопросом, уходит ли само сообщение от передатчика, не закорочена ли линия, в общем тем, что вы сочтете нужным делать в такой ситуации.
Для меня DMA - это просто переход на другой уровень работы с процессором, развязывающий процу "руки" для других насущных задач и не обременяющий его прерываниями по каждому уходящему байту.
Хотя не спорю с тем, что в некоторых приложениях нужен и Ваш подход.
и какой подход правильнее в каждом конкретном случае - зависит от поставленной перед разработчиком задачи.
В конце-концов я же не навязываю DMA, я просто спросил у автора топика, зачем массив отправлять побайтово, если есть другая возможность - используя DMA. А решать - ему.

Последний раз редактировалось dadigor; 20.02.2012 в 13:06.
dadigor вне форума  
Сказали "Спасибо" dadigor
Nik_UFO (22.02.2012)
Непрочитано 20.02.2012, 20:39  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

все красиво и чудесно в теории. ну или в конкретно вашем случае.
однако при таком подходе часто пакет даже до PHY не дойдет, а DMA отмашет "все чудесно, все в порядке". гадости в деталях
Hives вне форума  
Непрочитано 24.02.2012, 23:22  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

Сообщение от Hives Посмотреть сообщение
все красиво и чудесно в теории. ну или в конкретно вашем случае.
однако при таком подходе часто пакет даже до PHY не дойдет, а DMA отмашет "все чудесно, все в порядке". гадости в деталях
Мне это интересно, вполне серьезно. Что в этом случае происходит? По каким причинам "ПРИ ТАКОМ ПОДХОДЕ ЧАСТО пакет даже до PHY не дойдет"?
В чем тут бывают причины не "дохождения" пакета при передаче именно с DMA ?
Я ведь просто подсказал, как просто осуществить неразрывную передачу пакета (цитирую проблему автора: "Хочу отправить массив байт... ...но 1-ый байт приходит сразу а остальные с некоторой задержкой." , я так понимаю, что это случай, когда максимально допустимый разрыв между концом стопа предыдущего байта и началом старта последующего должен быть существенно меньше времени передачи одного бита - для того, чтобы приемная сторона его не замечала и принимала пакет целиком - как один пакет.
Но Вы меня насторожили! Какие тут при передаче подводные камни, если не считать отказы выходного драйвера передающей стороны, или скажем КЗ физической линии, или отказа на приемной стороны (а все это обнаруживается отсутствием квитирования от приемника).
Или Вы имеете в виду БЫСТРОЕ (по ходу передачи пакета) обнаружение отказа выходного драйвера или КЗ физической линии при вашем методе? В некоторых приложениях это наверное необходимо, в этих случаях такие условия обговариваются в требованиях к разработке. А вот правильность приема пакета все равно не определить без квитанции от приемной стороны. Или можно, конечно, организовать эхопередачу от той, приемной стороны и контролировать ее, но это уже особый случай быстрого квитирования. Или...
В общем, хочется понять, какие конкретно проблемы могут меня подстерегать при передаче с использованием DMA для USART, которых я смогу избежать при другом методе.Я, конечно, не беру тот случай, когда в программе DMA уже используется для кучи возможных для этого в данном процессоре периферийных модулей одновременно, будем говорить об использовании DMA для одного канала USART. В чем несовершенство этого метода?
dadigor вне форума  
Непрочитано 25.02.2012, 01:28  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

чисто как пример - чип от FTDI (Silabs, ets). слева UART, справа USB.
входящий поток от UART от режет на USB пакеты.
что будет, если его буфер засрется и он выставит nWAIT?
правильно - DMA продолжит фигачить данные как ни в чем не бывало = пакет потерян.
Hives вне форума  
Непрочитано 25.02.2012, 02:50  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

Сообщение от Hives Посмотреть сообщение
DMA продолжит фигачить данные как ни в чем не бывало
Погодите-погодите ... DMA записывает очередной байт в регистр Tx процессора для выдачи наружу, например для передачи в чип FTDI UART/USB, только по запросу, а не сам по себе.
В данном случае с UART: запрос на DMA формируется сигналом TXE, когда регистр передатчика пуст. Ежели внешнее устройство не готово принять байт, то хендшейк сигнал запретит передачу, тот байт застрянет в регистре Tx процессора до лучших времён, и новый очередной сигнал TXE не появится. Таким образом, DMA будет ждать готовности внешнего устройства сколь угодно долго.
По сути дела, если говорить упрощённо, то DMA есть просто железный счётчик адреса памяти, который сдвигается на единичку от какого-либо выбранного сигнала, типа переполнился таймера, или АЦП закончило очередное преобразование, или в приёмник UART поступил новый байт и т.д. И ещё этот прямой доступ к памяти DMA может считать кол-во сделанных шагов и останавливаться, когда все нужные шаги прошёл.

Последний раз редактировалось Yurkin2007; 25.02.2012 в 03:31.
Yurkin2007 вне форума  
Непрочитано 25.02.2012, 04:41  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32 USART+прерывания

а теперь попробуй красиво реализовать все что ты расписал - с хендшейками, таймаутами и тд
хотя бы в виде наброска
Hives вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Режим захвата в STM32 serb-radio ARM 5 25.02.2016 12:22
STM32-Comstick Flyguy06 Микроконтроллеры, АЦП, память и т.д 0 18.06.2011 08:49
Подключение кнопок к STM32 MasterSID Микроконтроллеры, АЦП, память и т.д 9 01.05.2011 12:42
AVR USART+прерывания=потеря данных umgah Микроконтроллеры, АЦП, память и т.д 54 10.04.2010 16:22
прерывания usart в avr studio 4.13 zubr_ Микроконтроллеры, АЦП, память и т.д 6 14.10.2009 18:33


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.