|
Исходники UART with PDC для Atmel ARM, Состряпал от нифиг делать :) |
|
|
|
Aug 10 2005, 13:56
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 15-03-05
Пользователь №: 3 361

|
Кому нужны готовые, либо как примеры работы с UART через PDC (т.е. ПДП) смело в юз. Помучился с ними пару дней. Работает уже пару недель. Без ошибок. Приемник работает посимвольно, и приемник и передатчик работают через прерывания, у каждого свой кольцевой буфер. Функции передачи не ждут, если данные помещаются в кольцевой буфер. Если надо ждать конца передачи - есть фунция. Поддерживается работа в многопоточной среде. Можно легко интегрировать в операционную систему (если переписать функции работы с сигналами). Кристалл у меня AT91SAM7S64 и AT91RM9200, но, думаю, любой Atmel подойдет. В общем, кому интересно, смело смотрим. Public domain. О как! Тока запостил, сразу ошибку нашел! Исправил. Как расценить сей шаг всевышнего даже не знаю, но что не случается, все к лучшему
|
|
|
|
|
 |
Ответов
|
Dec 20 2007, 22:03
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Dron_Gus @ Dec 20 2007, 22:51)  Если Вы не против, подкину еще одну тему для обсуждения. Есть такое замечательное устройство GSM-модем SIM508. Так вот он при приеме пакета данных сообщает об этом следующим образом "+IPD<размер>:". Есть идея обработки обычных сообщений через обычные прерывания. Т.е. посимвольно. Ибо неизвестно, когда же закончится входящее сообщение. А парсить его на предмет <CR><LF> расточительно. Зато принимать пакеты заранее известной длинны оч. удобно через PDC. Есть вопрос: теоретически возможна ли потеря символов при переключении режимов работы. Что-то я в документации ничего толкового не нашел по этому вопросу... В свое время я извращался подобным образом на AT91x40xxx. У них PDC был без двойной буферизации, так что приходилось останавливать прием до окончания буфера и быстренько подключать следующий. ИМХО, можно, но лучше так не делать. Парсить <CR><LF> будет значительно проще. Цитата(Andrey Sudnov @ Dec 20 2007, 23:31)  Ведь если при передаче выключается передатчик, то при преме должен выключаться приемник. Ведь так? Почему это? Цитата(Andrey Sudnov @ Dec 20 2007, 23:31)  К тому же передача из произвольных буферов я еще представляю, а прием в произвольные - это как? Что Вы понимаете под термином "произвольный буфер"? Цитата(Andrey Sudnov @ Dec 20 2007, 23:31)  Обработчик прерываний не должен выполнять никакой длительной работы работы внутри себя. Это даже по Windows (далеко не реал-тайм) - закон! Если же в программе допускаются такие задержки, то ни при каком способе работы с UART нельзя гарантировать, что не произойдет потери принятого байта. Ведь задержка может произойти между переключениями буферов в пользовательском коде (а такое переключение более длительное, чем метод, используемый у меня). Да кто же спорит? Просто в одном случае допустима задержка в 2 символа, а во втором - в 1 буфер PDC, размер которого можно регулировать. А ОС, пользовательский код и прочее к делу не относится.
|
|
|
|
|
Dec 20 2007, 22:53
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 15-03-05
Пользователь №: 3 361

|
Цитата(aaarrr @ Dec 21 2007, 03:03)  ИМХО, можно, но лучше так не делать. Парсить <CR><LF> будет значительно проще. Т.е. делать по моему? Я вспомнил! Сделал побайтно из-за того, что так проще принимать строки. Цитата Почему это? Что Вы понимаете под термином "произвольный буфер"? Совсем забыл как работает этот PDU. Сейчас глянул. Без отключения приемника не обойтись, так как установить адрес на следующий буфер и счетчик надо одновременно! Это если адрес буфера будет все время разный, "произвольный", для обработчика прерываний, неизвестный ему заранее. Если использовать один и тот же буфер или пару, то без выключения приемника обойтись можно. Плюс с PDC появляется проблема с приемом строк произвольной длины. Как ее организовать? Ловить прерывание по таймауту, копировать (!) буфер от значения до текущего адреса? Или PDC переходит на следующий буфер по таймауту? Опишите пожалуйста парой слов Ваш алгоритм, так сказать путь данных от UART до пользовательского буфера. Куда указывает адрес и следующий адрес в PDC (в течение всего цикла)?
|
|
|
|
Сообщений в этой теме
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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|