<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LPC MicrocontrollersのトピックEMC StaticMem for nor flash</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/EMC-StaticMem-for-nor-flash/m-p/548194#M13608</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Badman on Wed Apr 23 08:46:22 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an example for LPC4088, which uses memory flash S29GL064 for Keil. Ported it to the LPCXpresso but the lack of data read from memory. Field variables NOR_ID always have a value 65535.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Why below code works compiled in Keil, but not LPCXpresso ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#include "emc_nor.h"
#include "lpc_timer.h"
 
/* Private define ------------------------------------------------------------*/
#define NOR_FLASH_START_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x90000000)
#define NOR_FLASH_END_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x90800000)
 
/* Delay definition */&amp;nbsp;&amp;nbsp; 
#define SectorErase_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x00A00000)
#define ChipErase_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x30000000) 
#define Program_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x00001400)
 
#define ADDR_SHIFT(A)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (NOR_FLASH_START_ADDR + (2 * (A)))
#define NOR_WRITE(Address, Data)&amp;nbsp;&amp;nbsp; (*(volatile short *)(Address) = (Data))
 
typedef struct
{
&amp;nbsp; uint16_t Manufacturer_Code;
&amp;nbsp; uint16_t Device_Code1;
&amp;nbsp; uint16_t Device_Code2;
&amp;nbsp; uint16_t Device_Code3;
}
NOR_IDTypeDef;
 
NOR_IDTypeDef NOR_ID;
 
/*******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_Init
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Configures the FSMC and GPIOs to interface with the NOR memory.
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This function must be called before any write/read operation
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on the NOR.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 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(&amp;amp;config);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; // 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,&amp;amp;TIM_ConfigStruct);
TIM_Waitms(100);
 
//delay time
 TIM_Waitms(10);
 
&amp;nbsp; return;
}
 
/******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_ReadID
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Reads NOR memory's Manufacturer and Device Code.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : - NOR_ID: pointer to a NOR_IDTypeDef structure which will hold
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the Manufacturer and Device Code.
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Attention : None
*******************************************************************************/
void EMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID)
{
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x0555), 0x0090);
 
&amp;nbsp; NOR_ID-&amp;gt;Manufacturer_Code = *(volatile short *) ADDR_SHIFT(0x0000);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code1 = *(volatile short *) ADDR_SHIFT(0x0001);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code2 = *(volatile short *) ADDR_SHIFT(0x000E);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code3 = *(volatile short *) ADDR_SHIFT(0x000F);
}
 
