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.

[参考译文] RTOS/MSP430F5659:I2CUSCIB1和 I2CUSCIB2的 I2C 端口初始化

Guru**** 2610995 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582512/rtos-msp430f5659-i2c-port-initialization-for-i2cuscib1-and-i2cuscib2

器件型号:MSP430F5659

工具/软件:TI-RTOS

您好!

我正在为 MSP430F5659控制器使用基于 TI RTOS 的应用、我的设计中有2条 I2C 总线

即  

I2CUSCIB1 -用于 EEPROM/Temp IC

I2CUSCIB2 -用于串行至并行开关 IC

我正在使用以下代码来初始化 I2C 句柄,

I2CUSCIB_Object i2cUSCIBObjects[MSP_MSP430F5659_I2CCOUNT

CONST I2CUSCIB_HWAttrs i2cUSCIIBHWAttrs[MSP_MSP430F5659_I2CCOUNT ={

baseAddr = USCI_B1_base、

时钟源= USCI_B_I2C_CLOCKSOURCE_SMCLK

}、

 {

  baseAddr = USCI_B2_base、

    时钟源= USCI_B_I2C_CLOCKSOURCE_SMCLK

};

const I2C_Config I2C_CONFIG[]={

.fxnTablePtr =&I2CUSCIB_fxnTable、

.object =&i2cUSCIBObjects[0]、

hwAttrs =&i2cUSCIBHWAttrs[0]

}、

 {

 .fxnTablePtr =&I2CUSCIB_fxnTable、

 .object =&i2cUSCIBObjects[1]、

 hwAttrs =&i2cUSCIBHWAttrs[1]

 }

};

/*

*==== MSP_MSP430F5659_initI2C ===

*

void MSP_MSP430F5659_initI2C (void)

/*

*注意:TI-RTOS 示例将 USCIB0配置为 SPI 或 I2C。 因此、

*在中同时使用 I2C 和 SPI 驱动程序时会发生冲突

*应用程序。 修改此文件中的引脚多路复用设置并解析

*运行应用程序前发生冲突。

*

GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P8、

GPIO_PIN5 | GPIO_PIN6);

 GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P9、

 GPIO_PIN5 | GPIO_PIN6);

I2C_init()

这是处理2条 I2C 总线的正确方法吗?

我想知道这在处理应用程序时是否会造成任何问题。

如果有任何其他方式处理 I2C 例程、请为我提供指导。

我之前有一条具有多路复用功能的单总线 I2CUSCIB1,它工作正常,现在我再添加一条总线 I2CUSCIB2。

提前感谢

Nitesh

I2CUSCIB_Object i2cUSCIBObjects[MSP_MSP430F5659_I2CCOUNT

//#ifdef EEPROM

CONST I2CUSCIB_HWAttrs i2cUSCIIBHWAttrs[MSP_MSP430F5659_I2CCOUNT ={

baseAddr = USCI_B1_base、

时钟源= USCI_B_I2C_CLOCKSOURCE_SMCLK

}、

//{

//.baseAddr = USCI_B2_base、

//.clockSource = USCI_B_I2C_CLOCKSOURCE_SMCLK

//}

};

const I2C_Config I2C_CONFIG[]={

.fxnTablePtr =&I2CUSCIB_fxnTable、

.object =&i2cUSCIBObjects[0]、

hwAttrs =&i2cUSCIBHWAttrs[0]

}、

//{

//.fxnTablePtr =&I2CUSCIB_fxnTable,

//.object =&i2cUSCIBObjects[1],

//.hwAttrs =&i2cUSCIBHWAttrs[1]

//}

};

/*

*==== MSP_MSP430F5659_initI2C ===

*

void MSP_MSP430F5659_initI2C (void)

/*

*注意:TI-RTOS 示例将 USCIB0配置为 SPI 或 I2C。 因此、

*在中同时使用 I2C 和 SPI 驱动程序时会发生冲突

*应用程序。 修改此文件中的引脚多路复用设置并解析

*运行应用程序前发生冲突。

*

GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P8、

GPIO_PIN5 | GPIO_PIN6);

//

// GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P9、

// GPIO_PIN5 | GPIO_PIN6);

I2C_init()

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

    您好、Nitesh、

    这对我来说基本上是正确的、尽管我尚未检查引脚编号是否正确。  您还需要编辑电路板的头文件以将第二个 I2C 添加到枚举中。  例如:

    typedef 枚举 MSP_EXP430F5529LP_I2CName{
       MSP_EXP430F5529LP_I2CB0 = 0、

       MSP_EXP4305529LP_I2CB1 = 1、

       MSP_EXP430F5529LP_I2CCOUNT
    } MSP_EXP430F5529LP_I2CName;

    此致、

    Janet

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

    感谢 Janet、

    甚至我也有疑问、我们是否需要更新.cfg 文件以添加用于第二个 I2C 总线处理的中断?

    请提前发表评论、谢谢

    Nitesh

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

    您好、Nitesh、

    是的、您需要在.cfg 文件中添加另一个 Hwi。  您可以使用相同的 ISR 函数。  我不确定中断编号、但.cfg 代码可能看起来是这样的:

    hwiParams.arg = 1
    halHwi.create (45、"&I2CUSCIB_hwiIntFxn"、hwiParams);

    此致、

    Janet

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

    谢谢、

    我已在.cfg 中添加了新中断并进行测试、如果有任何问题、我将返回。

    感谢您的支持、

    Nitesh