主题中讨论的其他器件: MSP-EXP430FR5739
工具/软件:Code Composer Studio
我使用的是 msp430fr5738微控制器、我使用示例代码进行了刷写、但它不起作用。 它在这条线路中停止了。 我还启用了中断。 如何解决此问题
#include "driverlib.h"
#include
//
#define SLAVE_ADDRESS 0x3b
unsigned char TXData =0;//指向 TX 数据的指针
unsigned char TXByteCtr;
void main (void)
{
//停止 WDT
WDT_A_HOLD (WDT_A_base);
//为 I2C 配置引脚
P1SEL1 |= BIT6 + BIT7;//引脚初始化
UCB0CTLW0 |= UCSWRST;//将 eUSCI_B 置于复位状态
UCB0CTLW0 |= UCMODE_3 + UCMST + UCSSEL_2 | UCTR;// I2C 主模式、SMCLk
UCB0BRW = 0x8;//波特率= SMCLK / 8
UCB0I2CSA = 0x3A;//地址从器件为48十六进制
UCB0CTLW0 &=~ UCSWRST;//清除复位寄存器
UCB0IE |= UCTXIE0 + UCNACKIE; //发送 中断使能
while (1)
{
//__delay_cycles (1000);//传输之间的延迟
TXByteCtr = 1;//加载 TX 字节计数器
while (UCB0CTLW0 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTLW0 |= UCTR + UCTXSTT;// I2C TX,启动条件
_bis_SR_register (CPUOFF + GIE);//输入 LPM0、带中断
//保持在 LPM0中直到所有数据
//是 TX
TXData++;//递增数据字节
}
}
#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
{
switch (__evo_in_range (UCB0IV、0x1E))
{
情况0x00:中断;//向量0:无中断中断中断;
情况0x02:break;
情况0x04:
UCB0CTLW0 |= UCTXSTT;//如果 NACK,则重新发送开始
中断;//向量4:NACKIFG 中断;
情况0x18:
if (TXByteCtr)//检查 TX 字节计数器
{
UCB0TXBUF = TXData;//加载 TX 缓冲区
TXByteCtr -;//减量 TX 字节计数器
}
其他
{
UCB0CTLW0 |= UCTXSTP;// I2C 停止条件
UCB0IFG &=~UCTXIFG;//清除 USCI_B0 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0
}
中断;//向量26:TXIFG0中断;
默认值:break;
}
}