Content originally posted in LPCWare by namorada on Tue Sep 29 06:59:08 MST 2015
Hi!
I'm facing a problem when interfacing a SRAM to the LPC1825 (part of the schematic attached).
Here is my code:
void RA_InitEmc(u32 u32_Freq)
{
ES_DeclareFonctionGPIOs(1, 7, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3));//D0
ES_DeclareFonctionGPIOs(1, 8, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D1
ES_DeclareFonctionGPIOs(1, 9, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D2
ES_DeclareFonctionGPIOs(1, 10, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN |SCU_MODE_FUNC3)); //D3
ES_DeclareFonctionGPIOs(1, 11, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D4
ES_DeclareFonctionGPIOs(1, 12, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D5
ES_DeclareFonctionGPIOs(1, 13, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D6
ES_DeclareFonctionGPIOs(1, 14, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //D7
ES_DeclareFonctionGPIOs(1, 15, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC6)); //D8
ES_DeclareFonctionGPIOs(1, 16, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC6)); //D9
ES_DeclareFonctionGPIOs(1, 18, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC7)); //D10
ES_DeclareFonctionGPIOs(1, 20, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC7)); //D11
ES_DeclareFonctionGPIOs(5, 0, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //D12
ES_DeclareFonctionGPIOs(5, 1, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //D13
ES_DeclareFonctionGPIOs(5, 2, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //D14
ES_DeclareFonctionGPIOs(5, 3, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //D15
ES_DeclareFonctionGPIOs(2, 9, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A0
ES_DeclareFonctionGPIOs(2, 10, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A1
ES_DeclareFonctionGPIOs(2, 11, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A2
ES_DeclareFonctionGPIOs(2, 12, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A3
ES_DeclareFonctionGPIOs(2, 13, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A4
ES_DeclareFonctionGPIOs(1, 0, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A5
ES_DeclareFonctionGPIOs(1, 1, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A6
ES_DeclareFonctionGPIOs(1, 2, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A7
ES_DeclareFonctionGPIOs(2, 8, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A8
ES_DeclareFonctionGPIOs(2, 7, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC3)); //A9
ES_DeclareFonctionGPIOs(2, 6, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A10
ES_DeclareFonctionGPIOs(2, 2, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A11
ES_DeclareFonctionGPIOs(2, 1, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A12
ES_DeclareFonctionGPIOs(2, 0, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC2)); //A13
ES_DeclareFonctionGPIOs(6, 8, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC1)); //A14
ES_DeclareFonctionGPIOs(6, 7, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC1)); //A15
ES_DeclareFonctionGPIOs(6, 6, (SCU_MODE_INACT | SCU_MODE_FUNC1)); //nBLS1
ES_DeclareFonctionGPIOs(1, 3, (SCU_MODE_INACT | SCU_MODE_FUNC3)); //nOE
ES_DeclareFonctionGPIOs(1, 4, (SCU_MODE_INACT | SCU_MODE_FUNC3)); //nBLS0
//ES_DeclareFonctionGPIOs(1, 5, (SCU_MODE_INACT | SCU_MODE_FUNC3)); //nCS0
ES_DeclareFonctionGPIOs(6, 3, (SCU_MODE_INACT | SCU_MODE_FUNC3)); //nCS1
ES_DeclareFonctionGPIOs(1, 6, (SCU_MODE_INACT | SCU_MODE_FUNC3)); //nWE
/********* ACTIVATION HORLOGE ***********/
LPC_CREG->CREG6 &= ~(1 << 16);
LPC_CCU1->CLKCCU[CLK_MX_EMC_DIV].CFG |= (0x01);
LPC_CCU1->CLKCCU[CLK_MX_EMC_DIV].CFG |= 1<<5;
LPC_CCU1->CLKCCU[CLK_MX_EMC_DIV].CFG |= 1<<1;
LPC_CCU1->CLKCCU[CLK_MX_EMC].CFG |= 1; // Activer l'horloge du module EMC
LPC_CCU1->CLKCCU[CLK_MX_EMC].CFG |= 1<<1;
LPC_SCU->EMCDELAYCLK &= 0xFFFF0000;
LPC_EMC->DYNAMICCONTROL &= ~EMC_DYN_CONTROL_ENABLE; // Disable dynamic
LPC_EMC->CONTROL = 0x00000001; // Enable EMC, Normal Memory Map, Normal Mode
LPC_EMC->CONFIG &= 0xFFFFFFFE; // little Endian
LPC_EMC->STATICCONFIG1= EMC_STATIC_CONFIG_MEM_WIDTH_16 | EMC_STATIC_CONFIG_BLS_HIGH | EMC_STATIC_CONFIG_EW_DISABLE; // 16bits, Pas de Write Protect
LPC_EMC->STATICWAITWEN1 = RA_CalculNbCycles(10,u32_Freq,1); // WAITWEN = 10ns : n + 1 0x0F
LPC_EMC->STATICWAITOEN1 = RA_CalculNbCycles(10,u32_Freq,0);//WAITOEN = 10ns : n
LPC_EMC->STATICWAITRD1 = RA_CalculNbCycles(50,u32_Freq,1);//WAITRD = 50ns : n + 1
LPC_EMC->STATICWAITPAG1 = RA_CalculNbCycles(20,u32_Freq,1);
LPC_EMC->STATICWAITWR1 = RA_CalculNbCycles(45,u32_Freq,2);//WAITWR = 40ns : n + 2 0x1F
LPC_EMC->STATICWAITTURN1 = 0; //WAITWR = 20ns
LPC_EMC->STATICEXTENDEDWAIT = 10;//0x1CC;
} |
I'm testing the SRAM with this function:
u8 RA_TestRam(void)
{
u16 *pu16_RamPtr;
u32 i;
u32 u32_NbErreur;
u16 u16_Valeur;
u32_NbErreur = 0;
pu16_RamPtr = (u16 *)RAM_BASE_ADDRESS;
// efface la mémoire à 0
for(i=0; i<(RAM_TAILLE/2); i++)
{
*pu16_RamPtr = 0;
pu16_RamPtr++;
}
pu16_RamPtr = (u16 *)RAM_BASE_ADDRESS;
for(i=0; i<(RAM_TAILLE/2); i++)
{
*pu16_RamPtr = (u16)i;
pu16_RamPtr++;
}
// lecture des valeurs
pu16_RamPtr = (u16 *)RAM_BASE_ADDRESS;
for(i=0; i<(RAM_TAILLE/2); i++)
{
u16_Valeur = 0;
u16_Valeur = *pu16_RamPtr;
pu16_RamPtr++;
if(u16_Valeur != (u16)i)
{
u32_NbErreur++;
}
}
// efface la mémoire à 0
pu16_RamPtr = (u16 *)RAM_BASE_ADDRESS;
for(i=0; i<(RAM_TAILLE/2); i++)
{
*pu16_RamPtr++ = 0;
}
if(u32_NbErreur)
return(1);
else
return(0);
} |
The main problem is that if i look in the memory at 0x1d000000 (breakpoint on
Quote:
*pu16_RamPtr = (u16)i;
, i see that the LPC1825 write at two sector (picture attached).
I don't know why the LPC1825 write there... Any idea of what i'm missing?
Thanks.
#define RAM_BASE_ADDRESS 0x1d000000 #define RAM_TAILLE 0x20000 // 128ko |
Content originally posted in LPCWare by namorada on Tue Sep 29 23:51:14 MST 2015
Hi,
I don't know why it is not working. I just repost the schematic here, on the forum.
I also uploaded it here : schematic.
Does it work for you now?
Thanks.