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