Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7A3 SPI+PDC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
subver
Пытаюсь прочитать блок данных по SPI с использованием PDC следующим образом:

Код
                        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));



Вроде все работает, но:

В приемном буфере данные лежат со сдвигом на 1 байт, т.е. теряется самый первый байт блока.
Если делать передачу побайтово (без PDC) то все вроде нормально ложится. В чем может быть дело?
pronix
А ты пробовал ERRAT'У читать ?
Вот выдержка из erratы на AT91SAM7S64

19. SPI: MCK/32 Clock Selection
When the selected clock is MCK/32 (FDIV = 1), data is properly transferred in both directions
but the RDRF flag is set too soon and a first read attempt does not reset it. OVRES
flag is therefore erroneously raised.
When the selected clock is MCK/32 (FDIV = 1), PDC pointers are not correctly
incremented.
Problem Fix/Workaround
Use FDIV = 0.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.