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

 
 
> SPI на AT91sam7x
LoLo
сообщение Apr 29 2011, 08:40
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Использую аппаратный SPI.
Вот какая проблема:
Как сделать чтобы CS можно было устанавливать в 1 или в 0 в зависимости от количества байт, т.е.
Иногда нада послать всего 1 байт , а иногда 3 байта, чтобы СS между ними не менялся.

CS=0 байт СS=1
CS=0 байт байт байт СS=1

У меня получается такая картина:
CS=0 байт CS=1 CS=0 байт CS=1 CS=0 байт СS=1

Как-то это можно сделать используя биты CSAAT и LASTXFER, но как чего-то не пойму.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Apr 29 2011, 11:32
Сообщение #2


Гуру
******

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



Управляйте CS через PIO.
Go to the top of the page
 
+Quote Post
LoLo
сообщение Apr 29 2011, 12:09
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(aaarrr @ Apr 29 2011, 15:32) *
Управляйте CS через PIO.


Пробывал так. Почему-то зависает SPI.

Цитата(aaarrr @ Apr 29 2011, 15:32) *
Управляйте CS через PIO.


вот процедуры посылки и приема байта.
void SPI_Write(AT91S_SPI *spi, unsigned int npcs, unsigned short data)
{
while ((spi->SPI_SR & AT91C_SPI_TXEMPTY) == 0);
spi->SPI_TDR = data | SPI_PCS(npcs);//| AT91C_SPI_LASTXFER;
while ((spi->SPI_SR & AT91C_SPI_TDRE) == 0);
}

unsigned short SPI_Read(AT91S_SPI *spi)
{
while ((spi->SPI_SR & AT91C_SPI_RDRF) == 0);
return spi->SPI_RDR & 0xFFFF;
}
Соответственно еще cs управляю.
Go to the top of the page
 
+Quote Post



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

 


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


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