按照您给的链接看了,第一个帮助比较大<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 />
|