Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

AT91SAM7S256 глюки с SPI

Отправлено dimasteg 19 июня 2007 г. 19:07


Запрограммировал все 4 SPI_CS на 4 разных переф устройства, в той реализации которая есть в даташите все должно работать, конфигурация всех CS-ов одинаковая (код прилогаетя) , реально же работают c CS0 и CS1 , CS2 b CS3 не дергаются вообще, подскажите как быть, реализовал дерганье в ручную (CODR ... SODR), но хотелось бы все-таки аппаратно, подскажите кто сталкивался с таким....
[CODE]
void spi_func (void)
{
// Enable clock for SPI
*AT91C_PMC_PCER = (1< // Set PIO pin functions
*AT91C_PIOA_PDR =
AT91C_PA3_NPCS3 |// set function of PA3 as SPI slave CS3;
AT91C_PA30_NPCS2 |// set function of PA30 as SPI slave CS2;
AT91C_PA31_NPCS1 |// set function of PA31 as SPI slave CS1;
AT91C_PA11_NPCS0 |// set function of PA11 as SPI slave CS0;
AT91C_PA12_MISO |// set function of PA12 as SPI MISO;
AT91C_PA13_MOSI |// set function of PA13 as SPI MOSI;
AT91C_PA14_SPCK;// set function of PA14 as SPI SPCK;


// Set SPI control register:
*AT91C_SPI_CR = AT91C_SPI_LASTXFER | // CS go hight when transfer has completed
AT91C_SPI_SPIDIS; // disable SPI
Delay(0xF);

// Set SPI mode register
*AT91C_SPI_MR =
(0x3<<0) |
(0x1<<4) |
(0xFB<<16)|
(0x0E<<24);

//------------------//
// //
// cs0 = R-VAR1 //
// cs1 = R-VAR2 //
// cs2 = DAC //
// cs3 = ADC //
// //
//------------------//


AT91C_BASE_SPI->SPI_CSR[0]= //9 bit
(0x2<<24) | // delay betwean two transfers
(0x5<<16) | // delay betwean CS and clock
(0x4<<8) | // baud rate is MCK/2
AT91C_SPI_BITS_9| // 9 bit per transfer
(0x0<<3) | // chip select rise after transfer
(0x0<<1) | // first change, then capture
(0x0<<0); // clock polarity is LOW

AT91C_BASE_SPI->SPI_CSR[1]= //9 bit
(0x2<<24) | // delay betwean two transfers
(0x5<<16) | // delay betwean CS and clock
(0x4<<8) | // baud rate is MCK/2
AT91C_SPI_BITS_9| // 9 bit per transfer
(0x0<<3) | // chip select rise after transfer
(0x0<<1) | // first change, then capture
(0x0<<0); // clock polarity is LOW

AT91C_BASE_SPI->SPI_CSR[2]= //16 bit
(0x2<<24) | // delay betwean two transfers
(0x5<<16) | // delay betwean CS and clock
(0x4<<8) | // baud rate is MCK/2
AT91C_SPI_BITS_16| // 16 bit per transfer
(0x0<<3) | // chip select rise after transfer
(0x0<<1) | // first change, then capture
(0x0<<0); // clock polarity is LOW

AT91C_BASE_SPI->SPI_CSR[3]= //16 bit
(0x3<<24) | // delay betwean two transfers
(0x1<<16) | // delay betwean CS and clock
(0x2<<8) | // baud rate is MCK/2
AT91C_SPI_BITS_16| // 16 bit per transfer
(0x0<<3) | // chip select rise after transfer
(0x0<<1) | // first change, then capture
(0x0<<0); // clock polarity is LOW


*AT91C_SPI_CR =
AT91C_SPI_LASTXFER | // CS go hight when transfer has completed
AT91C_SPI_SPIEN; // enable SPI

}
[/CODE]

P.S.: при передачк пишу в SPI_TDR не останавливая SPI.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru