主题中讨论的其他器件:LP5569、 MSP430FR2476
我无法建立从 MSP430FR2476 (主器件)到 LP5569 (从器件) LED 驱动器的多字节中断驱动 I2C 通信。 我已经按照这些示例设置了一些框架代码、我只想向 LP5569写入两个字节。 也就是、我需要向其发送一个控制寄存器地址、以及要写入该控制寄存器的数据。 我将0x40用作从器件地址的值。
下面是我尝试执行的操作的大致草图:
#include "driverlib.h" #include #define SLAVE_ADDRESS 0x40 //指向 TX 数据的指针 uint8_t TXData = 0; uint8_t TXByteCtr; void main (void) { WDT_A_HOLD (WDT_A_base); //为 I2C 配置引脚 GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P1、 GPIO_PIN2 + GPIO_PIN3、 GPIO_PRIMARY_MODULE_FUNCTION ); /* *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 * PMM_unlockLPM5 (); EUSCI_B_I2C_initMasterParam param ={0}; param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = CS_getSMCLK (); param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS; param.byteCounterThreshold = 0; param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param); //指定从器件地址 EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、 从器件地址 ); //将主设备设置为接收模式 EUSCI_B_I2C_setMode (EUSCI_B0_BASE、 EUSCI_B_I2C_Transmit 模式 ); //启用 I2C 模块以启动操作 EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE); EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、 EUSCI_B_I2C_Transmit INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT ); //启用主机接收中断 EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE、 EUSCI_B_I2C_Transmit INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT ); EUSCI_B_I2C_masterSendMultiByteStart (EUSCI_B0_BASE、0x40); for (;;;))}//------------------ // USCIAB0TX_ISR 的结构使其可用于通过 预加载带有字节计数的 TXByteCtr 来发送任何//字节数。 此外、TXData //指向要发送的下一个字节。 ///---------------------------------- #pragma vector=USCI_B0_vector __interrupt void USCIB0_ISR (void) { switch (__evo_in_range (UCB0IV、USCI_I2C_UCBIT9IFG) ){ USCI_NONE 案例: //无中断中断中断; 中断; USCI_I2C_UCALIFG 案例: //仲裁丢失 中断; 案例 USCI_I2C_UCNACKIFG://接收到 NAK (仅限主器件) //重新发送启动(如果 NACK) EUSCI_B_I2C_masterSendStart (EUSCI_B0_BASE); 中断; USCI_I2C_UCTXIFG0案例: // TXIFG0 //检查 TX 字节计数器 //未达到此点 EUSCI_B_I2C_masterSendNextByte (EUSCI_B0_BASE、0x40); 中断; 默认值: 中断; }
代码在到达任何中断代码之前挂起。 在 eusci_b_i2c.c 中的多字节开始调用中,程序在 EUSCI_B_I2C_masterSendMultiByteStart()中的以下行上挂起:
//轮询发送中断标志。
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG));
我还想知道解决此问题的最佳方法是什么。 我按照 driverlib 的用户指南来配置 I2C 模块、GPIO 引脚肯定设置正确。 我已经浏览过该程序、看起来所有中断标志都已正确设置。 非常感谢您的任何建议! 提前感谢。