Пока сам для себя причину не выяснил, так как ещё новичек, но вот так работает:
Цитата
short SPI_Read_PDC(PSPI self, void* data, unsigned short count) {
PSPI_BASE->SPI_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;
PSPI_BASE->SPI_RPR = (UINT)buff; // destination address
PSPI_BASE->SPI_RCR = btr; // number of frames (here: frame=byte)
// SPI PDC TX buffer (dummy bytes):
PSPI_BASE->SPI_TPR = (UINT)dma_dummy; // source address
PSPI_BASE->SPI_TCR = btr; // number of frames (here: frame=byte)
PSPI_BASE->SPI_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;
while( !( (PSPI_BASE->SPI_SR) & AT91C_SPI_RXBUFF ) ) {
// wait for RX Buffer Full (counters 0)
}
}