M4的SPI发送与接收问题。急急急

Other Parts Discussed in Thread: ADS1254

我用M4控制ADS1254,ADS1254只能读,我是通过SPI。

现在有个问题:我要读数据,SCLK的时钟是怎么样产生的?为了产生SCLK是不是先发送,然后再接收。

可是有个问题,请看图,我先发送3个8位,再接收3个8位,中间是延时,为了发送完成,可是24位时钟产生了2次,刚好是一次发送一次接收,难道 接收也产生时钟么?

  SSIDataPutNonBlocking(SSI3_BASE,0);  //接收前发送数据 产生3个CLK 
  SSIDataPutNonBlocking(SSI3_BASE,0);   
  SSIDataPutNonBlocking(SSI3_BASE,0);  //
  OSTimeDly(1);              //发送上面的数据大概需要8ms
  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[0]);
  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[1]);
  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[2]); 

我把程序改为只是接收,不发送,可是波形一次都没有,就是SCLK根本没波形。

  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[0]);
  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[1]);
  SSIDataGetNonBlocking (SSI3_BASE, &ulDataRx[2]); 

这是为什么?我只要产生一次,为了读出数据。我要怎样写程序?

 

 

 

  • Hi Jason,

      SPI的工作原理是,主机在发送数据的时候,会有相应的时钟信号产生。发送和接收过程是通过clock信号的驱动,通过移位寄存器的方式实现的。

    换句话说,你在发送的过程,也伴随着一个接受的过程。如果你要接收24位的数据的话,可以分三次,每次发送八位的同时,接收slave传过来的8位数据。

    谢谢