Other Parts Discussed in Thread: MSP-EXP430F5529LP
主题中讨论的其他器件:MSP430WARE、
你(们)好 我正在编写一个程序、该程序应通过 MSP430F5529LP 上的按钮来打开和关闭直流/直流转换器。 该按钮与中断例程相关联。 PWM 控制功能在定时器_A5 ISR 内执行。 我的想法是在按钮的 ISR 内暂停和启动计时器。 启动时,定时器计数器不会自动启动,MSP 会获得 LPM0,因此我按下按钮并运行其 ISR,Timer_A_startCounter()触发定时器,而定时器的 ISR 运行。
问题是再次按下按钮不会使按钮的 ISR 执行变为关闭转换器。 我的错误是处理中断。 我不知道这是否是优先事项。
下面是我从中移除某些器件以方便您分析的代码。
谢谢你。
int main (void) { //大量初始化和 DRV 代码.... //全局启用中断 _enable_interrupt (); //Enter LPM0、启用中断 _bis_SR_register (LPM0_bits + GIE); __no_operation(); while (1) { _bis_SR_register (LPM0_bits + GIE);//输入 LPM0并等待中断 __no_operation(); }; } #pragma vector=TIMER0_A1_vector // Timer0_A5 CC1-4、TA __interrupt #elif defined (__GNU__) __attribute__((interrupt (TIMER0_A0_Vector))) #endif void TIMER0_A1_ISR (void) { //对 TAIV 寄存器的任何访问、读取或写入都会自动复位 //最高“挂起”中断标志 switch (__evo_in_range (TA0IV、14)) { 情况0:中断; //无中断 案例2:中断; 未使用//CCR1 案例4:中断; 未使用//CCR2 案例6:中断; 未使用//CCR3 案例8:中断; 未使用/CCR4 案例10:中断; 未使用/CR5 案例12:中断; 未使用//CCR6 案例14: moduladorPWM(); _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS + GIE); 中断; 默认值:break; } } #pragma vector=Button1_vector __interrupt void Button1_ISR (void) { 字 I; if (GPIO_getInterruptStatus (Button1_port、Button1_PIN)){ 对于(i = 0x23FF;i > 0;I--){//廉价去抖 。} if (GPIO_getInputPinValue (Button1_port、Button1_PIN)){ bButton1预置= true; } } //打开 Timer_A_startCounter (timer_A0_BASE、timer_A_updown_mode); //莱格奥莱格2佛得角-4.7 GPIO_setOutputHighOnPin (4、0x80); //启用 DRV - MSP4305529LP P2.6输出低电平 GPIO_setOutputHighOnPin (2、0x40); //关闭 //标记治疗 // Timer_A_stop (timer_A0_BASE); GPIO_clearInterrupt (Button1_port、Button1_PIN); __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits + GIE);//从 LPMx 唤醒主 功能}