Пытаюсь подцепить CF к AT91SAM9260. Схемы подключения практически не отличаются от рекомендованных в атмеловских мануалах.
Инициализирую железо, как описано во многих примерах:
- CS4 (CF_CS0) назначаю на SMC + CF
- настраиваю временные параметры для CS4,
- ноги, которые задействованы для подключения CF, назначаю на периферийные функции
После чего при любом обращении (чтение или запись) к адресному пространству, отведенному CS4, вываливаемся по Data Abort.
Что бы это могло значить?
Кусок кода:
CODE
#define CF_BASE_ADR 0x50000000
...
AT91C_BASE_CCFG->CCFG_EBICSA |= (1 << 4);
AT91C_BASE_SMC->SMC_SETUP4 = (0x03 << 0) // 3 cycle nWE setup length
| (0x03 << 8) // 3 cycle nCSWE setup length for write access
| (0x03 << 16) // 3 cycle nRE setup length
| (0x03 << 24) // 3 cycle nCSRD setup length for read access
;
AT91C_BASE_SMC->SMC_PULSE4 = (0x0F << 0) // 15 cycles nWR pulse length
| (0x11 << 8) // 17 cycles nCS pulse length in write access
| (0x0D << 16) // 13 cycles nRD pulse length
| (0x0F << 24) // 15 cycles nCS pulse length in read access
;
AT91C_BASE_SMC->SMC_CYCLE4 = (0x15 << 0) // 21 cycles for complete write length
| (0x12 << 16) // 18 cycles for complete read length
;
AT91C_BASE_SMC->SMC_CTRL4 = (1 << 0) // read operation is controlled by nRD
| (1 << 1) // write operation is controlled by nWE
| (1 << 4) // nWait is used
| (0 << 8) // bytes access is realized by the nBSx signals
| (1 << 12) // DBW: 16-bit access
| (2 << 16) // Add 2 cycles for data float time
| (0 << 20) // data float time is not optimized
| (0 << 24) // Page mode is not enabled
;
AT91C_BASE_PMC->PMC_PCER |= (1 << AT91C_ID_PIOC); // Разрешаем PIOC
AT91C_BASE_PIOC->PIO_ASR = 0x8710;
AT91C_BASE_PIOC->PIO_BSR = 0x00C0;
AT91C_BASE_PIOC->PIO_PDR = 0x87D0;
...
unsigned short Data;
Data = * ((unsigned short *)CF_BASE_ADR); // Здесь вываливается в Data Abort
...