| 按照您给的链接看了,第一个帮助比较大<br />片外Flash为k9f1208,8位io的,64M;<br />RE  WE  ALE  CLE 分别接到CPU的OE  WE  P0.11(GPIO)   P0.12(GPIO)上;<br />CE通过CPLD接过来,CPLD的另一端也接的是CPU的NCS0;<br /><br />/**********************************************************/<br />总线的配置<br />;/* Define the Bus Speed */<br />BCFG0       EQU     0xFFE00000      ;// Control Word of BANK0 / CS0<br />BCFG1       EQU     0xFFE00004      ;// Control Word of BANK1 / CS1<br />BCFG2       EQU     0xFFE00008      ;// Control Word of BANK2 / CS2<br />BCFG3       EQU     0xFFE0000C      ;// Control Word of BANK3 / CS3<br /><br />BCFG_08DEF    EQU        0x00000400      ;//  8Bit Bus<br />BCFG_16DEF    EQU        0x10000400      ;// 16Bit Bus<br />BCFG_32DEF    EQU        0x20000400      ;// 32Bit Bus<br /><br /><br />;//                             |    IDCY    |    WST1    |    WST2    <br />;//                             | Idle width | Read width | Write width<br />;//                             | 0x00 ~ 0x0f| 0x00 ~ 0x1f| 0x00~0x1f<br />BCFG_FLASH    EQU        (BCFG_08DEF | (0x1f<<00) | (0x1f<<05) | (0x0f<<11))   ;// For 90ns Flash<br />BCFG_PSRAM  EQU        (BCFG_16DEF | (0x0f<<00) | (0x0f<<05) | (0x0f<<11))   ;// For 70ns PSRAM<br />BCFG_CS2    EQU        (BCFG_16DEF | (0x0f<<00) | (0x1f<<05) | (0x1f<<11))   ;// Blank <br />BCFG_CS3    EQU        (BCFG_16DEF | (0x01<<00) | (0x03<<05) | (0x03<<11))   ;// For Peripheral Equipment<br /><br />这里的RBLE为1;<br />ncs0接的是最慢的总线,为0x1f;<br />/**********************************************************/<br />PINSEL2的设置没有改过;用的是lpc2100模板<br /><br />;初始化外部总线控制器,根据目标板决定配置<br /><br />        LDR     R0, =PINSEL2<br />    IF :DEF: EN_CRP<br />        LDR     R1, =0x0f814910<br />    ELSE<br />        LDR     R1, =0x0f814914<br />    ENDIF<br />        STR     R1, [R0]<br />        <br />        LDR     R0, =BCFG0<br />        LDR     R1, =BCFG_FLASH<br />        STR     R1, [R0]<br /><br />        LDR     R0, =BCFG1<br />        LDR     R1, =BCFG_PSRAM<br />        STR     R1, [R0]<br /><br />        LDR     R0, =BCFG2<br />        LDR     R1, =BCFG_CS2<br />        STR     R1, [R0]<br /><br />        LDR     R0, =BCFG3<br />        LDR     R1, =BCFG_CS3<br />        STR     R1, [R0]<br />        <br />        BL      InitStack               ;初始化堆栈 Initialize the stack<br />        BL      TargetResetInit         ;目标板基本初始化 Initialize the target board<br />                                        ;跳转到c语言入口 Jump to the entry point of C program<br />        B       __main<br /><br /><br />/***************************************************/<br />源程序,只写到了读芯片id,擦出和写入<br />#include "config.h"<br />//#define LED_ADDR        0x82000000;<br />#define        CA_LE                0x00001800    <br /><br /><br />void  DelayNS(uint32  dly)<br />{   uint32  i;<br /><br />    for(; dly>0; dly--) <br />    {<br />        for(i=0; i<5000; i++);<br />    }<br />}<br /><br /><br /><br />int main (void)<br />{// add user source code<br />    <br />    <br />    <br />    volatile uint8 *data;<br />    //unsigned short int id;<br />    volatile unsigned  int *adder1;<br />    <br />    <br />    <br />    //unsigned int  id1,id2;<br />    <br />    data=(uint8 *)0x80000000;<br />    adder1 =(uint32 *)0x81000000;<br />    //adder2 =(uint32 *)0x81000008;<br />    //PINSEL2=((PINSEL2&0xf07fffff)|(0x38<<20));<br />    <br />    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   <br />    IO0DIR = CA_LE;    <br />    <br />    <br />    IO0SET = (IO0SET|0x1000);<br />    IO0CLR = (IO0CLR|0x0800);<br />    <br />    //for(;;)    <br />    *data =0x90;<br />        <br />        <br />    IO0SET = (IO0SET|0x0800);<br />    IO0CLR = (IO0CLR|0x1000);<br />    <br />    for(;;)<br />    *data = 0x0;<br />    <br />    <br />    IO0CLR = (IO0CLR|0x1800);<br />    <br />    <br />    //for(;;)<br />    <br />    *adder1 = *data<<8;<br />    *adder1 |= *data;<br />    <br />    for(;;);<br />    <br />    // _   *adder2 = *data;<br />    <br />    <br /><br />/*****************************************************************************************************************/        <br />    <br />    <br />    int i;<br />    <br />    unsigned int block = 0x02;<br />    unsigned int blockpage = (block<<5);<br />    <br />    volatile uint8 *data;<br />    data=(uint8 *)0x80000000;<br />    <br />    <br />    <br />    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   <br />    IO0DIR = CA_LE;    <br />    <br />    <br />    <br />    IO0SET = (IO0SET|0x1000);<br />    IO0CLR = (IO0CLR|0x0800);<br />    <br />    //for(;;)<br />    *data = 0x60; //设置擦写模式 <br />    <br />    <br />    IO0SET = (IO0SET|0x0800);<br />    IO0CLR = (IO0CLR|0x1000);<br />    <br />    *data = (blockpage&0xff); // A9_A16,(Page Address) , 是基于块擦<br />    *data = ((blockpage>>8)&0xff); // A17_A24,(Page Address) <br />    *data = ((blockpage>>16)&0xff); // A25, (Page Address) <br />    <br />    IO0SET = (IO0SET|0x1000);<br />    IO0CLR = (IO0CLR|0x0800);<br />    <br />    *data = 0xd0; <br />    <br />    for(i=0;i<10;i++);<br />    <br />    <br />    <br />/*****************************************************************************************************************/    <br /><br /><br /><br /><br />    int i;<br />    unsigned int block =0x00;<br />    unsigned int page =0x00;<br />    unsigned char a[528];<br />    unsigned int blockpage = (block<<5)+page;<br />    <br />    <br />    volatile uint16 *data;<br />    data=(uint16 *)0x80000000;<br />    <br />    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   <br />    IO0DIR = CA_LE;<br />    <br />    <br />    for(i=0;i<528;i++)<br />        a=0x55;<br />    <br />    <br />    IO0SET = (IO0SET|0x1000);<br />    IO0CLR = (IO0CLR|0x0800);<br />    <br />    *data = 0x0;                    // 从A区开始写 <br />    *data = 0x80;                // 写第一条命令 <br />    <br />    IO0SET = (IO0SET|0x0800);<br />    IO0CLR = (IO0CLR|0x1000);<br />    *data = 0;                    // A0_A7 位(Column Address) <br />    *data = blockpage&0xff;        // A9_A16,(Page Address) <br />    *data = (blockpage>>8)&0xff;    // A17_A24,(Page Address) <br />    *data = (blockpage>>16)&0xff;// A25 (Page Address) <br />    <br />            <br />    <br />    for(i=0;i<528;i++)<br />    {<br />        *data = a;<br />    }<br />    <br />    <br />    <br />    IO0SET = (IO0SET|0x1000);<br />    IO0CLR = (IO0CLR|0x0800);<br />    *data = 0x10;             // 结束写命令 <br /><br />}<br /><br /><br />这个程序我是分为三部分(读id,擦出,写入)调试的,所以看上去有些重复定义;<br /><br />还有我想向zlgARM请教,我向0X0000处擦出或写入,会不会影响芯片的ID,他不是就在0X0000处吗<br /> |