请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2433 大家好、我是 msp430fr2433的初学者、我为电路控制器制作了代码。
MSP430以 PWM (32kHz)在低功耗模式下运行、P1.4每2秒向 P2.2发送中断信号、然后读取 ADC 并更改中断中的 CCR1值。
在中断中完成 ADC 后、它应该返回到低功耗模式、但它保持 ISR。
您能不能评论这个问题
谢谢!
// // MSP430FR2433 // -------- // /|\| | // || | // -|RST 用于电路控制 的 P1.0 |--> PWM // | P1.1 |-->基准电压输出 // | 用于开路检测的 P1.2 |--> ADC 输入 // | P1.4 |-->PWM 用于中断 // | P2.2 |-->中断输入 // // ////********* #include 短推 ADCValue; 短电流 ADCValue; 短 peakADCValue; 短引用值; int main (空) { WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 PM5CTL0 &=~LOCKLPM5; P1DIR = 0xFF; //将所有 P1引脚的方向设置为输出 P2DIR = 0xFF; //将所有 P2引脚的方向设置为输出 P1OUT = 0; //将所有 P1引脚设置为低电平 P2OUT = 0; _bis_SR_register (SCG0); //禁用 FLL CSCTL3 |= SELREF_REFOCLK; //将 REFOCLK 设置为 FLL 基准源 CSCTL0 = 0; //清除 DCO 和 MOD 寄存器 CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位 CSCTL1 |= DCORSEL_3; //设置 DCOCLK = 8MHz CSCTL2 = FLLD_1 + 121; // FLLD = 1、DCODIV = 4MHz _DELAY_CYCLES (3); _BIC_SR_register (SCG0); //启用 FLL while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1)); //轮询直到 FLL 锁定 CSCTL4 = SELMS_DCOCLKDIV | SELA_XT1CLK; //设置 ACLK = XT1 = 32768Hz、DCOCLK 作为 MCLK 和 SMCLK 源 CSCTL5 |= DIVM1; // SMCLK = MCLK = DCODIV/2 = 1MHz,默认情况下 P1DIR |= BIT1; // P1.1 P1SEL1 |= BIT1; // P1.1选项选择 TA0CCR0 = 320; TA0CCR1 = 160; TA0CCTL1 = OUTMOD_7; TA0CTL = tassel_1 | MC_1; // ACLK TA0CCTL0 &=~CCIE; P1DIR |= BIT4; // P1.1和 P1.2输出 P1SEL1 |= BIT4; // P1.1和 P1.2选项选择 TA1CCR0 = 64000; TA1CCR2 = 100; TA1CCTL2 = OUTMOD_7; TA1CTL = tassel_1 | MC_1; // ACLK、 TA1CCTL0 &=~CCIE; P1DIR &=~BIT2; //将 P1.2设置为 ADC 的输入 P1REN |= BIT2; //启用 P1.5上拉/下拉电阻器 P1OUT &=~BIT2; //将 P1.2设置为低电平(由于 p2ren 设置为1、引脚也被下拉) P1IFG &=~BIT2; //为了防止立即中断,清除 P1.5标志 P1IE &=~BIT2; //禁用 P2.0中断 P2DIR &=~BIT2;//将 P2.2设置为中断的输入位(输入默认加电) P2OUT &= BIT2;// BIT2打开、将 OUTbit 设置为上拉 P2REN |= BIT2;// BIT2打开、启用内部上拉寄存器 P2IES &=~BIT2;//一个是下降边沿 P2IE |= BIT2; // BIT2打开,P2.3中断被启用 P2IFG &=~BIT2;// BIT2关闭、P2.3 IFG 被清零//激活先前配置的端口设置 P2IFG = 0; ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON、S&H=16 ADC 时钟 ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样定时器 ADCCTL2 |= ADCRES; // 10位转换结果 ADCMCTL0 |= ADCINCH_2; // A1 ADC 输入选择;Vref=AVCC ADCIE |=~ADCIE0; _bis_SR_register (LPM3_bits + GIE);//启用中断的 LPM3 } //端口2中断服务例程 #pragma vector=port2_vector _interrupt void Port_2 (void) { P1OUT &=~BIT6; P1OUT ^= BIT0; _delay_cycles (50); ADCCTL0 |= ADCON; //打开 ADC ADCCTL0 |= ADCENC + ADCSC; //采样和转换开始 currADCValue = ADCMEM0; peakADCValue = currADCValue; peakADCValue = 0.1 * TA0CCR1; ADCCTL0 &=~ADCENC; //确保 ADC10关闭 P2IFG = 0; //清除 P2标志 P1OUT |= BIT6; }