Связываю вышеупомянутыеи МС.
Записываю массив в буфер 1 at45, а потом читаю массив с буфера 1.
Почемуто все значения оказываются делёнными на 2.
инициализация SPI:
Код
void initSPI (void)
{
AT91C_BASE_PIOA->PIO_PDR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_ASR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_BSR = 0;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI;
/**** Fixed mode ****/
AT91C_BASE_SPI->SPI_CR = 0x81; //SPI Enable, Sowtware reset
AT91C_BASE_SPI->SPI_CR = 0x01; //SPI Enable
//AT91C_BASE_SPI->SPI_MR = 0xE0011; //Master mode, fixed select, disable decoder, FDIV=0 (MCK), PCS=1110
*AT91C_SPI_MR = AT91C_SPI_MODFDIS | AT91C_SPI_PS_FIXED | AT91C_SPI_MSTR | (0x0E<<16);
AT91C_SPI_CSR[0] = AT91C_SPI_NCPHA|AT91C_SPI_BITS_8|(SPI_SCKDIV<<8);
}
{
AT91C_BASE_PIOA->PIO_PDR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_ASR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_BSR = 0;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI;
/**** Fixed mode ****/
AT91C_BASE_SPI->SPI_CR = 0x81; //SPI Enable, Sowtware reset
AT91C_BASE_SPI->SPI_CR = 0x01; //SPI Enable
//AT91C_BASE_SPI->SPI_MR = 0xE0011; //Master mode, fixed select, disable decoder, FDIV=0 (MCK), PCS=1110
*AT91C_SPI_MR = AT91C_SPI_MODFDIS | AT91C_SPI_PS_FIXED | AT91C_SPI_MSTR | (0x0E<<16);
AT91C_SPI_CSR[0] = AT91C_SPI_NCPHA|AT91C_SPI_BITS_8|(SPI_SCKDIV<<8);
}
Чтение /запись:
Код
unsigned char spiSendByte(const unsigned char data)
{
// wait for transmit completion/ready
while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE));
// write data to be transmitted
*AT91C_SPI_TDR = data;
// wait for completion
while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF));
// return received data
return *AT91C_SPI_RDR;
}
{
// wait for transmit completion/ready
while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE));
// write data to be transmitted
*AT91C_SPI_TDR = data;
// wait for completion
while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF));
// return received data
return *AT91C_SPI_RDR;
}