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

 
 
> Исходники UART with PDC для Atmel ARM, Состряпал от нифиг делать :)
Andrey_Sudnov
сообщение Aug 10 2005, 13:56
Сообщение #1


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

Группа: Свой
Сообщений: 82
Регистрация: 15-03-05
Пользователь №: 3 361



Кому нужны готовые, либо как примеры работы с UART через PDC (т.е. ПДП) смело в юз.
Помучился с ними пару дней. Работает уже пару недель. Без ошибок.
Приемник работает посимвольно, и приемник и передатчик работают через прерывания, у каждого свой кольцевой буфер. Функции передачи не ждут, если данные помещаются в кольцевой буфер. Если надо ждать конца передачи - есть фунция. Поддерживается работа в многопоточной среде. Можно легко интегрировать в операционную систему (если переписать функции работы с сигналами).
Кристалл у меня AT91SAM7S64 и AT91RM9200, но, думаю, любой Atmel подойдет.
В общем, кому интересно, смело смотрим. Public domain.

О как! Тока запостил, сразу ошибку нашел! Исправил. Как расценить сей шаг всевышнего даже не знаю, но что не случается, все к лучшему wink.gif
Прикрепленные файлы
Прикрепленный файл  uartpdc.rar ( 2.3 килобайт ) Кол-во скачиваний: 457
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andrey_Sudnov
сообщение Dec 20 2007, 07:24
Сообщение #2


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

Группа: Свой
Сообщений: 82
Регистрация: 15-03-05
Пользователь №: 3 361



Глянул на исходники PDC от Linux (древние, правда). Там функция вывода, перед тем как поместить новые данные в буфер и настроить указатели, выключает(!) передатчик. Т.е. если в этот момент произойдет более высокоуровневое прерывание - передатчик будет выключен и данные передаваться не будут. Если же запрещаются все прерывания, значит в течение всего времени копирования выходных данных в буфер нет возможности прерваться на более привелигированную операцию (не помню, запрещаются ли прерывания, но у обоих вариантов есть минусы). К тому же какова цена выключения и включения передатчика? Это просто кажущаяся простота смены значения одного бита, за которой, на самом деле идет много всяких переключений, а это лишняя трата энергии, что иногда немаловажно.

В моем драйвере применяется более сложный алгоритм, который позволяет передатчику продолжать работать в момент копирования буфера, прерывания при этом разрешены. Единственное, что на момент копирования маскируется прерывание самого передатчика.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 20 2007, 12:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrey Sudnov @ Dec 20 2007, 10:24) *
К тому же какова цена выключения и включения передатчика? Это просто кажущаяся простота смены значения одного бита, за которой, на самом деле идет много всяких переключений, а это лишняя трата энергии, что иногда немаловажно.

smile.gif А какова цена побайтного копирования данных из приемника в прерывании?
Я уж не говорю о том, что это потенциальная причина потери данных при даже не очень длительном (174uS @ 115200) запрещении прерываний.
Go to the top of the page
 
+Quote Post
Andrey_Sudnov
сообщение Dec 20 2007, 18:23
Сообщение #4


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

Группа: Свой
Сообщений: 82
Регистрация: 15-03-05
Пользователь №: 3 361



Цитата(aaarrr @ Dec 20 2007, 17:57) *
smile.gif А какова цена побайтного копирования данных из приемника в прерывании?
Я уж не говорю о том, что это потенциальная причина потери данных при даже не очень длительном (174uS @ 115200) запрещении прерываний.

