×
单片机 > 单片机程序设计 > 详情

MSP430F1232中断学习

发布时间:2020-08-27 发布时间:
|

ADC10中断:


和定时器一样,ADC10也有中断请求的能力,如果不使用DCT(ADC10DCT1=0),当转换结果装载到ADC10MEM时,ADC10中断标志位即ADC10IFG置1。如果使用DCT,当DCT设定的所有转换完成之后,中断标志为置1。


大概过程是这样的:


    //对于中断来说,当每次两个整个数据块都传递完成时,中断标志置1,此时产生中断,让CPU跳出低功耗状态,继续执行进入低功耗后续没有执行的代码


    //又继续使能AD转换,CPU又进入低功耗状态,由于AD转换独立于CPU,当转换完成时再次进入中断,跳出低功耗,这样不断进入跳出,实现低功耗。


    //所以低功耗跳出之后,以下应该写串口传输的代码,将转换完的数字量给USART


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  ADC10CTL1 = INCH_1 + CONSEQ_1;            // A1/A0, single sequence

  ADC10CTL0 = ADC10SHT_1 + MSC + ADC10ON + ADC10IE + REFON + REF2_5V;     //时钟源分频+连续

  ADC10DTC1 = 0x02;                         // 2 conversions

  ADC10AE |= 0x03;                          // P2.1,0 ADC10 option select

 

  for (;;)

  {

    ADC10CTL0 &= ~ENC;

    while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active

    ADC10SA = 0x200;                        // Data buffer start

    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start

    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit

    //AD把两路转换完成,给了ADC10SA,控制将长度为2的数据块放到某个地址中,那么可以从地址中取出转换完成的数据

    //一个块放着两个转换完的数据,每个转换完的数据长度是2个字节,因为MEM长度是16位,一个地址是一个字节,现在的地址是在0x200的基础上加4

    //但是这个地址是个什么意思不太明白

    //对于中断来说,当每次两个整个数据块都传递完成时,中断标志置1,此时产生中断,让CPU跳出低功耗状态,继续执行上面的for循环

    //继续开始转换,由于AD转换独立于CPU,所以CPU又进入低功耗状态,当转换完成时再次跳出低功耗,这样不断进入跳出,实现低功耗。

    //所以低功耗跳出之后,以下应该写串口传输的代码,将转换完的数字量给USART

    //....

  }

}

 

// ADC10 interrupt service routine

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR (void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)

#else

#error Compiler not supported!

#endif

{

    __bic_SR_register_on_exit(CPUOFF);      // Clear CPUOFF bit from 0(SR)

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会