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.

[参考译文] MSP430FR2675:在 MSP430中、I2C 和 SPI 连接到 eUSCI_B1。 如何进行协作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1393688/msp430fr2675-in-msp430-i2c-and-spi-are-connected-to-eusci_b1-how-it-works-together

器件型号:MSP430FR2675

工具与软件:

您好!

我想  对具有不同引脚的 SPI 和 I2C 使用 eUSCI_B1。 但它并不能一起工作。 如何解决?

void InitI2C (unsigned char EEPROM_i2c_address)

SYSCFG3&=~USCIB1RMP;

P3SEL0 |= BIT2 | BIT6;// I2C 引脚
P3SEL1 &=~Ω(BIT2 | BIT6);
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ H LOCKLPM5;

UCB1CTLW0 = UCSWRST;//启用软件复位
UCB1CTLW0 |= UCMODE_3 | UCMST | UCSSEL__SMCLK | UCSYNC;// I2C 主模式、SMCLK
UCB1BRW = 160;// fSCL = SMCLK/160 =~100kHz
UCB1I2CSA = EEPROM_i2c_address;//从器件地址
UCB1CTLW0 &=~μ s UCSWRST;//清除软件复位、恢复操作
UCB1IE |= UCNACKIE;
}

空 Strip_Init (){
//为 SPI 输出配置 P4.4
SYSCFG3|=USCIB1RMP;

P4SEL0 |=位4;
P4SEL1 &=~BIT4;
// P4SEL1 =(0);

//初始化 SPI 模块
UCB1CTLW0 |= UCSWRST;//将 SPI 模块置于复位状态

//配置 SPI 设置:时钟极性、时钟相位等
UCB1CTLW0 |= UCSYNC | UCCKPL | UCMSB | UCMST | UCSSEL_2;

UCB1BRW = 0x03;//设置时钟分频器

UCB1CTLW0 &=~μ s UCSWRST;//从复位状态释放 SPI 模块


}

谢谢你

Athulya

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

    您好!

    您可以将  eUSCI_Bx 配置为 I2C 或 SPI。 但是、不能 同时为 I2C 和 SPI 功能配置一个 eUSCI_Bx。  

    如果应用中需要一个 I2C 和一个 SPI、可以使用 eUSCI_B0作为 I2C、使用 eUSCI_B1作为 SPI 来实现您的目标。  

    此致、

    Cash Hao

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

    您好!

    是否有可能将   eUSCI_B1同时配置为 I2C 和 SPI。 它可以通过动态方式配置?

    谢谢你

    Athulya

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

    您好!

    如果您为 I2C 和 SPI 功能使用不同的引脚、我想您可以动态配置它。  

    此致、

    Cash Hao

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

    您好!

    我也尝试了这种可能性,但不起作用。

    谢谢你

    Athulya

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

    您好!

    您是否尝试过以下过程?  

    I2C init -> I2C function -> software reset MCU -> SPI init -> SPI function。

    此致、

    Cash Hao

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

    您好!

    由于您使用不同的引脚排列、为什么不 参考我之前推荐的内容呢?

    [报价 userid="278451" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1393688/msp430fr2675-in-msp430-i2c-and-spi-are-connected-to-eusci_b1-how-it-works-together/5331572 #5331572(2004)如果您的应用中需要一个 I2C 及一个 SPI、您可以使用 eUSCI_B0作为 I2C 及 eUSCI_B1作为 SPI 来实现目标。  [报价]

    此致、

    Cash Hao

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

    我没有理由认为您不能来回切换。 当你尝试它发生了什么?

    具体而言:

    > UCB1CTLW0 |= UCSYNC | UCCKPL | UCMSB | UCMST | UCSSEL_2;

    这不会改变 UCMODE、因此如果之前是 I2C (UCMODE=3)、它仍然是。 您可以通过以下方法取得成功:

    > UCB1CTLW0 = UCSYNC | UCCKPL | UCMSB | UCMST | UCSSEL_2 | UCMODE_0 | UCSWRST;// 3引脚 SPI、保持复位

    更笼统地说:我建议只通过 UCSWRST=1来更改引脚(USCIB1RMP + PxSEL)。 我已经看到、如果您意外地拔出引脚、I2C 总线监控器会变得混淆。