[an error occurred while processing this directive]
АРМоведы, подскажите по SPI в AT91SAM7Sxx
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 507 22 ноября 2005 г. 15:46

Не хочет отправлять серию байт. Первый всегда нормально. Второго нет вообще. Если есть третий - идёт вместо второго. Второй может проскочить, но крайне редко. Вообщем похоже на танцы с бубном.

Инит такой:
//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Соотв-но есть два буфера по 4 байта - rbuffer & sbuffer. Я так понимаю, что кол-во полученных байт должно быть равно кол-ву отправленных. От режима SPI это не зависит.
В итоге проблема в том, что вместо 4 отправляется один или два.
Не использую никаких задержек - девайс только один, переключения СS нет.
Заранее спасибо за идеи.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru