打印

SPI读,没有时钟信号输出

[复制链接]
1914|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
米尔豪斯|  楼主 | 2016-7-16 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我用MPS430G2333 的SPI接口连接外部芯片,发现在SPI读的时候没有时钟信号CLK输出的?.
P1.4:STE     P1.5:CLK      P1.6:SOMI      P1.7:SIMO
的设置如下:
  P1SEL |= BIT5+BIT6+BIT7;     // Set SPI peripheral bits
  P1SEL2 |= BIT5+BIT6+BIT7;
  P1DIR |= BIT4+BIT5+BIT7;     // STE, SCLK, and DOUT as output
  P1DIR &= ~BIT6;                    // Din as input
  P1OUT |=BIT4;                      // Set STE high
  UCB0CTL1 |= UCSWRST;          // Enable SW reset
  UCB0CTL0 |= UCMSB+UCCKPH+UCMST+UCSYNC;    // [b0]   1 -  Synchronous mode
  // [b2-1] 00-  3-pin SPI
  // [b3]   1 -  Master mode
  // [b4]   0 - 8-bit data
  // [b5]   1 - MSB first
  // [b6]   0 - Clock polarity high.
  // [b7]   1 - Clock phase - Data is captured on the first UCLK edge and changed on the following edge.
  
  UCB0CTL1 |= UCSSEL_2;                // SMCLK
  UCB0BR0 = 0xFF;                             // 16 MHz
  UCB0BR1 = 0;                                //
  UCB0CTL1 &= ~UCSWRST;                // Clear SW reset, resume operation
  UC0IE |= UCB0RXIE;
  UC0IFG &= ~UCB0RXIFG;

我用SPI发数据是这样的:
  UCB0TXBUF = reg_address;                  
  while ( (UCB0STAT & UCBUSY) ); // USCI_B1 TX buffer ready?
这样CLK 和SMIO都有正确的脉冲输出哦!
但我读SPI,比如这样:
  S_buf = UCB0RXBUF;
就根本没有CLK的脉冲时钟输出啊?读不到数据.是我那里方法不对吗?

相关帖子

沙发
豆腐块| | 2016-7-16 20:41 | 只看该作者
读的方式不对,SPI的读不单单像是发一个数据那样简单,整个总线需要的时钟信号是由主机端提供的,也就是说不论是给从机发数据或者从从机读数据,这个时钟都要由主机来产生

使用特权

评论回复
板凳
309030106| | 2016-7-16 20:56 | 只看该作者
SPI的时钟只能出自master,master读数据的时钟通过自身发送数据产生,发送的无效数据与数据线在空闲状态的电平一致(0x00)。

使用特权

评论回复
地板
Ryze| | 2016-7-16 21:14 | 只看该作者
主机要读数据的时候需要给从机时钟信号,这个信号只能是在主机发数据的时候产生,这样就需要主机发一个数据,这样就产生了时钟信号,从机就会把数据放到总线上来了,为了避免这个假发出去的数据让从机误动作,一般都是让发送总线为高电平

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

731

帖子

1

粉丝