This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2311:无法接收中断

Guru**** 2553450 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/597006/msp430fr2311-unable-to-receive-interrupt

器件型号:MSP430FR2311

我的代码不会进入 ISR。

#include
#define NUM_bytes_RX 6.
#define NUM_bytes_TX 2.

volatile unsigned int RXData;
int RXByteCtr、RPT_Flag = 0、x1、Y1、Z1;//启用重复启动(如果为1);
unsigned int RxBuffer[6];//分配6字节 RAM
void transmit (unsigned int、unsigned int);
接收无效(无效);
unsigned int MSData[3];
unsigned int TXByteCtr、RX = 0;
unsigned int * PRxData;//指向 RX 数据的指针

int main (空)

WDTCTL = WDTPW | WDTHOLD;

//配置 GPIO
P1SEL0 |= BIT2 | BIT3;// I2C 引脚

//将 USCI_B0配置为 I2C 模式
UCB0CTLW0 |= UCSWRST;//启用软件复位
UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC;// I2C 模式、主控模式、同步
UCB0CTLW1 |= UCSSEL_2 | UCASTP_2;//生成自动停止
//到达 UCB0TBCNT 后
UCB0BRW = 0x0012;//波特率= SMCLK / 12 = 100kHz
UCB0TBCNT = 0x0005;//要接收的字节数
UCB0I2CSA = 0x0053;//从地址
UCB0CTL1 &=~UCSWRST;
UCB0IE |= UCNACKIE | UCBCNTIE;


//传输过程
//__disable_interrupt ();
RX = 0;
UCB0IE &=~UCRXIE;
UCB0IE |= UCTXIE;//启用 TX 中断
RPT_Flag = 1;
发送(0x2D、0x00);
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件


while (1)

//传输过程
RPT_Flag = 1;
发送(0x32、0xFE);//从 ADXL345请求数据(2g 范围) 10位分辨率
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件

//接收过程
receive();
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件


#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCI_B0_vector
_interrupt void USCIB0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_B0_vector)) USCIB0_ISR (void)
其他
错误编译器不受支持!
#endif

开关(__evo_in_range (UCB0IV、USCI_I2C_UCBIT9IFG))

实例 USCI_NONE:break;//向量0:无中断
案例 USCI_I2C_UCALIFG:中断;//矢量2:ALIFG
案例 USCI_I2C_UCNACKIFG://向量4:NACKIFG
UCB0CTL1 |= UCTXSTT;// I2C 启动条件
中断;
案例 USCI_I2C_UCSTTIFG:中断;//矢量6:STTIFG
案例 USCI_I2C_UCSTPIFG:中断;//矢量8:STPIFG
案例 USCI_I2C_UCRXIFG3:中断;//向量10:RXIFG3
案例 USCI_I2C_UCTXIFG3:中断;//向量14:TXIFG3
案例 USCI_I2C_UCRXIFG2:中断;//向量16:RXIFG2
案例 USCI_I2C_UCTXIFG2:中止;//向量18:TXIFG2
案例 USCI_I2C_UCRXIFG1:中断;//向量20:RXIFG1
案例 USCI_I2C_UCTXIFG1:中断;//向量22:TXIFG1
案例 USCI_I2C_UCRXIFG0://向量24:RXIFG0
RXData = UCB0RXBUF;//获取 RX 数据
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0
中断;
案例 USCI_I2C_UCTXIFG0:中断;//向量26:TXIFG0
案例 USCI_I2C_UCBCNTIFG://向量28:BCNTIFG
P1OUT ^= BIT0;//切换 P1.0上的 LED
中断;
案例 USCI_I2C_UCCLTOIFG:中断;//矢量30:时钟低电平超时
案例 USCI_I2C_UCBIT9IFG:中断;//向量32:第9位
默认值:break;

空发送(unsigned int Real_Add、unsigned int ReG_Data)

MSData[2]= ReG_Add;
MSData[1]=注册数据;
TXByteCtr = NUM_Bytes_TX;//加载 TX 字节计数器
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTXSTT;// I2C 启动条件
_bis_SR_register (GIE);//输入 LPM0、带中断

接收无效(无效)

PRxData =(unsigned int *) RxBuffer;// RX 缓冲区开始
RXByteCtr = NUM_Bytes_RX-1;//加载 RX 字节计数器
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTXSTT;// I2C 启动条件
_bis_SR_register (GIE);//使用中断输入 LPM0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在发送功能期间、您不会为传输过程设置 UCTR 位、此外、即使您尝试设置 UCTXIE0、ISR 也不会处理 TXIFG0情况。 请查看代码示例 msp430f231x_euscib0_i2c_[10/15].c、并在自定义之前使用这些示例进行硬件设置。

    此致、
    Ryan