This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2355:UCB1寄存器不能正常工作、I2C 功能不能正常工作

Guru**** 1831610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1275853/msp430fr2355-ucb1-register-is-not-functioning-properly-i2c-function-not-working

器件型号:MSP430FR2355

我正在尝试使用 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;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否切换到  

    > #pragma vector=EUSCI_B1_VECTOR

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗯、它应该很重要、对吧。 在本例中、我只是尝试通过 Raspberry PI 重新生成地址。 因此、一旦配置完毕并在 RPI 终端上运行 i2cdetect -y 1、MSP 就会弹出为

    我意识到、它可能是损坏/损坏的引脚、因为在使用可正常工作的 I2C UCB0时、SCL 引脚读数为0.7伏、SDA 和 SCL 提供3.3V 电压

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我问,因为这一改变很容易忘记,如果你忘记了你可以得到你描述的症状.

    您是否能够为您的 ISR 发布代码?