/******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_ReturnToReadMode
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Returns the NOR memory to Read mode.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : NOR_SUCCESS
* Attention : None
*******************************************************************************/
NOR_Status EMC_NOR_ReturnToReadMode(void)
{
&amp;nbsp; NOR_WRITE(NOR_FLASH_START_ADDR, 0x00F0);
 
&amp;nbsp; return (NOR_SUCCESS);
}
void main (void)
{ 
&amp;nbsp; uint32_t index;
&amp;nbsp; uint16_t sector;
&amp;nbsp; uint8_t nor_error;
 
&amp;nbsp; /* Initialize the FSMC NOR Flash Interface */
&amp;nbsp; EMC_NOR_Init();
&amp;nbsp; /* Set the NOR read modes */
&amp;nbsp; EMC_NOR_ReturnToReadMode();
 
&amp;nbsp; EMC_NOR_ReadID(&amp;amp;NOR_ID);
 
&amp;nbsp; while(1)
&amp;nbsp; {
&amp;nbsp; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:32:40 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:32:40Z</dc:date>
    <item>
      <title>EMC StaticMem for nor flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/EMC-StaticMem-for-nor-flash/m-p/548194#M13608</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Badman on Wed Apr 23 08:46:22 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an example for LPC4088, which uses memory flash S29GL064 for Keil. Ported it to the LPCXpresso but the lack of data read from memory. Field variables NOR_ID always have a value 65535.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Why below code works compiled in Keil, but not LPCXpresso ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#include "emc_nor.h"
#include "lpc_timer.h"
 
/* Private define ------------------------------------------------------------*/
#define NOR_FLASH_START_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x90000000)
#define NOR_FLASH_END_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x90800000)
 
/* Delay definition */&amp;nbsp;&amp;nbsp; 
#define SectorErase_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x00A00000)
#define ChipErase_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x30000000) 
#define Program_Timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((uint32_t)0x00001400)
 
#define ADDR_SHIFT(A)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (NOR_FLASH_START_ADDR + (2 * (A)))
#define NOR_WRITE(Address, Data)&amp;nbsp;&amp;nbsp; (*(volatile short *)(Address) = (Data))
 
typedef struct
{
&amp;nbsp; uint16_t Manufacturer_Code;
&amp;nbsp; uint16_t Device_Code1;
&amp;nbsp; uint16_t Device_Code2;
&amp;nbsp; uint16_t Device_Code3;
}
NOR_IDTypeDef;
 
NOR_IDTypeDef NOR_ID;
 
/*******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_Init
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Configures the FSMC and GPIOs to interface with the NOR memory.
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This function must be called before any write/read operation
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on the NOR.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 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(&amp;amp;config);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; // 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,&amp;amp;TIM_ConfigStruct);
TIM_Waitms(100);
 
//delay time
 TIM_Waitms(10);
 
&amp;nbsp; return;
}
 
/******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_ReadID
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Reads NOR memory's Manufacturer and Device Code.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : - NOR_ID: pointer to a NOR_IDTypeDef structure which will hold
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the Manufacturer and Device Code.
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Attention : None
*******************************************************************************/
void EMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID)
{
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x0555), 0x00AA);
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x02AA), 0x0055);
&amp;nbsp; NOR_WRITE(ADDR_SHIFT(0x0555), 0x0090);
 
&amp;nbsp; NOR_ID-&amp;gt;Manufacturer_Code = *(volatile short *) ADDR_SHIFT(0x0000);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code1 = *(volatile short *) ADDR_SHIFT(0x0001);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code2 = *(volatile short *) ADDR_SHIFT(0x000E);
&amp;nbsp; NOR_ID-&amp;gt;Device_Code3 = *(volatile short *) ADDR_SHIFT(0x000F);
}
 
/******************************************************************************
* Function Name&amp;nbsp; : EMC_NOR_ReturnToReadMode
* Description&amp;nbsp;&amp;nbsp;&amp;nbsp; : Returns the NOR memory to Read mode.
* Input&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : None
* Return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : NOR_SUCCESS
* Attention : None
*******************************************************************************/
NOR_Status EMC_NOR_ReturnToReadMode(void)
{
&amp;nbsp; NOR_WRITE(NOR_FLASH_START_ADDR, 0x00F0);
 
&amp;nbsp; return (NOR_SUCCESS);
}
void main (void)
{ 
&amp;nbsp; uint32_t index;
&amp;nbsp; uint16_t sector;
&amp;nbsp; uint8_t nor_error;
 
&amp;nbsp; /* Initialize the FSMC NOR Flash Interface */
&amp;nbsp; EMC_NOR_Init();
&amp;nbsp; /* Set the NOR read modes */
&amp;nbsp; EMC_NOR_ReturnToReadMode();
 
&amp;nbsp; EMC_NOR_ReadID(&amp;amp;NOR_ID);
 
&amp;nbsp; while(1)
&amp;nbsp; {
&amp;nbsp; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:32:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/EMC-StaticMem-for-nor-flash/m-p/548194#M13608</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:32:40Z</dc:date>
    </item>
    <item>
      <title>Re: EMC StaticMem for nor flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/EMC-StaticMem-for-nor-flash/m-p/548195#M13609</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Badman on Thu May 01 10:39:31 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Problem solved. I forgot to set the bit EMCS in the register SCS:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;SCS |= (1&amp;lt;&amp;lt;0);&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:32:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/EMC-StaticMem-for-nor-flash/m-p/548195#M13609</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:32:41Z</dc:date>
    </item>
  </channel>
</rss>

