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

 
 
 
Reply to this topicStart new topic
> at91sam7s256 spi на два устройства
en0t
сообщение Apr 14 2009, 10:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Всем здрасте,
пытаюсь управлять двумя устройствами по spi при этом первое работает а вот второе упорно не хочетю Может подскажете чего. Сам думаю что не правильная настройка регистров.


Код
// Configure SPI PIOs
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AT91C_PA9_NPCS1 | AT91C_PA11_NPCS0 | AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK, 0);
// Configure PMC by enabling SPI clock

AT91F_SPI_CfgPMC ();
AT91F_SPI_Reset(AT91C_BASE_SPI);
AT91F_SPI_CfgMode(AT91C_BASE_SPI, AT91C_SPI_MSTR |AT91C_SPI_PS| AT91C_SPI_PS_VARIABLE | AT91C_SPI_MODFDIS | ((0x10 << 24) & AT91C_SPI_DLYBCS));

AT91F_SPI_CfgCs(AT91C_BASE_SPI, 0, AT91C_SPI_CPOL | AT91C_SPI_BITS_8 | ((0x40 << 8) & AT91C_SPI_SCBR) | //Serial Clock Baud Rate
(AT91C_SPI_DLYBS & (128 << 16)) |
((0x2 << 24) & AT91C_SPI_DLYBCT)); //Delay Between Consecutive Transfers

AT91F_SPI_CfgCs(AT91C_BASE_SPI, 1, AT91C_SPI_CPOL | AT91C_SPI_BITS_8 | ((0x40 << 8) & AT91C_SPI_SCBR) | //Serial Clock Baud Rate
(AT91C_SPI_DLYBS & (128 << 16)) |
((0x2 << 24) & AT91C_SPI_DLYBCT)); //Delay Between Consecutive Transfers


AT91F_SPI_Enable(AT91C_BASE_SPI);


AT91F_SPI_PutChar(AT91C_BASE_SPI,data[1],0);// на первое устройство - все ок
AT91F_SPI_PutChar(AT91C_BASE_SPI,data[1],1);//на второе устройство - не работает

просьба зарание не отправлять в даташел. был там уже rolleyes.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 14 2009, 10:57
Сообщение #2


Гуру
******

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



Цитата(en0t @ Apr 14 2009, 14:49) *
не работает

Не работать оно может сильно по-разному, что конкретно не так?
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 14 2009, 11:02
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А вы подряд отправляете?
AT91F_SPI_PutChar не роверяет готовность SPI к отправке данных!
Надо подождать пока регистр освободится.
И errata посмотреть у разных серий разные фичи smile.gif
Go to the top of the page
 
+Quote Post
en0t
сообщение Apr 14 2009, 11:04
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



я так понял что не управляется выборка второго устройства CS1 аппаратно.

Цитата(KRS @ Apr 14 2009, 15:02) *
А вы подряд отправляете?
AT91F_SPI_PutChar не роверяет готовность SPI к отправке данных!
Надо подождать пока регистр освободится.
И errata посмотреть у разных серий разные фичи smile.gif


даже так пробывал , всё равно тишина

Код
AT91PS_SPI pSPI = AT91C_BASE_SPI;
while( !( pSPI->SPI_SR & AT91C_SPI_TDRE ) ); // transfer compl. wait
pSPI->SPI_TDR = (dat & 0xFFFF) | (((~(1 << 1)) & 0xF)<< 16);
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 14 2009, 11:12
Сообщение #5


Гуру
******

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



Цитата(en0t @ Apr 14 2009, 15:04) *
я так понял что не управляется выборка второго устройства CS1 аппаратно.

Посмотрите осциллографом, что происходит на выводах SPI. Проверьте, что PA9 не задействуется где-нибудь еще под DRXD.
Go to the top of the page
 
+Quote Post
en0t
сообщение Apr 14 2009, 11:18
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Цитата(aaarrr @ Apr 14 2009, 15:12) *
Посмотрите осциллографом, что происходит на выводах SPI. Проверьте, что PA9 не задействуется где-нибудь еще под DRXD.

я вот тоже подумал о DRXD , я его не использую да и в проге вроде нет не где.(а где посмотреть то , может есть конкретные места)
осцилогрофом смотрел тишина на ножке этой. Но вот что интересно ,если посмотреть спомошью вольтметра то до начала всех передач на ней 1.86 вольта а на CS0 как положенно 3.3в.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 14 2009, 11:26
Сообщение #7


Гуру
******

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



NPCS1 на Peripheral B, поэтому должно быть так:
Код
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PA11_NPCS0 | AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK, AT91C_PA9_NPCS1)


А еще лучше не пользоваться говнолибами от фирмы Атмел.
Go to the top of the page
 
+Quote Post
en0t
сообщение Apr 14 2009, 11:36
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Цитата(aaarrr @ Apr 14 2009, 15:26) *
NPCS1 на Peripheral B, поэтому должно быть так:
Код
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PA11_NPCS0 | AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK, AT91C_PA9_NPCS1)


А еще лучше не пользоваться говнолибами от фирмы Атмел.


bb-offtopic.gif
Огромное спасибо мил человек Все удалось
А так же всем спасибо кто принимал участие и как говорится + в репу rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


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


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