[ZLG-ARM] 请教2138的基于UC下SPI访问FLASH问题。

[复制链接]
2187|1
 楼主| lw2008 发表于 2007-3-29 20:21 | 显示全部楼层 |阅读模式
请教一个问题:<br /><br />用的UC中间件SPI模块改的访问AT45DB161B。<br />写入后,读出来只有0x00和0xFF。<br /><br />参考了网友LPC2106的SPI访问AT45DB32。<br /><br /><br />这样改了下,不知可能有何问题。<br /><br />static&nbsp;OS_EVENT&nbsp;*SPIReviceMbox;<br />static&nbsp;OS_EVENT&nbsp;*SPISem;<br />static&nbsp;uint8&nbsp;UseSPITaskPro;<br />static&nbsp;uint8&nbsp;spidata;<br /><br />uint8&nbsp;SPIRW(uint8&nbsp;*Rt,&nbsp;uint8&nbsp;Data,uint16&nbsp;timeout)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;temp,&nbsp;err;<br />&nbsp;&nbsp;&nbsp;&nbsp;err=OS_NO_ERR;<br />//&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;GetOSPrioCur();<br />//&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp&nbsp;==&nbsp;UseSPITaskPro)<br />//&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_SPDR&nbsp;=&nbsp;Data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;(unsigned&nbsp;int)OSMboxPend(SPIReviceMbox,&nbsp;timeout,&nbsp;&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Rt&nbsp;=&nbsp;spidata;<br />//&nbsp;&nbsp;&nbsp;&nbsp;}<br />//&nbsp;&nbsp;&nbsp;&nbsp;else<br />//&nbsp;&nbsp;&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err=SPIRW_ERR;<br />//&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;err;<br />}<br /><br /><br />void&nbsp;SPI_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;temp,temp1;<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;SPI_SPSR;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((temp&nbsp;&&nbsp;0x80)&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1&nbsp;=&nbsp;SPI_SPDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spidata=temp1;temp1=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当邮箱传递0时会产生超时错,因而使用一个全局变量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSMboxPost(SPIReviceMbox,&nbsp;(void&nbsp;*)temp1);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((temp&nbsp;&&nbsp;0x10)&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_SPCR&nbsp;=&nbsp;0xa0&nbsp;|&nbsp;SPI_MOD;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;SPI_SPINT&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;通知中断控制器中断结束<br />&nbsp;&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />}
zlgARM 发表于 2007-4-17 21:27 | 显示全部楼层

lw2008

用前后台版的SPI例程试试?<br />要注意以下2点:<br />1、FLASH芯片焊接没问题,最好用万用表测测;<br />2、芯片对SPI时序的要求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

296

帖子

0

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