我在DP256板上运行完全正常的一段SPI程序,移植到c32上就不行了,具体情况是dp256上spi什么也不接,然后运行程序,SPI产生波形,但在C32上,外面接了一块33984和一块33389的SPI,但是2块芯片的SPI片选我都关了.然后运行SPI程序..结果卡在查询接收完成这里,但是通过观察P&E的MEMORY窗口,SPIDR = abyte;执行以后,SPISR就会变成A0(如果开SPISR的MEMORY窗口在256下也会因为该位被仿真器访问被清除,造成死循环,这里我观察的时候发现SPISR是正常变化的.而调试的时候我memory窗口没有加入SPISR,所以理论上应该过的去),请问其他用C32的朋友是否碰到过这种问题?还是我这块c32芯片的问题?
SPI程序:
void initSPI(unsigned char bauddiv) {
// SS,SCK,MOSI Output
DDRM_DDRM2= 0x0; DDRM_DDRM3= 0x1; DDRM_DDRM4= 0x1; DDRM_DDRM5= 0x1; SPIBR = bauddiv; // set SPI Rate // enable SPI, Master Mode, select clock polarity/phase SPICR1 = 0x50; SPICR2 = 0x0; // as default }
//-----------------------------------------------------------------------------
unsigned char xferSPI0(unsigned char abyte) { SPIDR = abyte; // start transfer while((SPISR & 0x80)==0); // wait until transfer finished return(SPIDR); // read back data received } 卡在黑体的地方..程序不动了 |