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.

[参考译文] MSP432E401Y:I2C 问题、driverlib 函数不可用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1396494/msp432e401y-i2c-issues-driverlib-functions-not-available

器件型号:MSP432E401Y

工具与软件:

您好!

我一直在致力于一个将大量代码从 MSP430移植到 MSP432的项目、而且我们将使用 MSP432E401的以太网功能。  我能够获得大多数必需的功能、但我找到的诸如 MSP432用户指南参考函数等资源似乎并不存在。  我已经做完了介绍、重新安装了 CCS 和 SimpleLink SDK、但没有效果。  我想知道这些函数是否只适用于 MSP432Pxx 器件、但还没有找到相关答案。

我已尝试按如下方式设置和使用 I2C:

#define I2C_BASE_ADDR I2C9_BASE



void I2CInit(){

	MAP_GPIOPinConfigure(GPIO_PA0_I2C9SCL);
	MAP_GPIOPinConfigure(GPIO_PA1_I2C9SDA);
	MAP_GPIOPinTypeI2C(GPIO_PORTA_BASE, (GPIO_PIN_0 | GPIO_PIN_1));

	MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C9);
	while(!(MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_I2C9)));


	I2CMasterInitExpClk(I2C_BASE_ADDR, g_ui32SysClock,0);
	I2CMasterEnable(I2C_BASE_ADDR);




}
void I2CwB(char data){

	int cycles = 0;
	int err = 0;
	int fifo = 0;


	while(!I2CFIFODataPutNonBlocking(I2C_BASE_ADDR,data)) {
		cycles++;
		delay_ms(10);
		err = I2CMasterErr(I2C_BASE_ADDR);
		fifo = I2CFIFOStatus(I2C_BASE_ADDR);
		if(cycles % 8 == 0)I2CTxFIFOFlush(I2C_BASE_ADDR);


	}
}

这能够顺利执行、但是我发现 SCL 线变为低电平、SDA 线从未被拉低、并且 ICwB 的调用无论如何也不会影响引脚。

我添加了 I2CMasterErr 和 I2CFIFOStatus、以便可以收集更多信息、但其中没有错误或任何非常有趣的信息。


提前感谢您的任何帮助。  我非常感谢。

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

    您好!

     我注意到你的代码中有一个错误。 您写道:

    MAP_GPIOPinTypeI2C (GPIO_PORTA_BASE、(GPIO_PIN_0 | GPIO_PIN_1));

    但它应该是:

    MAP_GPIOPinTypeI2CSCL (GPIO_PORTA_BASE、GPIO_PIN_0);
    MAP_GPIOPinTypeI2C (GPIO_PORTA_BASE、GPIO_PIN_1);

    我不确定您的 I2CwB 的目的是什么。 您似乎缺少几行代码来设置从地址、使用 MAP_I2CMasterDataPut()准备数据以及使用 MAP_I2CMasterControl 启动状态机。 您可以在 C:\ti\simplelink_msp432e4_sdk_4_20_00_12\examples\nortos\MSP_EXP432E401Y\driverlib 下在 MSP432E SDK 中找到多个 I2C 示例。 我建议您从 i2c_mastermode_simple_transfer 开始。  

    此 MSP432E I2C 应用手册也非常有用。 请注意、MSP432E 和 MSP430 I2C 不是同一 IP。  

    https://www.ti.com/lit/pdf/slaa776

    本链接中记录了 MSP432E 的所有 I2C API。  https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/3.10.00.11/docs/driverlib/msp432e4/html/i2c_8c.html

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

    谢谢、这绝对是有帮助的。  我找到了大量涉及似乎不存在的函数的示例参考代码。  这只是 MSP432Pxx 与 MSP432E 系列的区别吗?  感谢您的答复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     我找到了大量涉及似乎不存在的函数的示例参考代码。

    您好!

     我不明白这句话。 您是否指的是  不适用于 MSP432P 的函数(例如 MAP_I2CMasterControl、MAP_I2CMasterDataPut 等)? 请注意、MSP432P 和 MSP432E 使用不同的 I2C IP。  MAP_I2CMasterControl 和 MAP_I2CMasterDataPut 等函数以及 https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/3.10.00.11/docs/driverlib/msp432e4/html/i2c_8c.html 中介绍的所有 API 仅与 MSP432E 相关。 它们不适用于 MSP432P 或其他 MSP430 MCU。  

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

    很抱歉混淆了。  例如、如果我查看 MSP432用户指南、它包含以下用于使用 I2C 的代码块:  
    但是问题是、我为 MSP432E401Y 安装的 driverlib 似乎没有 MAP_I2C_initMaster 或 MAP_I2C_setSlaveAddress、也没有我在示例代码中找到的其他几个函数。  它特定于 MSP432Pxx 吗?  我认为 MSP432用户指南中的代码可以在该器件上使用。

    如果 此系统上应该存在这些问题、这是否表明我的环境存在设置问题?  

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

    [报价 userid="618004" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1396494/msp432e401y-i2c-issues-driverlib-functions-not-available/5347832 #5347832"]然而、问题是、我为 MSP432E401Y 安装的 driverlib 似乎没有 map_I2C_initMaster 或 map_I2C_setSlaveAddress 、或者我在示例代码在线中找到的其他几个函数。  它特定于 MSP432Pxx 吗?  我认为 MSP432用户指南中的代码可以在该器件上使用。
    [报价]

    正确。 我想这些是 MSP432P 的 driverlib 函数。 在 driverlib 级别、MSP432P 和 MSP432E 的函数将不同。 如果您计划使用裸机系统(非 RTOS)、则需要为所选器件使用特定的 driverlib。 但是、如果您计划使用 TI-RTOS、则有一个 I2C 驱动程序可用于所有支持 SimpleLink 平台的器件。  

    如果您在 C:\ti\simplelink_msp432p4_sdk_3_40_01_02\examples\rtos\msp_EXP432P401R\drivers\i2ctmp 和 C:\ti\simplelink_msp432e4_sdk_4_20_00_12\examples\rtos\msp_432i2c\tmp、您将找到相同的驱动程序函数、即会找到相同的驱动程序。  

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

    谢谢、这解决了我之前遇到的很多困惑。  我还能够使 I2C 在很大程度上利用示例工作、目前只有一个小问题。  感谢你的帮助。