Код
// NCS_RD | NRD | NCS_WR | NWE setup 0x00000000 default
AT91C_BASE_SMC->SMC_SETUP0 = (0 << 24) | (0 << 16) | (0 << 8) | 0;
// NCS_RD | NRD | NCS_WR | NWE pulses 0x01010101 default
AT91C_BASE_SMC->SMC_PULSE0 = (1 << 24) | (2 << 16) | (1 << 8) | 1;
// NRD | NWE cycle 0x00010001 default
AT91C_BASE_SMC->SMC_CYCLE0 = (2 << 16) | 1;
// SMC_MODE Read-write 0x10001000 default
AT91C_BASE_SMC->SMC_CTRL0 = AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS | AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE;
AT91C_BASE_SMC->SMC_SETUP0 = (0 << 24) | (0 << 16) | (0 << 8) | 0;
// NCS_RD | NRD | NCS_WR | NWE pulses 0x01010101 default
AT91C_BASE_SMC->SMC_PULSE0 = (1 << 24) | (2 << 16) | (1 << 8) | 1;
// NRD | NWE cycle 0x00010001 default
AT91C_BASE_SMC->SMC_CYCLE0 = (2 << 16) | 1;
// SMC_MODE Read-write 0x10001000 default
AT91C_BASE_SMC->SMC_CTRL0 = AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS | AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE;
В такой конфигурации все работает отлично (3 теста памяти последовательно) часами. Непонятна следующая вещь - от дефолтных (нулевых) задержек здесь отличается только (+1) дополнительный пульс NRD на чтение (2, по дефолту мин = 1). Причем с нулевыми задержками проваливается только ОДИН, самый простой тест:
Код
DWORD Count, Size = 0x40000; // 2 x 4,194,304-bit
volatile DWORD *ptr;
DBG_Print ("RAM Test #1 : ");
ptr = (volatile DWORD *)(AT91C_EBI_CS0);
for (Count = 0; Count < Size; Count++, ptr++) {*ptr = Count;}
ptr = (volatile DWORD *)(AT91C_EBI_CS0);
for (Count = 0; Count < Size; Count++, ptr++)
{
if (*ptr != Count)
{
DBG_Print ("fail at 0x");
............
return 0;
}
}
DBG_Print ("OK!\r\n");
return 1;
volatile DWORD *ptr;
DBG_Print ("RAM Test #1 : ");
ptr = (volatile DWORD *)(AT91C_EBI_CS0);
for (Count = 0; Count < Size; Count++, ptr++) {*ptr = Count;}
ptr = (volatile DWORD *)(AT91C_EBI_CS0);
for (Count = 0; Count < Size; Count++, ptr++)
{
if (*ptr != Count)
{
DBG_Print ("fail at 0x");
............
return 0;
}
}
DBG_Print ("OK!\r\n");
return 1;
2 Остальных теста, которые гоняют 0, потом 1 по всем разрядам адреса, почему то проходят нормально... Кто-нибудь сталкивался с подобными непонятками при чтении? Должна ж эта пямять работать с 0 задержками и на чтение и на запись?