Перейти к содержанию
    

прием данных по SPI через PDC

есть функция, которая принимает/передает данные по SPI

решил переделать с использованием PDC

написал примерно такой код:

 

void Spi1Exec(INT8U *tx, INT8U *rx, INT16U rxtx, INT8U target)
{
   ....
        if(rxtx)
        {
            pSPI1->SPI_RPR = (INT32U)rx;
            pSPI1->SPI_RCR = rxtx;
            pSPI1->SPI_PTCR = AT91C_PDC_RXTEN | AT91C_PDC_TXTEN;
            while( !( pSPI1->SPI_SR & AT91C_SPI_ENDRX ) );
            pSPI1->SPI_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;
        }
}

в таком виде почемуто не примимает вообще (

надо ли в этом случае инициировать pdc еще и на передачу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть функция, которая принимает/передает данные по SPI

решил переделать с использованием PDC

написал примерно такой код:

 

<skipped>

в таком виде почемуто не примимает вообще (

надо ли в этом случае инициировать pdc еще и на передачу?

Епстественно ;) ;) Кто-ж клок-то будет генерировать?

 

Вот, как сделано у меня:

    // Check if there is a "stuck" byte in receive register
    if (AT91C_BASE_SPI->SPI_SR & (AT91C_SPI_OVRES | AT91C_SPI_RDRF))
     i=AT91C_BASE_SPI->SPI_RDR;

    // Set up reception of input buffer
    AT91F_SPI_ReceiveFrame(AT91C_BASE_SPI,(char*) &SPIInput[0],sizeof(SPIInput),0,0);

    // Fire transmittion and reception
    AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &OutputBuf[0],sizeof(OutputBuf),0,0);
    // Wait until the reception is finished
    while(!((AT91C_BASE_SPI->SPI_SR) & AT91C_SPI_RXBUFF))
     vTaskDelay(portTICK_RATE_MS * 5);

    // Process input
    .....

 

При этом, прошу заметить, OutputBuf больше или равен по размеру SPIInput.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Епстественно

для меня это тоже логично, но по хорошему SPI в этом случае мог бы и сам догадаться его генерить :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы еще это... того... эррату посмотрите,,. она для SPI через PDC немаленькая

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...