Board logo

标题: 关于S12C32上的SPI的一个问题 [打印本页]

作者: raifystein    时间: 2005-11-15 17:03     标题: 关于S12C32上的SPI的一个问题

我在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
 }
卡在黑体的地方..程序不动了


作者: raifystein    时间: 2005-11-16 15:28

今天我全部重建一个工程,一模一样的代码贴进去黑体的地方就能过去了...但是spi仍旧有问题..
现在的问题是我在主循环中不断发送spi指令理论上和dp256上的实验都是每次出现一个8位的clock信号,并能和数据对齐,现在c32上clock信号不停出现,没有8个,8个中间有小的间隔.(我在每个发送语句中间都加了delay,在dp256上明显8个8个sclk,但在c32上连续不断的clk出现)而且控制slave的cs使能也无法和数据或者sclk对齐..
PTT_PTT5=0;
  temp1=xferSPI0(0x55);  
  asm(nop);
  temp2=xferSPI0(0x55);     
  asm(nop);
PTT_PTT5=1;
,pt5 data direction已经设置为输出..但是出来的波形完全和数据错位,请教各位是什么原因




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0