打印

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

[复制链接]
1694|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaodehua512|  楼主 | 2016-2-17 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的: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文件的程序

相关下载

相关帖子

沙发
zhaodehua512|  楼主 | 2016-2-17 15:50 | 只看该作者
在线等大神解救

使用特权

评论回复
板凳
dirtwillfly| | 2016-2-17 20:45 | 只看该作者
先除掉从器件,单独看mcu运行的时候有没有波形
另外,你的电路是怎么样的?可以增加一个上拉电阻试试

使用特权

评论回复
地板
ayl439| | 2016-2-18 11:57 | 只看该作者
建议模拟IIC,430的IIC有不少BUG,可以参考ErrataSheet,但是实际上大多数情况下用模拟IIC更简单

使用特权

评论回复
5
shenmu2012| | 2016-2-18 11:58 | 只看该作者
这个先看下时钟源的正常不,然后检查硬件方面的设计的。

使用特权

评论回复
6
firstblood| | 2016-2-18 16:33 | 只看该作者
这个暂时还没看出个所有原的来。。

使用特权

评论回复
7
尤彼卡| | 2016-2-29 20:57 | 只看该作者
一般iic通讯,在主设备发送读寄存器命令后,需要等待从设备ACK。一般主设备接收从设备ACK时,可以使用中断服务程序接收数据或者读取rx引脚。

使用特权

评论回复
8
可可球| | 2016-2-29 21:04 | 只看该作者
用的硬件IIC?不行就来模拟吧

使用特权

评论回复
9
yiyigirl2014| | 2016-2-29 22:02 | 只看该作者
http://www.deyisupport.com/quest ... 0/f/55/t/78902.aspx
看这个帖子,根据作者的意思,有可能这个芯片IIC有BUG,不好用。

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