我在用 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); }
这个是源代码 但是没有时钟输出
}