主题中讨论的其他器件:MSP430FR2355、 HDC2080、 HDC2022、
我正在尝试将/msp430fr2355_demo_wo_hdc2080/main.c 中的示例代码移植到我们的硬件(FR2353、HDC2022)。 我将使用 USCI_B1。
I2C 外设不会生成中断(从不命中我在 ISR 中第一条语句上设置的断点)。
首先、我是否在下面的语句中使用了正确的关键字:
#pragma vector = USCI_B1_Vector
这是怎么回事?
#pragma vector = EUSCI_B1_Vector
两者都指向同一个中断矢量吗? 两个构建都没有错误。
下面是一些代码片段、这些代码片段经过修改以与我的硬件相匹配。
void initGPIO() { ......... skipped lines // I2C pins (P4.7 is SCL, P4.6 is SDA) P4SEL0 |= BIT6 | BIT7; P4SEL1 &= ~(BIT6 | BIT7); .......skipped lines } void initI2C() { UCB1CTLW0 = UCSWRST; // Enable SW reset UCB1CTLW0 |= UCMODE_3 | UCMST | UCSSEL__SMCLK | UCSYNC; // I2C master mode, SMCLK UCB1BRW = 160; // fSCL = SMCLK/160 = ~100kHz UCB1I2CSA = SLAVE_ADDR; // Slave Address UCB1CTLW0 &= ~UCSWRST; // Clear SW reset, resume operation UCB1IE |= UCNACKIE; } //****************************************************************************** // I2C Interrupt *************************************************************** //****************************************************************************** #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = USCI_B1_VECTOR __interrupt void USCI_B1_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USCI_B1_VECTOR))) USCI_B1_ISR (void) #else #error Compiler not supported! #endif { //Must read from UCB1RXBUF uint8_t rx_val = 0; switch(__even_in_range(UCB1IV, USCI_I2C_UCBIT9IFG)) <<<<<<<<<<<Breakpoint set here..... { ....... ...... } I2C_Mode I2C_Master_WriteReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t count) { /* Initialize state machine */ MasterMode = TX_REG_ADDRESS_MODE; TransmitRegAddr = reg_addr; //Copy register data to TransmitBuffer CopyArray(reg_data, TransmitBuffer, count); TXByteCtr = count; RXByteCtr = 0; ReceiveIndex = 0; TransmitIndex = 0; /* Initialize slave address and interrupts */ UCB1I2CSA = dev_addr; UCB1IFG &= ~(UCTXIFG + UCRXIFG); // Clear any pending interrupts UCB1IE &= ~UCRXIE; // Disable RX interrupt UCB1IE |= UCTXIE; // Enable TX interrupt UCB1CTLW0 |= UCTR + UCTXSTT; // I2C TX, start condition __bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts <<<<<<<<<<<< HANGS HERE............... return MasterMode; }当我运行程序时、它会在以下行上挂起:
_bis_SR_register (LPM0_bits + GIE);//输入 LPM0、带中断
未命中断点。
这是第一次尝试使用 I2C 与 HDC2022通信)。