Перейти к содержанию
    

SPI на AT91sam7x

Использую аппаратный 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, но как чего-то не пойму.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LASTXFER=0, CSAAT=0, DLYBCT установить в соответствии с требуемой задержкой между передачами байт.

Если работа с SPI через PDC, то задержка не требуется. А если через прерывание, то скорее всего надо задавать значение задержки.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LASTXFER=0, CSAAT=0, DLYBCT установить в соответствии с требуемой задержкой между передачами байт.

Если работа с SPI через PDC, то задержка не требуется. А если через прерывание, то скорее всего надо задавать значение задержки.

 

А как сделать такую вещь:

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

Это шлется подряд.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Управляйте CS через PIO.

 

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

 

Управляйте 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 управляю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучше скажите с какой железкой идет обмен по SPI. Здесь люди умные, подскажут как лучше организовать обмен данными.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучше скажите с какой железкой идет обмен по SPI. Здесь люди умные, подскажут как лучше организовать обмен данными.

 

 

Память FM25256B

 

Не должен. Где зависает?

 

Не могу сказать где. В симуляторе проходит. А в железе-виснет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу сказать где. В симуляторе проходит. А в железе-виснет.

Надо разобраться. Свое железо не должно быть черным ящиком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не должен. Где зависает?

У коллеги, скорее всего, не выставлен бит MODFDIS - без него в ошибки сваливается при управлении чипселктами в рукопашную. А готовность, кажется, при этом не появляется.

Использую аппаратный SPI.

Вот какая проблема:

Привели бы код инициализации - быстрее бы всё решилось.

Память FM25256B

Пятивольтовая?

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У коллеги, скорее всего, не выставлен бит MODFDIS - без него в ошибки сваливается при управлении чипселктами в рукопашную. А готовность, кажется, при этом не появляется.

 

Привели бы код инициализации - быстрее бы всё решилось.

 

Пятивольтовая?

 

Вот собственно и вся инициализация :

PIO_Configure(pinsSPI0, PIO_LISTSIZE(pinsSPI0));

SPI_Configure(AT91C_BASE_SPI0,AT91C_ID_SPI0,AT91C_SPI_MSTR);

SPI_ConfigureNPCS(AT91C_BASE_SPI0,0,AT91C_SPI_SCBR);

SPI_Enable(AT91C_BASE_SPI0);

PIO_Configure(&CS, 1);

PIO_Configure(&HOLD, 1);

PIO_Set(&HOLD);

 

Микросхема пятивольтовая, но питаю от 3.3 В.

Программный SPI работает, поэтому думаю и аппаратный должен тоже работать.

TWI аппаратный с глюками но работает при питании переферрии от 3.3 В. Т.е. и SPI должен тоже работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...