TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f6638 能否用UCB1 进行I2C总线控制?

我在用 MSP430F6638和DAC8571进行I2C总线配置是发现时钟有时出不来  有时时钟能出来的话 但是收不到 DAC8571 的应答信号  其中DAC8571的 A0接地   所以从机地址为0x4C   请问     UCB1能否配置出I2C总线或者 是不是UCB1  不稳定   求解决方案 

灰小子:

你说的是USCI_B吧,可以配置成稳定的I2C的。

检查下配置代码和与DAC8571通讯的时序吧

Bill Li1:

回复 灰小子:

#include "msp430f6638.h"#include "user\system.h"     //这个是配置适中的头文件#include "user\I2C.h"

void InitI2C(void){ P8SEL|=BIT6+BIT5; //P8DIR|=BIT5+BIT6; UCB1CTL1|=UCSWRST; UCB1CTL0|=UCMST+UCSYNC+UCMODE_3 ; //选择I2C模式 //UCB0CTL&=~I2CEN; //禁止I2C模块 UCB1CTL1=UCSSEL_2+UCTR; //设置I2C为7位地址模式,不使用DMA,字节模式,时钟源为SMCLK,设置成传输模式 //UCB1I2CSA=0X98; //定义从器件地址 默认为dac8571地址 其A0=0;写操作 UCB1I2COA=0X045; //设置本身的地址 UCB1BR0=40; //I2C时钟为SMCLK / 160 UCB1CTL1&=~UCSWRST;}

void main( void ){ unsigned int i; unsigned char Com,H,L; //unsigned char H,L; // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //initial SysCtrlInit(); //BUS_Init(); //Lcd_Init(); //lcd_clear(); //SPIA1_Init(); InitI2C(); i=0; while(1)

{ Com=0x10 ; H= 0x40 ; L=0x00 ; UCB1I2CSA=0x4C; UCB1CTL1|=UCTR;

cal: UCB1CTL1|=UCTXSTT; UCB1TXBUF=Com; while (UCB1CTL1&UCTXSTT) { if(UCB1IFG&UCNACKIFG) goto cal; } while (!(UCB1IFG&UCTXIFG)) ; UCB1TXBUF=H; while (!(UCB1IFG&UCTXIFG)) ; UCB1TXBUF=L; while (!(UCB1IFG&UCTXIFG)) ; UCB1CTL1|=UCTXSTP; //__delay_cycles(100); while (UCB1CTL1 & UCTXSTP); }

这个是源代码  但是没有时钟输出 

}

赞(0)
未经允许不得转载:TI中文支持网 » msp430f6638 能否用UCB1 进行I2C总线控制?
分享到: 更多 (0)