<?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>topic LPC2468 - access to external NOR flash in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC2468-access-to-external-NOR-flash/m-p/550302#M13989</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rete1234 on Tue Mar 24 21:03:18 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm doing a development on an NXP LPC2468.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We have an external NOR flash (16-bits wide - SST38VF6401) - which we want to use for code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So we have mapped A0-A21 from MCU to A0-A21 on NOR flash. My first question - is this correct?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a application note that says A1-A22 (MCU) should go to A0-A21 for 16 bit memories.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've been able to write to the NOR using A0 tided to either high or low (as needed). I can also access&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;words (16-bit) on the flash. But when I try and access a byte at a time I always get value=0xff.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The following code works for A0_ENABLE defined as 0 - I can't get it working with all signals controlled by EMC.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What am I doing wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // XXXXXXXXXX FLASH XXXXXXXXXXX
#if (A0_ENABLE)
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL8&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x55555555;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A0-A15
#else
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL8&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x55555554;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A1-A15

&amp;nbsp;&amp;nbsp;&amp;nbsp; // tie A0 low
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4DIR&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1;
#endif

#if (A0_ENABLE)
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICCNFG1 = (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_MEM_WIDTH) |&amp;nbsp; // bus width 0==8, 1==16, 2==32
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_PAGE_MODE) |&amp;nbsp; // enable page mode (len=4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_CS_HIGH)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // CS polarity 0=low, 1==high
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BLS_READ)&amp;nbsp; |&amp;nbsp; // byte lane active for 0=wr, 1=rd/wr
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_EXT_WAIT)&amp;nbsp; |&amp;nbsp; // enable extended wait
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BUFF_EN)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // buffer enable
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_WR_PROT)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // enable write protect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);
#else
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICCNFG1 = (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_MEM_WIDTH) |&amp;nbsp; // bus width 0==8, 1==16, 2==32
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_PAGE_MODE) |&amp;nbsp; // enable page mode (len=4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_CS_HIGH)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // CS polarity 0=low, 1==high
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_BLS_READ)&amp;nbsp; |&amp;nbsp; // byte lane active for 0=wr, 1=rd/wr
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_EXT_WAIT)&amp;nbsp; |&amp;nbsp; // enable extended wait
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BUFF_EN)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // buffer enable
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_WR_PROT)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // enable write protect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITOEN1 = 1;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; CS-&amp;gt;OE delay: N*17.361ns
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITRD1&amp;nbsp; = 6;&amp;nbsp; // 31 max&amp;nbsp;&amp;nbsp; CS length: (N+1)*17.361ns 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITTURN1= 5;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; bus turn around after read: (N+1)*17.361ns 

&amp;nbsp;&amp;nbsp;&amp;nbsp; //EMCSTATICWAITPG1&amp;nbsp; = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITWEN1 = 0;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; CS-&amp;gt;WE delay: (N+1)*17.361ns
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITWR1&amp;nbsp; = 5;&amp;nbsp; // 31 max&amp;nbsp;&amp;nbsp; WE length:&amp;nbsp;&amp;nbsp;&amp;nbsp; (N+2)*17.361ns

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I read and write words using the following code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void WORD_PUT(unsigned int a, unsigned short v)
{
#if (A0_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned short *p = (unsigned short*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = v;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#if (A0_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif
}

unsigned char BYTE_GET(unsigned int a)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char v;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned char *p = (unsigned char*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; v = *p;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#if (AO_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif

&amp;nbsp;&amp;nbsp;&amp;nbsp; return v;
}

