This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

External memory interface & Uart

Hi All,

I add the UART code into EMI example from the ST and compile the following code with the configuration Options->Target
-> off-chip RAM1 0x3c000000 size 0x400000
-> on-chip IRAM1 0x4000000 size 0x18000

The message " EMI Example ***" cannot be sent to the Hyperterminal. However, the EMI works fine.

Anyone has experiences with EMI and UART? Could you please point out where I am wrong? Greatly appreciate your help.

u8 TxBuffer[] = "EMI Example ****\n\r"
int main()
{

#ifdef DEBUG debug();
#endif

/*CPU running @96MHZ*/ MCLK_Config ();

/* Configure the system clocks */ SCU_Configuration();

/* Configure the GPIO ports */ GPIO_Configuration();

/* UART0 configuration -------------------------------------------------------*/ /* UART0 configured as follow: - Word Length = 7 Bits - Two Stop Bit - No parity - BaudRate = 115200 baud - Hardware flow control enabled (RTS and CTS signals) - Receive and transmit enabled - Receive and transmit FIFOs are enabled - Transmit and Receive FIFOs levels have 8 bytes depth */ UART_InitStructure.UART_WordLength = UART_WordLength_8D; UART_InitStructure.UART_StopBits = UART_StopBits_1; UART_InitStructure.UART_Parity = UART_Parity_No ; UART_InitStructure.UART_BaudRate = 115200; UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None; UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; UART_InitStructure.UART_FIFO = UART_FIFO_Disable;

UART_DeInit(UART0); UART_Init(UART0, &UART_InitStructure);

/* Enable the UART0 */ UART_Cmd(UART0, ENABLE);

/* EMI default configuration : Reset configuration*/ EMI_DeInit();

/**************************EMI configuration*********************************/

EMI_StructInit(&EMI_InitStruct); /* Number of bus turnaround cycles added between read and write accesses.*/ EMI_InitStruct.EMI_Bank_IDCY = 0x3 ;

/* Number of wait states for read accesses*/ //EMI_InitStruct.EMI_Bank_WSTRD = 0x3 ; EMI_InitStruct.EMI_Bank_WSTRD = 0x5 ; /* Number of wait states for write accesses*/ //EMI_InitStruct.EMI_Bank_WSTWR = 0x3 ; EMI_InitStruct.EMI_Bank_WSTWR = 0x4 ;

/*Output enable assertion delay from chip select assertion*/ EMI_InitStruct.EMI_Bank_WSTROEN = 0x2;

/*Write enable assertion delay from chip select assertion*/ EMI_InitStruct.EMI_Bank_WSTWEN = 0x2;

/*This member Controls the memory width*/ EMI_InitStruct.EMI_Bank_MemWidth = EMI_Width_HalfWord;

/*Write protection feature */ EMI_InitStruct.EMI_Bank_WriteProtection = EMI_Bank_NonWriteProtect;

/*Use Bank1 (CS1)*/ EMI_Init( EMI_Bank1, &EMI_InitStruct);

/* Send a buffer from UART to hyperterminal */ while(NbrOfDataToTransfer--) { UART_SendData(UART0, TxBuffer[TxCounter++]); while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOFull) != RESET);

}

while (1) {

/*Write in the external memory*/

for (k = 0; k < 32; k++)

*(u16*)(0x3C000000 + (k*2)) = Buffer_Write[k] ;
// *(u16*)(0x3C000000 + (k*2)) = 0x0101 ;

/*Read from the external memory*/

for (k = 0; k < 32; k++)

Buffer_Read[k] = *(u16*)(0x3C000000 + (k * 2)) ;

/*Comparaison*/

/* Check the received data with the send ones */ TransferStatus = Buffercmp(Buffer_Write, Buffer_Read, 32);

if (TransferStatus != 0) UART_SendData(UART0, (u8)(TransferStatus+48));

}

}
/*******************************************************************************
* Function Name : SCU_Configuration
* Description : Configures the system clocks.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void SCU_Configuration(void)
{

/* Enable the clock for EMI*/ SCU_AHBPeriphClockConfig(__EMI | __EMI_MEM_CLK, ENABLE);

/*BCLK=96Mhz*/ SCU_EMIBCLKDivisorConfig(SCU_EMIBCLK_Div1);

/*Enable the Mux mode*/ SCU_EMIModeConfig(SCU_EMI_MUX);

/*ALE length and polarity definition*/ SCU_EMIALEConfig(SCU_EMIALE_LEN1, SCU_EMIALE_POLHigh);

/* Enable the GPIO7 Clock */ SCU_APBPeriphClockConfig(__GPIO7 , ENABLE); SCU_APBPeriphReset(__GPIO7,DISABLE);

SCU_APBPeriphClockConfig(__UART0, ENABLE); SCU_APBPeriphReset(__UART0,DISABLE);

/* Enable the GPIO2 Clock */ SCU_APBPeriphClockConfig(__GPIO2, ENABLE); SCU_APBPeriphReset(__GPIO2,DISABLE); /* Enable the GPIO3 Clock */ SCU_APBPeriphClockConfig(__GPIO3, ENABLE); SCU_APBPeriphReset(__GPIO3,DISABLE);

/* Enable the GPIO8 Clock */ SCU_APBPeriphClockConfig(__GPIO8, ENABLE); SCU_APBPeriphReset(__GPIO8,DISABLE); /* Enable the GPIO9 Clock */ SCU_APBPeriphClockConfig(__GPIO9, ENABLE); SCU_APBPeriphReset(__GPIO9,DISABLE);

}

/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configures the different GPIO ports.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GPIO_Configuration(void)
{ /* GPIO8,GPIO9 Configuration*/

GPIO_EMIConfig(ENABLE);

/* GPIO7 Configuration */ GPIO_DeInit(GPIO7); GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
/* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ; */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull; GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2 ; GPIO_Init (GPIO7, &GPIO_InitStructure);

//uart0 setup

GPIO_DeInit(GPIO3); /*Gonfigure UART0_Rx pin GPIO3.0*/ GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1 ; GPIO_Init (GPIO3, &GPIO_InitStructure);

/* GPIO_DeInit(GPIO3); */ /*Gonfigure UART0_Tx pin GPIO3.1*/ GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2 ; GPIO_Init (GPIO3, &GPIO_InitStructure);
}

0