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文件的程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhaodehua512
1楼-- · 2019-07-23 16:29
 精彩回答 2  元偷偷看……
dirtwillfly
2楼-- · 2019-07-23 17:56
先除掉从器件,单独看mcu运行的时候有没有波形
另外,你的电路是怎么样的?可以增加一个上拉电阻试试
ayl439
3楼-- · 2019-07-23 23:00
建议模拟IIC,430的IIC有不少BUG,可以参考ErrataSheet,但是实际上大多数情况下用模拟IIC更简单
shenmu2012
4楼-- · 2019-07-24 00:56
这个先看下时钟源的正常不,然后检查硬件方面的设计的。
firstblood
5楼-- · 2019-07-24 06:35
这个暂时还没看出个所有原的来。。
尤彼卡
6楼-- · 2019-07-24 07:53
 精彩回答 2  元偷偷看……

一周热门 更多>