我正在尝试使用 P4.6和 P4.7作为 SDA 和 SCL 线路与 Raspberry PI 通信。 换句话说、该设置的配置将对 P1.2和 P1.3的 SDA 和 SCL 线使用 UCB1寄存器、而不是常用的 UCB0寄存器。
我的问题是、当我最初测试 UCB0的 I2C 配置代码时、该代码运行起来非常正常、在 RPI 端子上运行 i2cdetect -y 1能够检测到 MSP 从站地址。 但是、在更改代码以用于 UCB1寄存器并将 P4.6和 P4.7引脚用于 I2C 时、该代码无法正常工作。 该地址不会被检测到、出于某种原因、它不会检测到任何其他同时连接到 RPI 的地址。
这是我的代码、它非常基本、因为我只是想测试 RPI 能够检测从机地址(代码取自用户指南中的示例):
#包含
/**
* main.c
*/
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
UCB1CTLW0 = UCSWRST;//软件复位被启用
UCB1CTLW0 |= UCMODE_3 | UCSYNC;// I2C 模式、同步模式
UCB1I2COA0 = 0x48 | UCOAEN;//自有地址和使能
UCB1CTLW0 &=~μ A UCSWRST;//清除复位寄存器
UCB1IE |= UCRXIE + UCSTPIE;
P4SEL0 |= BIT6 | BIT7;
P4SEL1 &=~(BIT6 | BIT7);
PM5CTL0 &=~μ A LOCKLPM5;
UCB1IE |= UCTXIE + UCRXIE;//启用 TX&RX-INTERRUPT
GIE;//通用中断使能
/*
...
// eUSCI_B TX 中断服务例程内部
UCB1TXBUF = 0x77;//发送077h
...
// eUSCI_B RX 中断服务例程内部
DATA = UCB1RXBUF;// data 是内部变量
*/
返回0;
}