您好!
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