CODE
void init_spi(){
AT91C_BASE_PIOA->PIO_PDR =AT91C_PA11_NPCS0 | AT91C_PA12_MISO
| AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_PPUDR |= AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PIOA->PIO_ASR =AT91C_PA11_NPCS0 | AT91C_PA12_MISO
| AT91C_PA13_MOSI | AT91C_PA14_SPCK;
AT91C_BASE_PMC->PMC_PCER|=1<<AT91C_ID_SPI;
AT91C_BASE_SPI->SPI_CR |= AT91C_SPI_SPIDIS | AT91C_SPI_SWRST;
AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | AT91C_SPI_PS_FIXED;
//CPOL=1,PHASE=1,16 bit, SPCKHMhz/3 = 16Mhz
AT91C_BASE_SPI->SPI_CSR[0] = AT91C_SPI_CPOL
| AT91C_SPI_BITS_16 | (0x3<<8)&AT91C_SPI_SCBR;
// | AT91C_SPI_CSAAT;
AT91C_BASE_SPI->SPI_CR =AT91C_SPI_SPIEN;
};
unsigned int send_spi(unsigned int data)
{
// while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE));
while(!(AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TXEMPTY));
AT91C_BASE_SPI->SPI_TDR = data; //передача по SPI
while (!(AT91C_BASE_SPI -> SPI_SR & AT91C_SPI_RDRF));
return (AT91C_BASE_SPI->SPI_RDR);
};
Периферия фиксированная без PDC.