#include "emc_nor.h" #include "lpc_timer.h" /* Private define ------------------------------------------------------------*/ #define NOR_FLASH_START_ADDR ((uint32_t)0x90000000) #define NOR_FLASH_END_ADDR ((uint32_t)0x90800000) /* Delay definition */ #define SectorErase_Timeout ((uint32_t)0x00A00000) #define ChipErase_Timeout ((uint32_t)0x30000000) #define Program_Timeout ((uint32_t)0x00001400) #define ADDR_SHIFT(A) (NOR_FLASH_START_ADDR + (2 * (A))) #define NOR_WRITE(Address, Data) (*(volatile short *)(Address) = (Data)) typedef struct { uint16_t Manufacturer_Code; uint16_t Device_Code1; uint16_t Device_Code2; uint16_t Device_Code3; } NOR_IDTypeDef; NOR_IDTypeDef NOR_ID; /******************************************************************************* * Function Name : EMC_NOR_Init * Description : Configures the FSMC and GPIOs to interface with the NOR memory. * This function must be called before any write/read operation * on the NOR. * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void EMC_NOR_Init(void) { TIM_TIMERCFG_Type TIM_ConfigStruct; EMC_STATIC_MEM_Config_Type config; /************************************************************************** * Initialize EMC for NOR FLASH **************************************************************************/ config.CSn = 1; config.AddressMirror = 0; config.ByteLane = 1; config.DataWidth = 16; config.ExtendedWait = 0; config.PageMode = 0; config.WaitWEn = 2; config.WaitOEn = 2; config.WaitWr = 0x1f; config.WaitPage = 0x1f; config.WaitRd = 0x1f; config.WaitTurn = 0x1f; StaticMem_Init(&config); // init timer TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL; TIM_ConfigStruct.PrescaleValue= 1; // Set configuration for Tim_config and Tim_MatchConfig TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct); TIM_Waitms(100); //delay time TIM_Waitms(10); return; } /****************************************************************************** * Function Name : EMC_NOR_ReadID * Description : Reads NOR memory's Manufacturer and Device Code. * Input : - NOR_ID: pointer to a NOR_IDTypeDef structure which will hold * the Manufacturer and Device Code. * Output : None * Return : None * Attention : None *******************************************************************************/ void EMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID) { NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA); NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055); NOR_WRITE(ADDR_SHIFT(0x0555), 0x0090); NOR_ID->Manufacturer_Code = *(volatile short *) ADDR_SHIFT(0x0000); NOR_ID->Device_Code1 = *(volatile short *) ADDR_SHIFT(0x0001); NOR_ID->Device_Code2 = *(volatile short *) ADDR_SHIFT(0x000E); NOR_ID->Device_Code3 = *(volatile short *) ADDR_SHIFT(0x000F); } /****************************************************************************** * Function Name : EMC_NOR_ReturnToReadMode * Description : Returns the NOR memory to Read mode. * Input : None * Output : None * Return : NOR_SUCCESS * Attention : None *******************************************************************************/ NOR_Status EMC_NOR_ReturnToReadMode(void) { NOR_WRITE(NOR_FLASH_START_ADDR, 0x00F0); return (NOR_SUCCESS); } void main (void) { uint32_t index; uint16_t sector; uint8_t nor_error; /* Initialize the FSMC NOR Flash Interface */ EMC_NOR_Init(); /* Set the NOR read modes */ EMC_NOR_ReturnToReadMode(); EMC_NOR_ReadID(&NOR_ID); while(1) { } } |