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

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

Может кому для изучения пример работы с SPI у SAM7S пригодиться (+)

Отправлено MARS 10 ноября 2009, г. 15:15


#include<AT91SAM7S256.h>
#include<lib_AT91SAM7S256.h>
#include<TX.h>
#include "ad7680.h"

//AT91PS_SPI SPI = AT91C_BASE_SPI;

void InitAD7680 (void)
{


AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, (unsigned int) 1 << AT91C_ID_PIOA) ; // enable the clock of the PIO
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, (unsigned int) 1 << AT91C_ID_SPI) ; // enable the clock of the SPI

AT91F_SPI_Reset(AT91C_BASE_SPI); //soft reset SPI

AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, (unsigned int) AT91C_PA31_NPCS1 | (unsigned int) AT91C_PA12_MISO | \
(unsigned int) AT91C_PA13_MOSI | (unsigned int) AT91C_PA14_SPCK, 0);

#define DLYBCS 10//задержка между CS
AT91F_SPI_CfgMode (AT91C_BASE_SPI, ((unsigned int)DLYBCS << 24) | AT91C_SPI_PS_VARIABLE | AT91C_SPI_MODFDIS | AT91C_SPI_MSTR); // Write to the MR register Master, CS 0 0x30001

#define AD7680_SCBR 8 // AD7680 SPCK = MCK/SCBR 2304kHz
#define AD7680_CS1 1
#define AD7680_POL (1)
#define AD7680_NCPHA (1L << 1)
#define AD7680_CCSAAT ((unsigned int) 1 << 3)

AT91F_SPI_CfgCs (AT91C_BASE_SPI, AD7680_CS1, ((unsigned int) AD7680_SCBR << 8) | AD7680_POL | AD7680_CCSAAT | AD7680_NCPHA); // pointer to a SPI controller, SPI cs number (0 to 3), Data to CSR Reg 182
AT91F_SPI_Enable(AT91C_BASE_SPI);
}

//
// Вычитывает с АЦП значение 16 бит значение
//
unsigned int ReadDataFromAD7680 (void)
{
unsigned int Rezult;
unsigned int Rezult1, Rezult2, Rezult3;

AT91F_SPI_PutChar_LASTXFER (AT91C_BASE_SPI,0x00,AD7680_CS1, 0);//8байт
while(!(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY));
Rezult = AT91F_SPI_GetChar (AT91C_BASE_SPI);

AT91F_SPI_PutChar_LASTXFER (AT91C_BASE_SPI,0x00,AD7680_CS1, 0);//8байт
Rezult <<= 8;
while(!(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY));

Rezult |= AT91F_SPI_GetChar (AT91C_BASE_SPI);
AT91F_SPI_PutChar_LASTXFER (AT91C_BASE_SPI,0x00,AD7680_CS1, 1);//8байт
Rezult <<= 8;
while(!(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY));

Rezult |= AT91F_SPI_GetChar (AT91C_BASE_SPI);
Rezult >>= 5;
return Rezult;
}


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

Ответы


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

Сообщение:

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

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

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

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