[ZLG-ARM] 不能读出M25P64,寻求帮助

[复制链接]
 楼主| 地下水 发表于 2007-10-10 20:43 | 显示全部楼层 |阅读模式
本人使用的调试环境为ADS1.2,&nbsp;LPC2132&nbsp;CPU,&nbsp;该板上有一片串行Flash&nbsp;芯片M25P64,<br />本人使用SPI0的与其通信,但是不能读出数据,请调通过的大侠给与帮助.<br /><br />&nbsp;&nbsp;有示波器观察&nbsp;MOSI,&nbsp;CLK&nbsp;的波形均正确,但MISO没有任何输出.<br />一个从机,CS硬件直接接地。。。<br /><br /><br />void&nbsp;&nbsp;DelayNS(uint32&nbsp;&nbsp;dly)<br />{&nbsp;&nbsp;uint32&nbsp;&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;for(;&nbsp;dly&gt0;&nbsp;dly--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt5000;&nbsp;i++);<br />}<br /><br /><br />/****************************************************************************<br />*&nbsp;名称:MSpiIni()<br />*&nbsp;功能:初始化SPI接口,设置为主机。<br />*&nbsp;入口参数:无<br />*&nbsp;出口参数:无<br />****************************************************************************/<br />void&nbsp;&nbsp;MSpiIni(void)<br />{&nbsp;&nbsp;S0PCCR&nbsp;=&nbsp;0x52;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置SPI时钟分频<br />&nbsp;&nbsp;&nbsp;S0PCR&nbsp;=&nbsp;0x70;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置SPI接口模式,MSTR=1,CPOL=1,CPHA=1,LSBF=0<br />}<br /><br /><br />/****************************************************************************<br />*&nbsp;名称:MSendData()<br />*&nbsp;功能:向SPI总线发送数据,并接收从机发回的数据。<br />*&nbsp;入口参数:data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;待发送的数据<br />*&nbsp;出口参数:返回值为接收到的数据<br />****************************************************************************/<br />uint8&nbsp;&nbsp;MSendData(uint8&nbsp;data)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;S0PDR&nbsp;=&nbsp;data;<br />&nbsp;&nbsp;&nbsp;while(&nbsp;0==(S0PSR&0x80)&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;等待SPIF置位,即等待数据发送完毕<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;return(S0PDR);<br />}<br /><br /><br />int&nbsp;&nbsp;main(void)<br />{&nbsp;&nbsp;uint8&nbsp;&nbsp;i;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;0x00005500;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置SPI0管脚连接?<br />&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;=&nbsp;0x00000000;<br /><br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;MSpiIni();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;初始化SPI接口<br /><br />&nbsp;&nbsp;MSendData(0x9f);<br />&nbsp;MSendData(0xaa);<br />&nbsp;MSendData(0xaa);<br />&nbsp;MSendData(0xaa);<br />&nbsp;&nbsp;DelayNS(10);<br /><br />&nbsp;&nbsp;&nbsp;while(1);&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br /><br />
tangsunsun 发表于 2007-10-11 14:03 | 显示全部楼层

25p16

我用的是25p16<br />uint8&nbsp;RDSR(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读状态寄存器<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x05;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;bak;<br />}<br />void&nbsp;WREN(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写允许<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x06;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />}<br /><br />void&nbsp;WRDI(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写屏蔽<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />}<br />void&nbsp;WRSR(uint8&nbsp;dat)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写状态寄存器<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;WREN();<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=dat;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);<br />}<br />uint8&nbsp;READByte(uint32&nbsp;addr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt16)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt8)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt0)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;bak;<br />}<br />void&nbsp;READBytes(uint32&nbsp;addr,uint32&nbsp;len,uint8&nbsp;*ptr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x04)!=0)bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt16)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt8)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt0)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltlen;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;PP(uint32&nbsp;addr,uint32&nbsp;len,volatile&nbsp;uint8&nbsp;*ptr)&nbsp;&nbsp;&nbsp;&nbsp;//页面编程<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;WREN();<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt100;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;if((RDSR()&0x02)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WREN();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt200;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt16)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt8)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(len&gt256)len=256;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltlen;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />}<br />void&nbsp;SE(uint32&nbsp;addr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//扇区擦除<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;WREN();<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt100;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xD8;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=(addr&gt&gt16)&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt100;i++);<br /><br />}<br />void&nbsp;EnterPownDown(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//睡眠<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xB9;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt100;i++);<br />}<br />void&nbsp;OutPownDown(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//唤醒<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xAB;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt1000;i++);<br />}<br />uint32&nbsp;RDID(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x02)==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0x9F;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x02)==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x02)==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x02)==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xFF;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x04)==0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;i=bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x04)==0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;i|=(bak&lt&lt8);<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x04)==0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;i|=(bak&lt&lt16);<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x04)==0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;i|=(bak&lt&lt24);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;i;<br />}<br />void&nbsp;Program(uint32&nbsp;addr,volatile&nbsp;uint8&nbsp;*buf,uint32&nbsp;len)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;OutPownDown();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//唤醒<br />&nbsp;&nbsp;&nbsp;&nbsp;PP(addr,256,buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;EnterPownDown();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//睡眠<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />uint32&nbsp;BulkErase(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;k,i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;bak;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OutPownDown();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//唤醒<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;WREN();<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt30;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR=0xC7;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((SSPSR&0x10)!=0);<br />&nbsp;&nbsp;&nbsp;&nbsp;bak=SSPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET=CSF;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((RDSR()&0x01)!=0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待不忙<br />&nbsp;&nbsp;&nbsp;&nbsp;k=&nbsp;RDID();<br />&nbsp;&nbsp;&nbsp;&nbsp;EnterPownDown();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//睡眠<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;k;<br />}
 楼主| 地下水 发表于 2007-10-11 20:35 | 显示全部楼层

谢谢

非常感谢,调试中,有问题会再提上来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部