TI中文支持网
TI专业的中文技术问题搜集分享网站

如何退出中断继续执行主程序

简单描述一下情况,中断是DMA的中断,在DMA子程序里我实现的功能是用TimerA触发ADC12然后将ADC12MEM0转存到RAM,中断里写的是,停止TimerA和ADC12并将ADC12转换的2000个值稍作处理后显示在LCD上,先附上简略代码:

void ADC12_DMA(void){
WDTCTL = WDTPW + WDTHOLD; // Stop watch dog timer
P6SEL |= 0x40;                                   // Enable A/D channel A6
P1SEL |= BIT2;                                   // P1.2/TA1 option select
P1DIR |= BIT2;                                   // Output direction
//Setup Timer B0
……

// Setup ADC12
……

// Setup DMA0
……
DMA0SZ = 2000;                               // DMA0 size = 2000
__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0);
                                                             // Source block address
__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) DMA_DST);
                                                            // Destination single address
__bis_SR_register(LPM0_bits + GIE); // LPM0 w/ interrupts
__no_operation();                                     // used for debugging
}

#pragma vector=DMA_VECTOR

__interrupt void DMA_ISR(void)
{
switch(__even_in_range(DMAIV,16))
{
case 0: break;
case 2:                                           // DMA0IFG = DMA Channel 0
TA0CTL = MC_0+TACLR;          // Stop TimerB
ADC12CTL0 &= ~ADC12ENC; // Reset ENC to stop ADC12
……

break;
case 4: break; // DMA1IFG = DMA Channel 1
case 6: break; // DMA2IFG = DMA Channel 2
case 8: break; // DMA3IFG = DMA Channel 3
case 10: break; // DMA4IFG = DMA Channel 4
case 12: break; // DMA5IFG = DMA Channel 5
case 14: break; // DMA6IFG = DMA Channel 6
case 16: break; // DMA7IFG = DMA Channel 7
default: break;
}
}

主程序中是要循环执行ADC12_DMA(),但是发现退不出中断,无法回到主程序

void main(){

……

while(1){
do{
     ADC12_DMA(); 
     Dogs102x6_stringDraw(6, 0, "Next TEST", DOGS102x6_DRAW_INVERT); 
     Dogs102x6_stringDraw(7, 0, "Press S1 | S2", DOGS102x6_DRAW_NORMAL);
  }while(buttonsPressed);
}

}

请问这样的问题怎么破?(用的是MSP-EXP430F5529)

Thanks

Zhenting Liu:

中断结束,退出低功耗模式

灰小子:

在中断服务程序里,退出低功耗模式就可以了

赞(0)
未经允许不得转载:TI中文支持网 » 如何退出中断继续执行主程序
分享到: 更多 (0)