Отговори на тема  [ 8 мнения ] 
Въпрос за DMA на ST 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Дек 02, 2010 5:08 pm
Мнения: 27
Местоположение: Пловдив
Мнение Въпрос за DMA на ST
Здравейте,
Струва ми се някъде във форума бях срещал, че при контролерите на ST ако е активно DMA за Rx от UART , не работи прекъсването Receiver Time-out. Може би нещо съм се объркал, защото не можах да го намеря пак. Не го открих и на първо ровене в Reference manual за STM32F10x... Обмислям ползването на STM32F103 и ако има нещо такова ми се иска предварително да знам.
Благодаря.


Чет Дек 30, 2010 10:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
А ти къде го видя това прекъсване, щото STM-ките, които аз съм пипал по принцип си нямат такова. Или бъркам?

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Дек 30, 2010 11:31 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Дек 02, 2010 5:08 pm
Мнения: 27
Местоположение: Пловдив
Мнение 
Ами аз писах "Струва ми се...бях срещал...", но не го намирам нито във форума нито в Reference manual.
Това "Receiver Time-out" е от SAM7S и го използвах, защото не намерих точен аналог в описанието на ST, освен "Idle line detected", което май не е точно същото.
Може би не зададох добре въпроса за това нека от начало - приемам данни от UART и предварително не знам размера. Сега ползвам прекъсване от DMA ако си напълни текущия буфер или прекъсване от таймаут ако са приети по-малко от размера на буфера данни и източника замлъкне.
Как с STM32 да реализирам тази постановка? Има ли подобен механизъм и ако да - термина който да търся?


Пет Дек 31, 2010 12:17 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Дек 02, 2010 5:08 pm
Мнения: 27
Местоположение: Пловдив
Мнение 
Май нямат такава вградена функция и замазват нещата с Application note AN3109.


Пет Дек 31, 2010 1:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ахъ. Нямат. Естествено това не е недомислица в проектирането, а "особенност" :). Но те така си я влачат още от STR9 тая периферия, ако се не лъжа. Иначе UART-а им има какви ли не безполезни чудесии. Но нещо толкоз елементарно - няма. Тъпотия.

Както и да е. Имаше различни подходи да я заобиколиш. Idle line със сигурност не е решение, поне на мен никога не ми е вършило работа. Според зависи от скоростта на данните и през колко време имаш фреймове може да правиш разни еквилибристики.

Един прост вариант който все се каня да изпробвам (и все не стигам до него) е да пусне DMA-то в кръгов режим. После навиваш един таймер за някакво време (съобразено с това какви фреймове и колко дълги очакваш да получиш). И в прекъсването на тоя таймер изваждаш каквото се е събрало в DMA-то и го предаваш на основния процес да си го дъвче. За ниски до средни скорости (115200) би трябвало да върши работа.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Дек 31, 2010 2:24 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Дек 02, 2010 5:08 pm
Мнения: 27
Местоположение: Пловдив
Мнение 
Благодаря за идеята. Ако го докарам до употреба на ST ще имам едно на ум за този вариант.
Весело посрещане на Новата година на всички.


Пет Дек 31, 2010 2:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Явно е заразно... при луминари го има същия проблем, receive timeout се получава само ако определен брой клокове след получаване на последния байт не се получи нов и стария си стои неизчетен. При пуснато ДМА обаче всичко се изчита моментално и така таймоут не може да се получи.

При атмел таймоути има само при USART, т.е. DBGU-то на 7-ците и простите UART-и на SAM3 нямат.

В случаите когато няма хардуерен аз си правя софтуерен, който през 1mS проверява и сигнализира. Полирането изглежда като овърхед, но всъщност като CPU usage е от порядъка на 0.01% - 0.1% като в това включвам и проверките за таймоутите на нишките на RTOS-а. Тъй че проблемът не е толкова голям, колкото изглежда. Ех, все пак минималния таймоут е 2-3mS (ако се полира през 1ms), но в общия случай това е повече от достатъчно.


Пет Дек 31, 2010 5:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Е да бе, то не чак такъв проблем. Но дразни мама му стара, щото това са елементарни неща....

От друга страна, то по добре това отколкото.....

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Нед Яну 02, 2011 3:13 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни