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

 
 
 
Reply to this topicStart new topic
> SAM PDC, идеологоия использования
beer_warrior
сообщение May 22 2006, 08:15
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



По сложившейся на 8-битниках практике есть два подхода к чтению UART
1. while(! UART_interrupt_flag), а сразу за ним анализ пришедшего символа.
2.По прерыванию кладем байт в буффер, сдвигаем указатель.
Тут возможны два варианта обработки пакета:
2.1 Счет символов для пакета фиксированной длинны.
2.2 В процедуре прерывания проверка на стартовый или завершающий символ с выставлением флага
Как усложненный вариант - поиск заданной последовательности.
Все эти варианты проходились и для каждого известны стандартные решения.
А вот сейчас понадобился прием сложных пакетов на SAM, очень хочеться воспользоваться PDC,
однако не понятно с какой стороны взяться.
Технически понятно инитим PDC, назначаем буфера, привязываем к UART и все данные
сами падают нам в память...
Однако эти данные потом нужно вытянуть и обработать. К какому событию привязаться, как искать
стартовую последовательность. И не проще ли будет в данном случае воспользоваться старыми добрыми наработками с 51-x и AVR.
За примеры и ссылки буду признателен крайне.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 22 2006, 10:23
Сообщение #2


Гуру
******

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



Тут все зависит от формата обмена. Если обмен пакетный - очень удобно привязываться к
RX Timeout. Если же идет поток (например, SLIP) - я предпочитаю складывать данные в
промежуточный FIFO (неважно, с участием PDC, или без), и уже в основной программе заниматься разбором.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 22 2006, 11:33
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Т.е. в случае пакетного обмена мы взводим US_IER->TIMEOUT и когда нарисуется пауза забираем на обработку?
А ежели нужно выловить в последовательности стартовый символ?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
nameless
сообщение May 22 2006, 11:48
Сообщение #4


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

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



Прямо сейчас пытаюсь реализовать:

- Делаем кольцевой буфер
- Топ растет с принятыми по прерыванию байтиками
- Топ_шадоу пока нуль
- Ловим момент, когда разность (кол-во прилетевших байт) попадает в разрешенные для пакетов разной длины
- Проверяем (если попадаем) стартовый символ
- Интерпретируем / обрабатываем весь пакет, а если не успеваем по скорости - копируем в буфер
- Приращаем Топ_шадоу на длину пакета.

Уважаемые профи: покритикуйте пожалуйста.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 22 2006, 11:48
Сообщение #5


Гуру
******

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



Цитата(beer_warrior @ May 22 2006, 15:33) *
Т.е. в случае пакетного обмена мы взводим US_IER->TIMEOUT и когда нарисуется пауза забираем на обработку?

Да, именно так.

Цитата(beer_warrior @ May 22 2006, 15:33) *
А ежели нужно выловить в последовательности стартовый символ?

Так как автоматики для поиска символа нет, вариантов два:
- Не использовать PDC
- Искать вручную в буфере
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение May 22 2006, 11:55
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Спасибо, вопросов больше не имею.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 23 2006, 14:22
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(beer_warrior @ May 22 2006, 11:15) *
Однако эти данные потом нужно вытянуть и обработать. К какому событию привязаться, как искать
стартовую последовательность. И не проще ли будет в данном случае воспользоваться старыми добрыми наработками с 51-x и AVR.
За примеры и ссылки буду признателен крайне.

imho конкретно в случае с UART'ом лучше воспользоваться старыми наработками варианта 2.2. По причине того, что PDC есть не во всех ARM'ах, да и выделение пакетов, принятых с помощью PDC в итоге займет больше времени чем по прерыванию.
Go to the top of the page
 
+Quote Post

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

 


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


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