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

 
 
> Исходники 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
Ответов
aaarrr
сообщение Dec 21 2007, 00:36
Сообщение #2


Гуру
******

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



Цитата(Andrey Sudnov @ Dec 21 2007, 01:53) *
Т.е. делать по моему? Я вспомнил! Сделал побайтно из-за того, что так проще принимать строки.

Нет, делать побайтно я не советовал.

Цитата(Andrey Sudnov @ Dec 21 2007, 01:53) *
Совсем забыл как работает этот PDU. Сейчас глянул. Без отключения приемника не обойтись, так как установить адрес на следующий буфер и счетчик надо одновременно! Это если адрес буфера будет все время разный, "произвольный", для обработчика прерываний, неизвестный ему заранее. Если использовать один и тот же буфер или пару, то без выключения приемника обойтись можно.

Объясните мне, какой смысл писать адрес и счетчик в разное время?

Понял Ваше определение "произвольного" буфера. ИМХО, те буферы, с которыми работает PDC должны быть однозначно фиксированными - задача PDC и буферизации состоит прежде всего в разгрузке процессора и обеспечении надежного приема, а дальнейшая судьба данных - дело пользовательского приложения, и обработчик прерывания заботиться о ней не должен.

Цитата(Andrey Sudnov @ Dec 21 2007, 01:53) *
Плюс с PDC появляется проблема с приемом строк произвольной длины. Как ее организовать? Ловить прерывание по таймауту, копировать (!) буфер от значения до текущего адреса? Или PDC переходит на следующий буфер по таймауту?
Опишите пожалуйста парой слов Ваш алгоритм, так сказать путь данных от UART до пользовательского буфера. Куда указывает адрес и следующий адрес в PDC (в течение всего цикла)?

Попробую, парой слов не обойдется, правда. smile.gif
Итак:
1. Заводим два одинаковых буфера.
2. Прописываем в PDC_RPR и PDC_RCR адрес и длину первого буфера, в PDC_RNPR и PDC_RNCR - второго.
3. При поступлении прерывания ENDRX копируем данные из буфера PDC в пользовательский (у меня это обычно FIFO, если принимается поток, или набор фиксированных буферов, если обмен идет в пакетном режиме). Адрес и длину освободившегося буфера записываем в PDC_RNPR и PDC_RNCR.
Наличие места в FIFO или свободного буфера на этом этапе - целиком проблема пользовательского приложения.
4. По TIMEOUT все несколько сложнее:
4.1 Запрещаем - увы - прерывания
4.2 Выключаем PDC
4.3 Запоминаем PDC_RCR
4.4 Если PDC_RNCR != 0, то ставим PDC_RPR = PDC_RNPR, PDC_RCR = PDC_RNCR, PDC_RNCR = 0,
в противном случае игнорируем п.4.6
4.5 Включаем PDC и прерывания
4.6 Копируем данные и прописываем PDC_RNPR и PDC_RNCR аналогично п.3
Время запрета PDC и прерываний получается очень малым.
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   Глянул на исходники PDC от Linux (древние, правда)...   Dec 20 2007, 07:24
|- - aaarrr   Цитата(Andrey Sudnov @ Dec 20 2007, 10:24...   Dec 20 2007, 12:57
|- - Andrey Sudnov   Цитата(aaarrr @ Dec 20 2007, 17:57) А ка...   Dec 20 2007, 18:23
|- - aaarrr   Цитата(Andrey Sudnov @ Dec 20 2007, 21:23...   Dec 20 2007, 18:35
|- - 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
|- - 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:46
Рейтинг@Mail.ru


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