请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5989 主题中讨论的其他器件: MSP430WARE
您好!
我尝试使用 MSP430FR5989从基于 I2C 的 EEPROM 读取数据。 我目前正在使用基于 MSP430Ware v3.80.05.04的 driverlib API 进行通信。 发送起始条件后、控制器始终在以下行中挂起:
//轮询发送中断标志。 while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG));
我已经尝试使用多个 API、现在都很成功。 为了更好地理解、我附上了以下代码。 我缺少什么吗?
-Lovelesh
#define SLAVE_ADDRESS 0xA6 #define NFC_LPD_PORT GPIO_PORT_P3 #define NFC_LDW_PIN GPIO_PIN0 #define NFC_LPD_LOW GPIO_setOutputLowOnPin (NFC_LDW_PORT、NFC_LDW_PIN) #define NFC_LDW_HIGH GPIO_setOutputHighOnPin (NFC_LDW_PORT、NFC_LDW_PIN) uint8_t TXData[]={'0x00'、'0x01'、'H'、'E'、'L'、 'L'、'O'、'0x06'、'0x07'、'0x08'}; //指向 TX 数据 uint8_t TXByteCtr 的指针; uint8_t MAXByte = 10; void main (void) { WDT_A_HOLD (WDT_A_base); //将 DCO 频率设置为1MHz CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_0); //set ACLK = VLO、分频器为1 CS_initClockSignal (CS_ACLK、CS_VLOCLK_select、CS_clock_divider); //set SMCLK = DCO、分频器为1 CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider); //set MCLK = DCO、分频器为1 CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider); //为 I2C 配置引脚 //将 P1.6和 P1.7设置为辅助模块功能输入。 /* *选择端口1 *将引脚6、7设置为输入次级模块功能(UCB0SIMO/UCB0SDA、UCB0SOMI/UCB.S)。 * GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P1、 GPIO_PIN6 + GPIO_PIN7、 GPIO_secondary 模块功能 ); /* *禁用 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_B1_base、¶m); //指定从器件地址 EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、 从器件地址 ); //将主设备设置为发送模式 EUSCI_B_I2C_setMode (EUSCI_B1_BASE、 EUSCI_B_I2C_Transmit 模式 ); //启用 I2C 模块以启动操作 EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE); EUSCI_B_I2C_clearInterrupt (EUSCI_B1_base、 EUSCI_B_I2C_Transmit INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT ); //启用主机接收中断 EUSCI_B_I2C_enableInterrupt (EUSCI_B1_BASE、 EUSCI_B_I2C_Transmit INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT ); _DELAY_CYCLES (1000); //传输之间的延迟 // TXByteCtr = 0; //加载 TX 字节计数器 NFC_LPD_LOW; while (EUSCI_B_I2C_Sending = EUSCI_B_I2C_masterIsStopSent) (EUSCI_B1_BASE)); EUSCI_B_I2C_masterSendStart (EUSCI_B1_BASE); uint8_t i = 0; 对于(i = 0;i <= MAXByte;i++) { EUSCI_B_I2C_masterSendSingleByte (EUSCI_B1_BASE、TXData[i]); while (EUSCI_B_I2C_isBusy (EUSCI_B1_BASE)); } EUSCI_B_I2C_masterSendMultiByteStop (EUSCI_B1_BASE); }