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

 
 
> SPI sam7 можно ли ввести паузу между CS ?
cebotor
сообщение Apr 16 2007, 13:44
Сообщение #1


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



есть SAM7A3 есть чип , которым нужно управлять по SPI.
для работы с этим чипом требуется часто и непериодично дергать чип селектом.

Вопрос:
Можно ли в SAM7 ввести задержку между пропаданием чип селекта и выставлением его заново?

По датащиту вроде ни один бит для этого не предназначен. Ничего не пойму - неужели атмеловцы вобще не рассчитывают на то что устройству может потребоваться перерыв между чип селектами ?

Или я чего то не понимаю?


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Apr 18 2007, 11:25
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE)); // wait for transmit data register is not empty
*AT91C_SPI_TDR = (WORD)(dwData & 0xFFFF);
while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF)); // wait for received data
Go to the top of the page
 
+Quote Post
cebotor
сообщение Apr 18 2007, 12:15
Сообщение #3


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(sergeeff @ Apr 18 2007, 12:25) *
while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE)); // wait for transmit data register is not empty
*AT91C_SPI_TDR = (WORD)(dwData & 0xFFFF);
while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF)); // wait for received data

все - разобрался, дело было не в этом а в граблях ревизии атмела..
у меня были примеры от иара где в SPI_MR выставлялся бит делителя на 32 - fdiv.
SPI_MR = ...........9; // 9 - мастер моде и fdiv
так вот к моменту последнего датащита этот fdiv атмел изъял из описания.
Самое смешное , что если его выставить - частота действительно падает в 32 раза , но начинает глючить (пауза DLYBCS точно не отрабатывается, там наверное и еще чтото ).


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
yura-w
сообщение Jan 25 2008, 09:26
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Цитата(cebotor @ Apr 18 2007, 15:15) *
пауза DLYBCS точно не отрабатывается, там наверное и еще чтото ).


подскажите, пожалуста, в чем причина:

на at91sam7x (на 50МГц) настроил DLYBCS = 0, длительность СS =1 мкс.
получаю время от входа в ф-ию передачи по spi до формрования CS ~ 1,2 мкс!!
(такое же время от снятия CS до выхода из ф-ии)

передаю так:
unsigned int SPI0_Send(unsigned int data, unsigned char pcs, unsigned char lastxfer)
{
lastxfer = (unsigned char)lastxfer & (unsigned char)0x1; // get lo 1 bit
// whait for tx register empty & create register content
while(!(SPI0->SPI_SR & AT91C_SPI_TDRE)){};
SPI0->SPI_TDR = (data & 0xffff) | lastxfer << 24 | pcs << 16 ;
// wait for rx register full
while(!(SPI0->SPI_SR & AT91C_SPI_RDRF)){};//do while nonzero
return(0xffff & SPI0->SPI_RDR);
}
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 25 2008, 12:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(yura-w @ Jan 25 2008, 16:26) *
подскажите, пожалуста, в чем причина:
Почитай вот здесь http://electronix.ru/forum/index.php?showtopic=35141&hl=

Я для себя уяснил одно - не парится с аппаратным дрыганием CS а делать выбор чипа программно


--------------------
Go to the top of the page
 
+Quote Post
yura-w
сообщение Jan 25 2008, 13:12
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Цитата(prottoss @ Jan 25 2008, 15:48) *
Почитай вот здесь http://electronix.ru/forum/index.php?showtopic=35141&hl=
Я для себя уяснил одно - не парится с аппаратным дрыганием CS а делать выбор чипа программно

спасибо, буду разбираться,
в лоб попробовал программно дергать, выигрыш в скорости не увидел
Go to the top of the page
 
+Quote Post
xelax
сообщение Jan 25 2008, 13:25
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(yura-w @ Jan 25 2008, 16:12) *
спасибо, буду разбираться,
в лоб попробовал программно дергать, выигрыш в скорости не увидел


Не в скорости выигрышь, а в работоспособности. smile.gif
Если посмотреть errata на spi, то сами разработчики контроллера рекомендуют в некоторых случаях использовать CS в PIO режиме как Workarround проблемы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- cebotor   SPI sam7 можно ли ввести паузу между CS ?   Apr 16 2007, 13:44
- - ivstech   На AT91SAM7S можно задавать такую задержку   Apr 17 2007, 13:39
|- - cebotor   Цитата(ivstech @ Apr 17 2007, 14:39) На A...   Apr 17 2007, 17:10
- - sergeeff   В регистре SPI_MR есть поле DLYBCS - dalay between...   Apr 17 2007, 16:13
- - sergeeff   Если не дождаться окончания передачи данных по SPI...   Apr 17 2007, 21:30
|- - cebotor   Цитата(sergeeff @ Apr 17 2007, 22:30) Есл...   Apr 18 2007, 09:47
- - prottoss   Кстати, раз уж снова заговорили об SPI на SAM7. Во...   Jan 25 2008, 13:36
|- - yura-w   Цитата(prottoss @ Jan 25 2008, 16:36) а п...   Jan 25 2008, 13:50
|- - prottoss   Цитата(yura-w @ Jan 25 2008, 20:50) ...   Jan 25 2008, 14:17
|- - xelax   Цитата(yura-w @ Jan 25 2008, 16:50) ...   Jan 25 2008, 14:21
- - prottoss   Сделал еще лучше, мое мнение. Создал деск, в котор...   Jan 25 2008, 17:27
- - yura-w   Спасибо, за помощь и разъяснение   Jan 28 2008, 09:42


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

 


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


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