首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于S12C32上的SPI的一个问题

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

今天我全部重建一个工程,一模一样的代码贴进去黑体的地方就能过去了...但是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已经设置为输出..但是出来的波形完全和数据错位,请教各位是什么原因
返回列表