请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2000 主题中讨论的其他器件: MSP430FR2311、 MSP430WARE
工具/软件:Code Composer Studio
下面是旨在使用 MSP430FR2000生成 PWM 模式的程序。 我以16 MHz 的频率运行处理器。 由 SMCLK 供源的计时器0在 P2.0上输出 PWM、在连续模式下工作。 TBxCCR1位持续变化以生成不同的频率、从8KHz 开始。 但是,在660mS 的时间段开始时,产生的频率非常低,从100Hz 开始。 在 MSP430FR2311 LaunchPad 上测试的同一代码未显示此异常行为。 请告诉我这可能是什么原因。
void main (void) { WDTCTL = WDTPW + WDTHOLD; //停止 WDT P1DIR = BIT0; //将1.0设置为输出 P1SEL1 = BIT0; //选择1.0所需的函数。此处选择辅助函数。 P2DIR = BIT0; P2SEL0 = BIT0; CSCTL1 = DCORSEL_5; // DCO 频率选择 CSCTL2 = FLLD_0; // FLL 环路分频器 PM5CTL0 &=~LOCKLPM5; TB0CCTL1 = OUTMOD_4 | CCIE; // TACCR1切换,启用中断 TB0CTL = TBSSEL_2 | MC_2| CNTL_0| TBIE | ID_0 |TBCLR; // SMCLK、Cont 模式、int 启用 _bis_SR_register (GIE); } #pragma vector=TIMER0_B1_vector __interrupt void Timer_B1 (void) { volatile unsigned int x=0; volatile unsigned int y=0; volatile unsigned int m=0; X=BAKMEM0; Y=BAKMEM1; M=BAKMEM2; switch (TB0IV) { 案例2:Y++; // P1OUT ^= 0x04; if (((m%2)=0) { if ((y%2)=0) { X=x+0x40; } TB0CCR1 += 1000+x; //重新加载周期 if (x>1200) { M++; //P1OUT ^= 0x02; } } if (((m%2)!=0) { if ((y%2)=0) { X=x-0x40; } TB0CCR1 += 1000+x; //重新加载周期 if (x<80 ) { M++; X=0; //P1OUT ^= 0x02; } } BAKMEM0=x; BAKMEM1=y; BAKMEM2=m; 中断; 案例10:P2OUT ^= 0x01; //定时器溢出 中断; 默认值:break; } }