Код
AT91C_BASE_SPI0->SPI_RPR = (unsigned int)buffer;
AT91C_BASE_SPI0->SPI_RCR = blocksize;
AT91C_BASE_SPI0->SPI_TPR = (unsigned int)buffer;
AT91C_BASE_SPI0->SPI_TCR = blocksize;
AT91C_BASE_SPI0->SPI_PTCR =AT91C_PDC_RXTEN;
AT91C_BASE_SPI0->SPI_PTCR =AT91C_PDC_TXTEN;
while(!(AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_ENDRX));
AT91C_BASE_SPI0->SPI_RCR = blocksize;
AT91C_BASE_SPI0->SPI_TPR = (unsigned int)buffer;
AT91C_BASE_SPI0->SPI_TCR = blocksize;
AT91C_BASE_SPI0->SPI_PTCR =AT91C_PDC_RXTEN;
AT91C_BASE_SPI0->SPI_PTCR =AT91C_PDC_TXTEN;
while(!(AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_ENDRX));
Вроде все работает, но:
В приемном буфере данные лежат со сдвигом на 1 байт, т.е. теряется самый первый байт блока.
Если делать передачу побайтово (без PDC) то все вроде нормально ложится. В чем может быть дело?