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

MSP430F5529: 在ADC中断函数中关闭了ADC开关,为何ADC中断函数会再次运行,并且运行完毕之后卡死,无法运行CCS暂停键

Part Number:MSP430F5529

我们在运行程序的时候,设置了一个adc中断函数,用来将MEM0中的数据导入我自己设置的数组当中,当我们数据采集了一定样本之后,在中断函数中将ADC直接关闭(  ADC12ON ADC12ENC  ADC12SC直接置零) 的方式,根据调试结果,我们设置了index=2 作为关闭adc的条件 ,在一步步查看步骤之后,当index=2并执行关闭adc语句,并结束该次中断函数运行之后,还会重新运行一次该中断函数,并根据语句对index进行+1;该次运行结束之后,单片机会停留在该中断函数尾部,无法跳出,同时无法执行ccs界面上面的暂停按键。

 此时index=2,并在执行if内容。

此时index=3,同时并未执行index++指令

 此时index=4,上面运行的三角形按钮自动转化为暂停键按钮,且无法将程序暂停。

附上主函数和中断函数代码

void main(void)
{

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
P6SEL |= 0x01; // Enable A/D channel A0
ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; // Turn on ADC12, set sampling time
// set multiple sample conversion
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2+ADC12SSEL_0; // Use sampling timer, set mode
ADC12IE = 0x01; // Enable ADC12IFG.0
ADC12CTL0 |= ADC12ENC; // Enable conversions
ADC12CTL0 |= ADC12SC; // Start conversion

__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, Enable interrupts
// For debugger
while(1)
{
if(index==3)
{
f = 1;
index = 0;

for(q4=0;q4<num_point;q4++)
{
Chan_data=results[q4];
//Chan_data -=0x7FF;
Chan_data *=1.5;
result[q4] =((float)Chan_data/4095);
}

fft(result,tab_dftI);
get_power(result,tab_dftI);
sort(tab_power,count_index);

}

}

}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{

switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0

results[index] = ADC12MEM0; // Move results
// Increment results index, modulo; Set Breakpoint1 here
//ADC12IFG0 &= ~BIT0;
if (index == 3)
{
index=0;
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 &= ~ADC12ON;
ADC12CTL0 &= ~ADC12SC;
}
index++;
break;// Increment results index, modulo; Set Breakpoint1 here

case 8: break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12: break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: break; // Vector 18: ADC12IFG6
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: break; // Vector 28: ADC12IFG11
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
return;
s}

Cherry Zhou:

您好我们已收到您的问题并升级处理,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

您好我们认为 MSP430F55xx_ADC_09.c 代码示例在用户请求时提供了类似的功能。

在设计您的代码时,您可以参阅该代码示例 MSP430F552x C 示例 (IAR 和 CCSv4) (修订版 l) 。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5529: 在ADC中断函数中关闭了ADC开关,为何ADC中断函数会再次运行,并且运行完毕之后卡死,无法运行CCS暂停键
分享到: 更多 (0)