大家好,我正在使用MSP430FR5969启动板通信和蓝牙HC-06模块。 我使用了一个示例代码并对其进行了修改,但不知为何调试在此行停止:__bis_sr_register(LPM0_bits| GIE); 另一件奇怪的事情是,在调试中,我必须使用“步入”而不是“下一个语句”,我必须单击“步入”几次,直到光标到达第一个语句(停止看门狗)。 如果我在第一次单击时使用“Next Statement”(下一个语句 ),代码将运行一段时间并在以下位置停止:__bis_sr_register(LPM0_bits | GIE);我需要您的帮助,因为我无法找到问题。
我将GPIO引脚设置为WFP 2.5 ,WFP 2.6 ,USCI_A1用于UART模式,LPM0模式。 这是我的代码:
包括"MSP4S.h"
字符A;
内部主(无效)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗
//配置GPIO
P2SEL1 || BIT5 | BIT6; // USI_A1 UART操作
P2SEL0 &=~(BIT5 | BIT6);
//禁用GPIO开机默认高阻抗模式以激活
//以前配置的端口设置
PM5CTL0 &=~LOCKLPM2;
//启动时钟系统,最大DCO设置为~8MHz
CSCTL0_H = CSOKEY >> 8; //解锁时钟寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL; //将DCO设置为8MHz
CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1; //设置所有分隔线
CSCTL4 &=~SMCLKOFF; //启用SMCLK
CSCTL0_H = 0; //锁定CS寄存器
//为UART模式配置USI_A1
UCA1CTLW0|= UCSWRST; //将eUSCI置于复位状态
UCA1CTLW0 |= UCSSEL__SMCLK; // CLK = SMCLK
UCA1CTLW0 |= UCBRKIE; //设置UCRXIFG
//波特率计算
// 80万/(16*9600)=9600= 52.083
//分数部分= 0.083
//用户指南表21-4:UCBRSx = 0x04
// UCBRFx = int ((52.083 -52)*16)= 1
UCA1BR0 = 52; // 80万/16/9600</s>9600
UCA1BR1 = 0x00;
UCA1MCTLW || UCOS16 | UCBRF_1;
UCA1CTLW0 &=~UCSWRST; //初始化eUSCI
UCA1IE |= UCRXIE; //启用USCI_A1 RX中断
__bis_sr_register(LPM0_bits | GIE); //输入LPM0,中断已启用
// __no_operation(); //用于调试器
}
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=USI_A1_vector
__interrupt void USI_A1_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (USI_A1_vector)) USI_A1_ISR (void)
#否则
错误编译器不受支持!
#endif
{
A = UCA1RXBUF;
}