msp430f2132的IIC总是不出现时钟输出

2019-07-23 16:07发布

目的:MSP430F2132单片机控制CAT9555的I/O输出
遇到问题:单片机的SCL无时钟输出(检查初始化找不到原因)

#include <msp430x21x2.h>
#include "msp430time.h"

#define CAT9555_A   0x20    //CAT9555器件从地址a
#define CAT9555_B   0x21    //CAT9555器件从地址b

/*** 初始化430I/O ***/
void Init430_IO(void)
{
  P1DIR |= 0x73;
  P1OUT = 0x00;
  P2DIR |= 0x07;
  P2OUT = 0x00;
  P3SEL |= 0x00;
  P3DIR = 0x07;
  P3OUT = 0x06;
}

/*** 初始化430I2C ***/
void Init430_IIC(void)
{
  P3SEL |= 0x06;                                    //设置P3.1,2管脚I2C外设功能
  UCB0CTL1 = UCSWRST;                               //进入设置模式
  UCB0CTL0 |= 0x2F;//UCMST + UCMODE_3 + UCSYNC;            //选择I2C主设备同步模式
  UCB0CTL1 |= 0x90;//UCSSEL_1;                             //ACK 设置工作模式-发送模式
  UCB0BR0 =8;                                   //设置速率
  UCB0BR1 =0;
  UCB0CTL1 &= ~UCSWRST;                             //退出设置状态
}

void Write_IIC(unsigned char cmd,unsigned char data0,unsigned char data1)
{
   UCB0I2CSA = CAT9555_A;                 //将目标地址写进UCBxI2CSA寄存器
   UCB0CTL1 |= UCTR;
   UCB0CTL1 |= UCTXSTT;                   //产生起始条件
   while(UCB0CTL1 & UCTXSTT);             //等待从设备响应
   UCB0TXBUF = cmd;                       //写片内地址(命令)
   while(!(IFG2 & UCB0TXIFG));            //等待片内地址(命令)发送完毕
   if(UCB0STAT & UCNACKIFG)               //未响应
   {
     return ;
   }
   UCB0TXBUF = data0;                    //写数据0
   while(!(IFG2 & UCB0TXIFG));           //等待数据发送完毕
   if(UCB0STAT & UCNACKIFG)              //未响应
   {
     return ;
   }
   UCB0TXBUF = data1;                    //写数据1
   while(!(IFG2 & UCB0TXIFG));           //等待数据发送完毕
   if(UCB0STAT & UCNACKIFG)              //未响应
   {
     return ;
   }
   UCB0CTL1 |= UCTXSTP;                  //产生停止条件

}

void main( void )
{
  // 1.Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  // 2.配置系统时钟
  SetVmc430Clock();
  // 3.初始化定时器/中断
  InitTimer();
  // 4.初始化430I/O
  Init430_IO();
  // 5.初始化430I2C
  Init430_IIC();
  // 6.开总中断
  __bis_SR_register (GIE);
  // 7.延时2秒
  delayNx10ms(200);
  
  Write_IIC(0x06,0x00,0x02);
  Write_IIC(0x02,0x55,0x02);
  
}
这是main.c文件的程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。