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

 
 
> Отправляю пакет пр SPI
glebka
сообщение May 9 2006, 13:14
Сообщение #1


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

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



не могу понять,отправляю пакет через SPI, теряются биты.

AT91PS_SPI pSpi = AT91C_BASE_SPI;
AT91PS_AIC pAic = AT91C_BASE_AIC;

unsigned int temp;
unsigned int spib;

temp = pAic->AIC_IMR;

while(pSpi->SPI_SR & AT91C_SPI_TDRE==0);
pSpi->SPI_TDR = (data & 0xFFFF) | (CS << 16);

while(pSpi->SPI_SR & AT91C_SPI_RDRF==0);

pAic->AIC_IECR = temp;
spib=((pSpi->SPI_RDR) & 0xFFFF);
return spib;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
glebka
сообщение May 10 2006, 10:09
Сообщение #2


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

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



У меня SPI init так: может что не так

void SPI_Init(unsigned char BitsPerTransfer)
{
volatile unsigned int data_temp;
unsigned char i;

// Enable peripheral clocks for SPI mode
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_SPI ) ;

// Configure Periphery I/O, SPI mode enable.
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AT91C_PA11_NPCS0 |AT91C_PA13_MOSI | AT91C_PA14_SPCK | AT91C_PA12_MISO,AT91C_PA9_NPCS1|AT91C_PA10_NPCS2);
AT91F_SPI_Enable(AT91C_BASE_SPI);

// Mode register (Mode:Master/Slave), Peripherial select (0-Fixed,1-variable),Delay between chip selects)
//AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_PS_VARIABLE | (AT91C_SPI_DLYBCS & (0x15<<24));
AT91C_BASE_SPI->SPI_MR = 0x15000003;



AT91C_BASE_SPI->SPI_IER = AT91C_SPI_RDRF | AT91C_SPI_MODF | AT91C_SPI_OVRES;
AT91C_BASE_SPI->SPI_CSR[0]= AT91C_SPI_NCPHA|(AT91C_SPI_BITS & AT91C_SPI_BITS_8)|(AT91C_SPI_SCBR & (0x15 <<8 )) | (AT91C_SPI_DLYBS & (0x5 << 16))|(AT91C_SPI_DLYBCT &(0x20<< 24));
AT91C_BASE_SPI->SPI_CSR[1]= AT91C_SPI_NCPHA|(AT91C_SPI_BITS & AT91C_SPI_BITS_8)|(AT91C_SPI_SCBR & (0x15 <<8 )) | (AT91C_SPI_DLYBS & (0x5<< 16))|(AT91C_SPI_DLYBCT & (0x20<< 24));
AT91C_BASE_SPI->SPI_CSR[2]= AT91C_SPI_NCPHA|(AT91C_SPI_BITS & AT91C_SPI_BITS_8)|(AT91C_SPI_SCBR & (0x15 <<8 )) | (AT91C_SPI_DLYBS & (0x5 << 16))|(AT91C_SPI_DLYBCT &(0x20<< 24));


AT91F_PDC_Open((AT91PS_PDC) &(AT91C_BASE_SPI->SPI_RPR));

data_temp = AT91C_BASE_SPI->SPI_RDR; // Read data from Receive Data Register for prevent Overrun error
}
Go to the top of the page
 
+Quote Post
Edmundo
сообщение May 10 2006, 19:26
Сообщение #3


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Итак, я провел анализ на работе, у меня, как и предполагалось, "виноват" передатчик. SAM'овский SPI отрабатывает на прием все как задумано. Могу привести свои исходники, но они для Slave-режима и только на прием (без передачи). Вряд ли Вам будет это интересно.

Однако для справки могу сказать, что когда писал свою программу, ориентировался на пример отсюда. Скорректировал под себя, разумеется (пришлось подробно ознакомиться с даташитом), но заработало с первого раза (SPI под ARM вообще делаю первый раз smile.gif ).


--------------------
شامل
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:45
Рейтинг@Mail.ru


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