目的: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文件的程序 |