您好!
I2C 通信有一个大问题。
代码由 CapTIvate 设计中心生成、初始化如下所示:
// // Re-map EUSCI B0 pins to secondary locations // This frees up CapTIvate IOs // SYSCFG2 |= USCIBRMP; // P1.0: OUTPUT LOW // P1.1: OUTPUT LOW // P1.2: OUTPUT LOW // P1.3: OUTPUT LOW // P1.4: UCA0 UART TXD if (DEFAULT_OSC_SELECTION == CS_XT1CLK_SELECT), else OUTPUT LOW // P1.5: UCA0 UART RXD if (DEFAULT_OSC_SELECTION == CS_XT1CLK_SELECT), else OUTPUT LOW // P1.6: OUTPUT LOW // P1.7: OUTPUT LOW #if (DEFAULT_OSC_SELECTION == CS_XT1CLK_SELECT) P1OUT = (0); P1DIR = (GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN6 | GPIO_PIN7); P1SEL0 = (GPIO_PIN4 | GPIO_PIN5); P1SEL1 = (0); #else P1OUT = (0); P1DIR = (GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7); P1SEL0 = (0); P1SEL1 = (0); #endif // P2.0: UCA0 UART TXD if (DEFAULT_OSC_SELECTION == CS_REFOCLK_SELECT), else XOUT // P2.1: UCA0 UART RXD if (DEFAULT_OSC_SELECTION == CS_REFOCLK_SELECT), else XIN // P2.2: SYNC (SET OUTPUT LOW UNLESS USED) // P2.3: OUTPUT LOW // P2.4: IRQ (OPEN DRAIN), set high to start // P2.5: UCB0 I2C SDA // P2.6: UCB0 I2C SCL #if (DEFAULT_OSC_SELECTION == CS_XT1CLK_SELECT) P2OUT = (GPIO_PIN4); P2DIR = (GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4); P2SEL0 = (0); P2SEL1 = (GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN5 | GPIO_PIN6); #else P2OUT = (0); P2DIR = (GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4); P2SEL0 = (GPIO_PIN0 | GPIO_PIN1); P2SEL1 = (GPIO_PIN5 | GPIO_PIN6); #endif
但在 MSP430FR2512IPW16上、没有生成的代码设置 SDA 和 SCL 的 PIN2.5和 PIN2.6。
因此、我更改了两个方面:
P1DIR =(GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7);更改为
P1DIR =(GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7);
和
P1SEL1 =(GPIO_PIN2 | GPIO_PIN3);
我还将 SYSCFG2 |= USCIBRMP 更改为 SYSCFG2 &=~USCIBRMP;
我认为、如果我想获得 PIN1.2 = SDA 和 PIN1.3 = SCL、这就是我必须做的
但我仍然没有通信。 我错过了什么吗?
提前感谢您
Igor