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