unsigned short WORD_GET(unsigned int a)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short v;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned short *p = (unsigned short*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; v = *p;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return v;
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any feedback appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:50:31 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:50:31Z</dc:date>
    <item>
      <title>LPC2468 - access to external NOR flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC2468-access-to-external-NOR-flash/m-p/550302#M13989</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rete1234 on Tue Mar 24 21:03:18 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm doing a development on an NXP LPC2468.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We have an external NOR flash (16-bits wide - SST38VF6401) - which we want to use for code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So we have mapped A0-A21 from MCU to A0-A21 on NOR flash. My first question - is this correct?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a application note that says A1-A22 (MCU) should go to A0-A21 for 16 bit memories.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've been able to write to the NOR using A0 tided to either high or low (as needed). I can also access&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;words (16-bit) on the flash. But when I try and access a byte at a time I always get value=0xff.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The following code works for A0_ENABLE defined as 0 - I can't get it working with all signals controlled by EMC.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What am I doing wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // XXXXXXXXXX FLASH XXXXXXXXXXX
#if (A0_ENABLE)
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL8&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x55555555;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A0-A15
#else
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL8&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x55555554;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A1-A15

&amp;nbsp;&amp;nbsp;&amp;nbsp; // tie A0 low
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4DIR&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1;
#endif

#if (A0_ENABLE)
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICCNFG1 = (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_MEM_WIDTH) |&amp;nbsp; // bus width 0==8, 1==16, 2==32
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_PAGE_MODE) |&amp;nbsp; // enable page mode (len=4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_CS_HIGH)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // CS polarity 0=low, 1==high
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BLS_READ)&amp;nbsp; |&amp;nbsp; // byte lane active for 0=wr, 1=rd/wr
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_EXT_WAIT)&amp;nbsp; |&amp;nbsp; // enable extended wait
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BUFF_EN)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // buffer enable
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_WR_PROT)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // enable write protect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);
#else
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICCNFG1 = (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_MEM_WIDTH) |&amp;nbsp; // bus width 0==8, 1==16, 2==32
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_PAGE_MODE) |&amp;nbsp; // enable page mode (len=4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_CS_HIGH)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // CS polarity 0=low, 1==high
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; CNF_BLS_READ)&amp;nbsp; |&amp;nbsp; // byte lane active for 0=wr, 1=rd/wr
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_EXT_WAIT)&amp;nbsp; |&amp;nbsp; // enable extended wait
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_BUFF_EN)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // buffer enable
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0 &amp;lt;&amp;lt; CNF_WR_PROT)&amp;nbsp;&amp;nbsp; |&amp;nbsp; // enable write protect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITOEN1 = 1;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; CS-&amp;gt;OE delay: N*17.361ns
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITRD1&amp;nbsp; = 6;&amp;nbsp; // 31 max&amp;nbsp;&amp;nbsp; CS length: (N+1)*17.361ns 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITTURN1= 5;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; bus turn around after read: (N+1)*17.361ns 

&amp;nbsp;&amp;nbsp;&amp;nbsp; //EMCSTATICWAITPG1&amp;nbsp; = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITWEN1 = 0;&amp;nbsp; // 15 max&amp;nbsp;&amp;nbsp; CS-&amp;gt;WE delay: (N+1)*17.361ns
&amp;nbsp;&amp;nbsp;&amp;nbsp; EMCSTATICWAITWR1&amp;nbsp; = 5;&amp;nbsp; // 31 max&amp;nbsp;&amp;nbsp; WE length:&amp;nbsp;&amp;nbsp;&amp;nbsp; (N+2)*17.361ns

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I read and write words using the following code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void WORD_PUT(unsigned int a, unsigned short v)
{
#if (A0_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned short *p = (unsigned short*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = v;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#if (A0_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif
}

unsigned char BYTE_GET(unsigned int a)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char v;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned char *p = (unsigned char*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; v = *p;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#if (AO_ENABLE == 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif

&amp;nbsp;&amp;nbsp;&amp;nbsp; return v;
}

unsigned short WORD_GET(unsigned int a)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short v;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (a &amp;amp; 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4SET |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //a &amp;amp;= ~1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile unsigned short *p = (unsigned short*)(0x81000000 + a);
&amp;nbsp;&amp;nbsp;&amp;nbsp; v = *p;

#if (A0_ENABLE == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; FIO4CLR |= 1;
#endif
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return v;
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any feedback appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:50:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC2468-access-to-external-NOR-flash/m-p/550302#M13989</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:50:31Z</dc:date>
    </item>
  </channel>
</rss>

