您好!
我正在使用 msp430f5659并尝试将 RTC DS1307与 I2C 协议连接。 我无法使用 I2C 发送和接收数据。 我只能传输一次命令。 我已经修改了 msp430f5系列的 ti 示例代码。我的代码在这里:
void i2c_send (unsigned char byte_to_send、unsigned char TXByteCtr)
{
TXData = BYTE_TO_SEND; //保存 TX 数据
while (UCB2CTL1 & UCTXSTP); //确保发送了 STOP 条件
UCB2CTL1 |= UCTR | UCTXSTT; // I2C TX,启动条件
_bis_SR_register (LPM0_bits | GIE); //输入 LPM0、带中断
}
void i2c_receive (unsigned char * PRxData)
{
RXByteCtr = 0; //清除 RX 字节计数
UCB2CTL1 &=~Ω UCTR | UCTXSTT; // I2C RX、START 条件
_bis_SR_register (LPM0_bits | GIE); //输入 LPM0、带中断
}
// USCI_B1数据 ISR
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCI_B2_vector
_interrupt void USCI_B2_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_B2_vector)) USCI_B2_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (UCB2IV、12))
{
情况 0:中断; //向量 0:无中断
情况 2:中断; //向量 2:ALIFG
情况 4:中断; //向量 4:NACKIFG
情况 6:中断; //向量 6:STTIFG
案例 8:
UCB0IFG &=~UCSTPIFG;
if (RXByteCtr) //检查 RX 字节计数器
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);
中断; //向量 8:STPIFG
情况10: //向量10:RXIFG
* PRxData++= UCB0RXBUF; //将 RXd 字节放入缓冲区
RXByteCtr +;
中断;
情况12:
if (TXByteCtr) //检查 TX 字节计数器
{
UCB2TXBUF = TXData; //加载 TX 缓冲区
TXByteCtr -; //减量 TX 字节计数器
}
其他
{
UCB2CTL1 |= UCTXSTP; // I2C 停止条件
UCB2IFG &=~UCTXIFG; //清除 USCI_B0 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0
}
中断;
//向量12:TXIFG
默认值:break;
}
}
在此代码中、我将发送命令
I2C_SEND (0xD0、1);
I2C_SEND (0x07、1);
它正在传输第1条命令、而不是第2条命令。 我已经检查了所有标记、尝试单独清除它们、但问题未得到解决。 请帮帮我。