[an error occurred while processing this directive]
|
Не хочет отправлять серию байт. Первый всегда нормально. Второго нет вообще. Если есть третий - идёт вместо второго. Второй может проскочить, но крайне редко. Вообщем похоже на танцы с бубном.
Инит такой:
//setup power management controller
AT91C_BASE_PMC->PMC_PCER=(1 << AT91C_ID_SPI) | (1 << AT91C_ID_PIOA); //PIOA should be turn on?
//setup serial peripheral interface controller
AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SWRST;
AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_FDIV;
AT91C_BASE_SPI->SPI_IDR = 0xFFFFFFFF; //disable all interrupts
AT91C_BASE_SPI->SPI_CSR[0] = AT91C_SPI_BITS_8 | (255<<8);
AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SPIEN;
//setup parallel input/output controller
AT91C_BASE_PIOA->PIO_ASR=AT91C_PA13_MOSI | AT91C_PA12_MISO | AT91C_PA14_SPCK | AT91C_PA11_NPCS0; //enable peripheral A
AT91C_BASE_PIOA->PIO_PDR=AT91C_PA13_MOSI | AT91C_PA12_MISO | AT91C_PA14_SPCK | AT91C_PA11_NPCS0; //enable peripheral mode
AT91C_BASE_PIOA->PIO_MDDR=AT91C_PA13_MOSI | AT91C_PA12_MISO | AT91C_PA14_SPCK | AT91C_PA11_NPCS0; //disable multi drive
Передачу/приём данных делал и в ручную и через PDC - результат один и тот же. Частоту сделал самую низкую, что бы карточкой сигнал ухватить. Настройка PDC такая:
AT91C_BASE_SPI->SPI_PTCR=AT91C_PDC_TXTDIS |AT91C_PDC_RXTDIS;
AT91C_BASE_SPI->SPI_RPR=(unsigned int) &rbuffer[0];
AT91C_BASE_SPI->SPI_RCR=sizeof(rbuffer);
AT91C_BASE_SPI->SPI_TPR=(unsigned int) &sbuffer[0];
AT91C_BASE_SPI->SPI_TCR=sizeof(sbuffer);
AT91C_BASE_SPI->SPI_RNPR=0;
AT91C_BASE_SPI->SPI_RNCR=0;
AT91C_BASE_SPI->SPI_TNPR=0;
AT91C_BASE_SPI->SPI_TNCR=0;
AT91C_BASE_SPI->SPI_PTCR=AT91C_PDC_TXTEN|AT91C_PDC_RXTEN;
while((AT91C_BASE_SPI->SPI_RCR!=0)||(AT91C_BASE_SPI->SPI_TCR!=0));
for(d=0;d
E-mail:
info@telesys.ru
В итоге проблема в том, что вместо 4 отправляется один или два.
Не использую никаких задержек - девайс только один, переключения СS нет.
Заранее спасибо за идеи.
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание