工具/软件:Code Composer Studio
您好!
我正在使用 I2C 通信将 MAX30100 (脉动式血氧计传感器)与 MSP430连接。 我正在传输器件 ID 地址、但无法读取其值。 它在接收缓冲器中被存根。 当我们启动 I2C 条件时、NACKIFG 总是变为1。
#pragma vector = USCIAB0TX_vector
_interrupt void USCIAB0TX_ISR (void)
{
if (rx = 1){ //主机接收?
PRxData[0]= UCB0RXBUF; //获取 RX 数据
temp++;
_BIC_SR_REGISTER_ON_EXIT (CPUOFF); //退出 LPM0
// UCB0CTL1 |= UCTXSTP; // I2C 停止条件
// rx-;
IFG2 &=~UCB0RXIFG;
}
else{ //主机发送
if (TXByteCtr) //检查 TX 字节计数器
{
UCB0TXBUF = 0xFF; //加载 寄存器0xFF 的 TX 缓冲地址
TXByteCtr -; //减量 TX 字节计数器
标记----;
UCB0CTL1 |= UCTXSTP; // I2C 停止条件
IFG2 &=~UCB0TXIFG; //清除 USCI_B0 TX 内部标志
_DELAY_CYCLES (112505);
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);
}
}
}
void init_I2C (void){
UCB0CTL1 |= UCSWRST; //启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST; //使用 SMCLK、保持软件复位
UCB0BR0 = 12; // fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = itgAddress; //从器件地址为069h
UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复运行
IE2 |= UCB0RXIE + UCB0TXIE; //启用 RX 和 TX 中断
}
void transmit (void){
while (UCB0CTL1 & UCTXSTP); //确保发送了 STOP 条件
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
UCB0STAT &=~UCNACKIFG;
_bis_SR_register (CPUOFF + GIE); //输入 LPM0、带中断
}
void receive (void){
while (UCB0CTL1 & UCTXSTP); //确保发送了 STOP 条件
UCB0CTL1 &=~UCTR; //清除 UCTR
UCB0CTL1 |= UCTXSTT; // I2C 启动条件
UCB0STAT &=~UCNACKIFG;
while (UCB0CTL1 & UCTXSTT); //起始条件是否发送?
UCB0CTL1 |= UCTXSTP; // I2C 停止条件
_bis_SR_register (CPUOFF + GIE); //输入 LPM0、带中断
}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}--><!--kadov_tag{</spaces>}}--> >在这里停止
有人能告诉我们问题是什么以及如何解决。 提前感谢。