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

 
 
> Как работать с PDC у SAM7S?
Pasha 111
сообщение Jul 18 2006, 07:13
Сообщение #1


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

Группа: Свой
Сообщений: 154
Регистрация: 6-11-05
Из: Москва
Пользователь №: 10 515



Как я понял, для каждого контроллера (например usart'а) есть 2 буфера приёма и 2 буфера отправки.

Приём данных я делаю так:
Сначала указываю макс. размер данных и адрес памяти, куда класть.
Потом, при приёме данных, смотрю, на сколько изменилось число (на сколько уменьшилось) в регистре, куда я макс. размер данных положил.
Считываю это число байт слева от текущего места записи (т.е. ели массив имеет адрес 0x100, а записалось уже 8 байт, то считываю память по адресу 0x100-0x108).
Также делаю прерывание по переполнению буфера, где переношу указатель справа налево (т.е. зацикливаю запись по кругу). При считывании данных из буфера также учитываю этот момент.

А что делать с записью данных? Писать-то нужно их справа от текущего указателя, а он постоянно и независимо от меня, перемещается. Т.е. я могу записать данные, а часть байт останутся слева от указателя. Как вообще грамотно организовать работу с этими буферами приёма и отправки и зачем сделано по 2 таких буфера?

Сообщение отредактировал Pasha 111 - Jul 18 2006, 07:14
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jul 18 2006, 08:53
Сообщение #2


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

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



Передача.
Делается буфер, в него кладуться данные.В хх_TPR записыватся указатель на буфер, в хх_TCR его размер. Дальше срабатывает автомат.По достижении 0 хх_TCR выставляется флажок ENDTX.
Его можно поллить или запускать прерывание. По его взводу мы принимаем решение о передаче новой посылки или об останове.
Если передаем дальше, заново инитим указатель и размер.
Прием.
Аналогично.В хх_RPR указательна буфер приема, в хх_RCR его размер. После этого разрешаем прием. Прерывание в этом случе можно использовать ENDRX, если посылка фиксированного размера, TIMEOUT, если неизвестного, или отлов символа завершителя или флагов ошибки.
Тут надо обратить внимание, что для разных типов прерываний флажки снимаються по разному.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 09:13
Рейтинг@Mail.ru


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