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.
工具与软件:
您好!
我一直在致力于一个将大量代码从 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用户指南中的代码可以在该器件上使用。
如果 此系统上应该存在这些问题、这是否表明我的环境存在设置问题?
正确。 我想这些是 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 在很大程度上利用示例工作、目前只有一个小问题。 感谢你的帮助。