Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прием данных по SPI через PDC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Alexey V.
есть функция, которая принимает/передает данные по 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 еще и на передачу?
Vishay
Цитата(Alexey V. @ Aug 9 2007, 10:21) *
есть функция, которая принимает/передает данные по SPI
решил переделать с использованием PDC
написал примерно такой код:

<skipped>
в таком виде почемуто не примимает вообще (
надо ли в этом случае инициировать pdc еще и на передачу?

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

Вот, как сделано у меня:
Код
    // 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.
Alexey V.
Цитата
Епстественно

для меня это тоже логично, но по хорошему SPI в этом случае мог бы и сам догадаться его генерить smile.gif)
SpiritDance
Вы еще это... того... эррату посмотрите,,. она для SPI через PDC немаленькая
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.