Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; 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;
}
Составить ответ | Вернуться на конференцию.
Ответы
- AD7680 где брал? - werewolf (10.11.2009, 15:44:7 91.124.237.26, пустое)
- Result - MegaJohn (10.11.2009, 15:23:38 81.222.85.88, пустое)