msp430f5438硬件i2c问题

2019-03-24 11:36发布

请教一个问题,官网的资料上都是利用中断的,但是我不想使用中断,只想使用专断标志位帮助我判断状态,但是我发现很奇怪,首先发送完slave地址以后没有ack的clk出现使得ubxctrl1的开始条件位不能自动复位,另外在发送数据时都需要延时,不然不会有任何数据出现。请问大家有没有碰上过类似的情况 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
flywith
2019-03-24 15:44
< UCB1I2CSA =WRITEADDR;               
      while (UCB1CTL1 & UCTXSTP);         
      UCB1CTL1 |=  UCTXSTT+UCTR ;   

// while(UCB1CTL1 & UCTXSTT) ;    uctxstt放在这里会死循环。

       while(! (UC1IFG & UCB1TXIFG) )  ;      
      UCB1TXBUF = addr;         
                  
     while(UCB1CTL1 & UCTXSTT) ;  放在这里就通过了
      while( !(UC1IFG & UCB1TXIFG) )  ;
      UCB1TXBUF =  data;
      while( !(UC1IFG & UCB1TXIFG) )  ;
      UCB1CTL1 |= UCTXSTP;               
      UC1IFG &= ~UCB1TXIFG;               
      delay_ms(1);


感觉像楼主说的,UCB1CTL1 |=  UCTXSTT+UCTR ;   
并没真的开始有应答,当有数据写入的时候,UCB1TXBUF = addr;  才会有ack,这个时候uctxstt才会清楚。

一周热门 更多>

相关问题

    相关文章