我的代码不会进入 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
}