??? Не понял.
В каком месте там теряются данные? В приемнике? Да, приемник работает не через PDC. Но я не вижу там проблем.
Не помню детально работу с UART у SAM. Но по идее потеря произойдет только если не уcпеть считать предыдущей принятый байт. Байты приходят через каждые 2864 такта. Прерывания от UART маскируются для копирования порции данных в выходрой буфер. Если в этот момент поступит байт, обработан он не будет. Сразу же. А только после того, как memcpy скопирует данные, прерывание демаскируются и тут же срабатывает. Размер буфера передатчика всего 128 байт, так что байт не потеряется.
Хотя, конечно надо бы и приемник сделать через PDC. И у вас есть пример.
З.Ы. А то что UART вообще выключается, пока копируется буфер, это как повлияет на возможность потери?
Что за 174uS?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 20 2007, 18:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrey Sudnov @ Dec 20 2007, 21:23) *
Хотя, конечно надо бы и приемник сделать через PDC. И у вас есть пример.

Надо. У меня и приемник есть, зачем мне пример smile.gif

Цитата(Andrey Sudnov @ Dec 20 2007, 21:23) *
З.Ы. А то что UART вообще выключается, пока копируется буфер, это как повлияет на возможность потери?

Никак, если все уже передано.

Цитата(Andrey Sudnov @ Dec 20 2007, 21:23) *
Что за 174uS?

Это время передачи двух байт на скорости 115200. Очень маленькое время, особенно если процессор занят другими задачами.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Andrey Sudnov   Исходники UART with PDC для Atmel ARM   Aug 10 2005, 13:56
- - xoms   Ну уже можно скачивать или подождать.   Aug 10 2005, 15:24
|- - Andrey Sudnov   Цитата(xoms @ Aug 10 2005, 20:24)Ну уже можно...   Aug 10 2005, 17:44
|- - RRRR   Для Linux драйвер с использованием PDC (AT91RM9200...   Aug 11 2005, 14:56
- - bloodden   Полезная вещь. Сенкс.   Mar 3 2007, 20:04
|- - ivstech   Круто, особенно примитивы синхронизации понравилис...   Mar 14 2007, 09:58
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 20 2007, 23:35) Никак...   Dec 20 2007, 18:49
|- - aaarrr   Цитата(Andrey Sudnov @ Dec 20 2007, 21:49...   Dec 20 2007, 18:57
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 20 2007, 23:57) Я не ...   Dec 20 2007, 19:16
- - aaarrr   Цитата(Andrey Sudnov @ Dec 20 2007, 22:16...   Dec 20 2007, 19:28
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 21 2007, 00:28) и при...   Dec 20 2007, 20:31
- - Dron_Gus   Если Вы не против, подкину еще одну тему для обсуж...   Dec 20 2007, 19:51
|- - aaarrr   Цитата(Dron_Gus @ Dec 20 2007, 22:51) Есл...   Dec 20 2007, 22:03
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 21 2007, 03:03) ИМХО,...   Dec 20 2007, 22:53
- - Dron_Gus   2 Andrey Sudnov. Да уж алгоритм не тривиален. Пауз...   Dec 20 2007, 22:55
- - aaarrr   Цитата(Andrey Sudnov @ Dec 21 2007, 01:53...   Dec 21 2007, 00:36
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 21 2007, 05:36) Итак:...   Dec 21 2007, 05:06
- - vet   а что за беда от выключения PDC? ну выключили, пер...   Dec 21 2007, 06:58
|- - Andrey Sudnov   Цитата(vet @ Dec 21 2007, 11:58) а что за...   Dec 21 2007, 08:43
|- - Andrey_Sudnov   Взрыв из прошлого Кому интересен subj, у мну есть...   Dec 7 2015, 04:57
- - MrAlex   Можно вообще не передергивать контроллер и работат...   Dec 7 2015, 16:26
|- - Andrey_Sudnov   Согласен насчет того, что можно принимать через од...   Dec 7 2015, 17:28
- - MrAlex   "Правда в том, что никакой ложки нет." а...   Dec 8 2015, 08:31
- - Andrey_Sudnov   Цитата(MrAlex @ Dec 8 2015, 13:31) ...   Dec 8 2015, 14:34


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:35
Рейтинг@Mail.ru


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