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

 
 
 
Reply to this topicStart new topic
> Как работать с 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
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
SpiritDance
сообщение Jul 18 2006, 09:22
Сообщение #3


Дух погибшего транзистора
****

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



Гхм как это по 2 буфера? Нет там такого, буфер на прием, буфер на передачу и все, для каждого модуля: USART0, USART1, DBGU, SPI, SSC. Для АЦП, естественно, только на прием.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 18 2006, 09:28
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



SpiritDance
Есть. По 2 штуки на прием и передачу.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 18 2006, 09:40
Сообщение #5


Дух погибшего транзистора
****

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



Да что-то я много упускаю из виду, устал наверно. sad.gif
вторые буферы используются когда закончилось место(или данные) в первом, пришли новые данные, а прерывание не было обработано, насколько я понимаю.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 18 2006, 09:46
Сообщение #6


Гуру
******

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



Цитата(beer_warrior @ Jul 18 2006, 12:53) *
Передача.
Делается буфер, в него кладуться данные.В хх_TPR записыватся указатель на буфер, в хх_TCR его размер. Дальше срабатывает автомат.По достижении 0 хх_TCR выставляется флажок ENDTX.
Его можно поллить или запускать прерывание. По его взводу мы принимаем решение о передаче новой посылки или об останове.
Если передаем дальше, заново инитим указатель и размер.


Это для случая с использованием одного буфера.
Для двух последовательность действий будет следующая:
1. В хх_TPR и хх_TCR записываем адрес и размер первого буфера, в хх_TNPR и xx_TNCR - второго.
2. Во время передачи одного буфера заполняем второй данными
3. По прерыванию ENDTX обновляем хх_TNPR и xx_TNCR, возвращаемя к п.2
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 18 2006, 09:54
Сообщение #7


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

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



2 aaarrr:
Спасибо за дополнение.
Может посоветуюте что-н по моему вопросу о AD73311?
Цитата
есть 2 буфера приёма и 2 буфера отправки.

Не путайтесь. Никаких специальных буферов нет, есть 2 пары аппаратных указателей с автоинкрементом.Буфер делается ручками.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Pasha 111
сообщение Jul 18 2006, 12:19
Сообщение #8


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

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



Всем большое спасибо за помощь!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:53
Рейтинг@Mail.ru


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