Конфигурация системы: на плате стоит FPGA + AT91SAM9G45. FPGA "висит" на SMC интерфейсе (16 бит данных, 25 адресных бит, заведены CS0,CS1).
настройки работы частоты процессора/периферии://400/133MHz
код настройки работы SMC CS1:
Код
//3.2 CS1
// Configure EBI
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_EBI_CS1A_SMC;
// Configure SMC, timings
AT91C_BASE_SMC->SMC_SETUP1 = ( 1 << 0 |//NWE_SETUP
1 << 8 |//NCS_WR_SETUP
2 << 16 |//NRD_SETUP
1 << 24 );//NCS_RD_SETUP;
AT91C_BASE_SMC->SMC_PULSE1 = ( 1 << 0 |//NWE_PULSE
3 << 8 |//NCS_WR_PULSE
2 << 16 |//NRD_PULSE
2 << 24 );//NCS_RD_PULSE;
AT91C_BASE_SMC->SMC_CYCLE1 = ( AT91C_SMC_NWECYCLE |//NWE_CYCLE
AT91C_SMC_NRDCYCLE );//NRD_CYCLE;
AT91C_BASE_SMC->SMC_CTRL1 = ( AT91C_SMC_READMODE |
AT91C_SMC_WRITEMODE |
AT91C_SMC_NWAITM_NWAIT_ENABLE_FROZEN |
AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS |
1 << 16 | //num of TDF_CYCLES
AT91C_SMC_PS_SIZE_THIRTY_TWO_BYTES);
// Configure EBI
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_EBI_CS1A_SMC;
// Configure SMC, timings
AT91C_BASE_SMC->SMC_SETUP1 = ( 1 << 0 |//NWE_SETUP
1 << 8 |//NCS_WR_SETUP
2 << 16 |//NRD_SETUP
1 << 24 );//NCS_RD_SETUP;
AT91C_BASE_SMC->SMC_PULSE1 = ( 1 << 0 |//NWE_PULSE
3 << 8 |//NCS_WR_PULSE
2 << 16 |//NRD_PULSE
2 << 24 );//NCS_RD_PULSE;
AT91C_BASE_SMC->SMC_CYCLE1 = ( AT91C_SMC_NWECYCLE |//NWE_CYCLE
AT91C_SMC_NRDCYCLE );//NRD_CYCLE;
AT91C_BASE_SMC->SMC_CTRL1 = ( AT91C_SMC_READMODE |
AT91C_SMC_WRITEMODE |
AT91C_SMC_NWAITM_NWAIT_ENABLE_FROZEN |
AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS |
1 << 16 | //num of TDF_CYCLES
AT91C_SMC_PS_SIZE_THIRTY_TWO_BYTES);
для наблюдений работы шины на осциллографе в битике 4 просто меняющаяся последовательность с 0 в 1:
Код
while (1)
{
FPGA_CS1[1]=(1<<4);
FPGA_CS1[1]=(0<<4);;
}
{
FPGA_CS1[1]=(1<<4);
FPGA_CS1[1]=(0<<4);;
}
в результате работы на осцилле вижу меандр, чатотой порядка 32КГц
Вопросы:
1) Как задать частоту работы SMC контроллера?
2) как вывести эту частоту (именно ту с которой работает SMC) на пин PIOE0?