This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] msp430f5529:ADC中的中断编程

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/584183/msp430f5529-interrupt-programming-in-adc

部件号:MSP430F5529

大家好,

我正在 msp430f5529中进行ADC编程。 但我对我在下面所粘贴的计划有一些疑问。

每当产生中断时,CPU都会从低功耗模式0中出来并跳转到ISR,在ISR中,CPU处于活动状态,因此我们为什么要使用此指令“__BIC_SR_REGISTER_ON_EXIT (LPM0_bits)”

因为 CPU仅处于活动状态。

#include <MSP4S.h>

//unsigned int值=0;

内部主(无效)

 WDTCTL = WDTPW + WDTHOLD;         //停止WDT

 ADC12CTL0 = ADC12SHT02 + ADC12ON;     //采样时间,ADC12开启

 ADC12CTL1 = ADC12SHP;           //使用采样计时器

 ADC12IE = 0x01;              //启用中断

 ADC12CTL0 || ADC12ENC;

 P6SEL |= 0x01;               // WFP 6.0 ADC选项选择

 P1DIR |= 0x01;               // WFP 1.0 输出

 同时(1)

 {

  ADC12CTL0 |= ADC12SC;          //开始采样/转换

  __bis_sr_register(LPM0_bits + GIE);  // LPM0,ADC12_ISR将强制退出

  __no_operation();            //用于调试器

 }

}

#pragma vector = ADC12_vector

__interrupt void ADC12_ISR(void)

                  //向量 6: ADC12IFG0

  int值=ADC12MEM0;

  IF (ADC12MEM0 >= 2048)         // ADC12MEM = A0 > 0.5AVcc?

   P1OUT |= BIT0;             // WFP 1.0 = 1.

  否则

   P1OUT &=~BIT0;            // WFP 1.0 = 0

  __BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU

 }

#include <MSP430.h>//unsigned int value=0;int main(void){ WDTCTL = WDTPW + WDTHOLD;         //停止WDT ADC12CTL0 = ADC12SHT02 + ADC12ON;     //采样时间, ADC12CTL1上的ADC12 = ADC12SHP;           //使用采样计时器 ADC12IE = 0x01;              //启用中断 ADC12CTL0 |= ADC12ENC; P6SEL |= 0x01;               // WFP 6.0 ADC选项选择 P1DIR |=0x01;               // WFP 1.0 输出
 同时(1) {  ADC12CTL0 |= ADC12SC;          //开始采样/转换
  __bis_sr_register(LPM0_bits + GIE);  // LPM0,ADC12_ISR将强制退出  __NO_operation();            //用于调试器 }
}

#pragma vector = ADC12_vector__interrupt void ADC12_ISR(void){                   //向量 6: ADC12IFG0
  int值=ADC12MEM0;  IF (ADC12MEM0 >= 2048)         // ADC12MEM = A0 > 0.5AVcc?    P1OUT |= BIT0;             // WFP 1.0 = 1  ELSE   P1OUT &=~BIT0;            // WFP 1.0 = 0
  __BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //退出活动CPU
 }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "_on_exit"表示此函数不修改实际状态寄存器,而是修改自动保存在堆栈上的先前状态寄存器的值。 中断处理程序返回后,CPU将从该值恢复状态寄存器,因此,如果希望CPU在中断处理程序返回后运行,则必须修改该值。