我在 MSP430FR6989 Launch Pad 开发板上使用 I2C 接口。 UCB1SDA 功能在 P3.1、P4.0和 P4.6上可用、 而 UCB.S 功能在 P3.2、P4.1和 P4.7上可用。
我正在使用 UCB1SDA = P4.0和 UCB.S = P4.1。
问题1. 如何确保已针对 P4.0和 P4.1正确配置 UCB1 I2C 功能。
目前、我将与 MSP430FR6989 driverlib I2C 驱动程序一起执行以下步骤、
1。
//将 P4.0和 P4.1设置为主模块功能。
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P4、
GPIO_PIN0 + GPIO_PIN1、
GPIO_PRIMARY_MODULE_FUNCTION
);
2.初始化主设备(在初始化期间执行步骤2-4)
i2cParams.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
i2cParams.i2cClk = 2000000;// 2MHz
i2cParams.datarate = EUSCI_B_I2C_SET_DATA_RATE 100KBPS;
i2cParams.byteCounterThreshold = 0;
i2cParams.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster (EUSCI_B1_BASE、&i2cParams);
3.设置从机地址(7位设备地址)
EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、I2C_WRITE_ADDR >> 1);
4.//启用 I2C
EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE);
5.从 Wrte 到 I2C ( 当 Tx 中断发生时启用 Tx 中断以及第一个字节和第二个 senCOND 字节)
EUSCI_B_I2C_enableInterrupt (EUSCI_B1_base、EUSCI_B_I2C_Transmit、INTERRUPT0);
EUSCI_B_I2C_masterSendMultiByteStart (EUSCI_B1_base、txData.txBuffer[0]);
程序在发送第一个字节时卡住
IN 函数 EUSCI_B_I2C_masterSendMultiByteStart()
代码是
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG))
{
;
}
问题2. 上述顺序是否正确? 正确的指令序列是什么?
提前感谢。
Rajaram