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

 
 
 
Reply to this topicStart new topic
> Прием по SSC
ktchv
сообщение Aug 30 2007, 11:15
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



Здравствуйте!

(at91sam7s256)
Настроил ssc на передачу - всё работает как нужно. настроил на примем.. (данные с внешнего устройства идут)

срабатывает прерывание. в статусе

RXRDY: Receive Ready - Data has been received and loaded in SSC_RHR.

как эти данные получить из RHR? или из другого буфера...

спасибо)
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 13:36
Сообщение #2


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Цитата(ktchv @ Aug 30 2007, 15:15) *
как эти данные получить из RHR? или из другого буфера...

07.gif Прочитать RHR. Или настроить PDC и читать из другого буфера.
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 30 2007, 13:39
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



Цитата(a3r3 @ Aug 30 2007, 17:36) *
07.gif Прочитать RHR. Или настроить PDC и читать из другого буфера.



А как настроить то?
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 14:39
Сообщение #4


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Цитата(ktchv @ Aug 30 2007, 17:39) *
А как настроить то?

Прочитать в документации раздел Peripheral DMA Controller и настроить. Примеры здесь выкладывали, воспользуйтесь поиском.
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 30 2007, 18:26
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



Цитата(a3r3 @ Aug 30 2007, 18:39) *
Прочитать в документации раздел Peripheral DMA Controller и настроить. Примеры здесь выкладывали, воспользуйтесь поиском.



вот допустим. пишу:

AT91F_PDC_Open(AT91C_BASE_PDC_SSC);

AT91F_SSC_ReceiveFrame (AT91C_BASE_SSC,(char*) buffer, lb , 0, 0) ;

дальше срабатывает прерывание ENDRX, потом RXRDY, потом OVRUN.

во время прерываний что с этим делать? в примерах ничего на прием не нашел.
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 18:47
Сообщение #6


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Ваша задача как раз не допустить появления RXRDY и OVRUN, своевременно добавляя новые буферы. Лучше задействовать двойную буферизацию и добавлять буфер по ENDRX.
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 30 2007, 19:11
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



это я понимаю. данные то откуда считать?
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 19:26
Сообщение #8


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



А указатель на буфер для красоты передается???
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 30 2007, 20:17
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



как нужно сделать по шагам?

вот пишу в начале

AT91C_BASE_PDC_SSC->PDC_RPR=(unsigned int)buffer;
AT91C_BASE_PDC_SSC->PDC_RCR=bufferlen;

срабатывает прерывание RXRDY.

буфер пустой.


что делать дальше?
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 21:09
Сообщение #10


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Что значит "буфер пустой"? Может быть, правильнее сказать "заполнен нулевыми значениями"?
Тогда можно предположить, что неправильно настроен приемник.
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 30 2007, 22:06
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



Цитата(a3r3 @ Aug 31 2007, 01:09) *
Что значит "буфер пустой"? Может быть, правильнее сказать "заполнен нулевыми значениями"?
Тогда можно предположить, что неправильно настроен приемник.

то есть в принципе а буфер после этого пишутся принятые данные? и в прерывании RXRDY мой буфер должен быть заполнен принятыми данными?
Go to the top of the page
 
+Quote Post
a3r3
сообщение Aug 30 2007, 23:17
Сообщение #12


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Нет. После заполнения буфера будет выставлен ENDRX. RXRDY придет чуть позже, когда SSC получит новые данные, а PDC не сможет их принять, т.к. не запрограммирован.
Go to the top of the page
 
+Quote Post
ktchv
сообщение Aug 31 2007, 06:08
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 9-08-07
Пользователь №: 29 683



Цитата(a3r3 @ Aug 31 2007, 03:17) *
Нет. После заполнения буфера будет выставлен ENDRX. RXRDY придет чуть позже, когда SSC получит новые данные, а PDC не сможет их принять, т.к. не запрограммирован.


То есть в ENDRX буфер надо считать, и там же написать снова

AT91C_BASE_PDC_SSC->PDC_RPR=(unsigned int)buffer;
AT91C_BASE_PDC_SSC->PDC_RCR=len;

?
Go to the top of the page
 
+Quote Post

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

 


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


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