Пытаюсь связать флэш память и контроллер по SPI. Настраиваю SPI так:
// использую стандартные атмеловские либы для этого контроллера
CODE
while(1){ AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA, // PIO controller base address
((unsigned int) AT91C_PA13_MOSI ) |
((unsigned int) AT91C_PA31_NPCS1 ) |
((unsigned int) AT91C_PA14_SPCK ) |
//((unsigned int) AT91C_PA11_NPCS0 ) |
((unsigned int) AT91C_PA12_MISO ), // Peripheral A
//((unsigned int) AT91C_PA9_NPCS1 ) |
//((unsigned int) AT91C_PA22_NPCS3 ) |
//((unsigned int) AT91C_PA3_NPCS3 ) |
//((unsigned int) AT91C_PA5_NPCS3 ) |
//((unsigned int) AT91C_PA10_NPCS2 ) |
((unsigned int) AT91C_PA30_NPCS2 )); // Peripheral B
AT91F_SPI_CfgPMC ();
AT91F_SPI_SWReset (AT91C_BASE_SPI);
pSPI ->SPI_CR = (unsigned int)0x01;
pSPI ->SPI_MR = (unsigned int)0x30011;
pSPI ->SPI_IER =(unsigned int) 0x0;// все прерывания отключены
pSPI ->SPI_IDR = (unsigned int)0x3FF;// все прерывания отключены
pSPI ->SPI_IMR = (unsigned int)0x0;// все прерывания замаскированы
pSPI ->SPI_CSR[2] = (unsigned int)0x0000FF02;
pPIO->PIO_PPUDR=(pPIO->PIO_PPUDR)&0xFFFFBFFF;
pPIO->PIO_PPUER=(pPIO->PIO_PPUER)|0x400;
Передачу запускаю записью в регистр данных SPI данных.
pSPI ->SPI_TDR= SPIDataToSend;
Потом жду флаг окончания передачи
Зацикливаю передачу.
Осциллографом смотрю сигнал SCK. Сначала после настройки SPI он падает до 1.7 В. Потом когда начинается передача он приобретает форму лестницы. 0В - 1,7В - 3,3В - 0В-1,7В - 3,3В-1,7В-3,3-1,7В-3,3-1,7В.
Пробовал различные частоты. Пробовал различные настройки режимов. Пробовал внутр. подтяжку. Пробовал внешнюю подтяжку. Результат один и тот же.
хелп.
Сообщение отредактировал MegaFPGA - Jun 8 2010, 03:46