Цитата(aaarrr @ Aug 14 2012, 17:33)

Передача может осуществляться любым способом. Программирование регистров PDC на передачу немедленно запускает обмен.
Большущее спасибо. Многое проясняется.
А как получается, если я сначала отправляю блок данных (пустые данные, если мне надо только принимать данные) путём:
CODE
unsigned char SPI_WriteBuffer(AT91S_SPI *spi,
void *buffer,
unsigned int length)
{
// Check if first bank is free
if (spi->SPI_TCR == 0) {
spi->SPI_TPR = (unsigned int) buffer;
spi->SPI_TCR = length;
spi->SPI_PTCR = AT91C_PDC_TXTEN;
return 1;
}
// Check if second bank is free
else if (spi->SPI_TNCR == 0) {
spi->SPI_TNPR = (unsigned int) buffer;
spi->SPI_TNCR = length;
return 1;
}
// No free banks
return 0;
}
а затем принимаю данные(уже то что мне действительно нужно)
CODE
unsigned char SPI_ReadBuffer(AT91S_SPI *spi,
void *buffer,
unsigned int length)
{
// Check if the first bank is free
if (spi->SPI_RCR == 0) {
spi->SPI_RPR = (unsigned int) buffer;
spi->SPI_RCR = length;
spi->SPI_PTCR = AT91C_PDC_RXTEN;
return 1;
}
// Check if second bank is free
else if (spi->SPI_RNCR == 0) {
spi->SPI_RNPR = (unsigned int) buffer;
spi->SPI_RNCR = length;
return 1;
}
// No free bank
return 0;
}
Неужели приём данных осуществиться простым вызовом двух функций одной за другой?
Задаю этот вопрос потому что ранее принимал данные исключительно побайтно, так как один байт отправил, один получил и считал.
или при записи блока по PDC автоматически приходят входные данные?