×
嵌入式 > 技术百科 > 详情

MSP430F5438学习笔记 定时器TA1 比较匹配CCR0

发布时间:2020-06-18 发布时间:
|
  1. // 时钟默认情况  

  2. // FLL时钟      FLL选择 XT1  

  3. // 辅助时钟     ACLK选择 XT1          32768Hz  

  4. // 主系统时钟   MCLK选择 DCOCLKDIV    8000000Hz  

  5. // 子系统时钟   SMCLK选择 DCOCLKDIV   8000000Hz  

  6. // TA1选择ACLK,最大计数值为16384,中断频率为2HZ  

  7. // 在TIMER1_A0_VECTOR中翻转P4.0  

  8.   

  9. #include   

  10. #include   

  11. void clock_config(void);  

  12. void select_xt1(void);  

  13. void dco_config(void);  

  14.   

  15. int main(void)  

  16. {  

  17.     clock_config();                             // 初始化时钟  

  18.     P4DIR |= BIT0;                              // P4.0输出  

  19.   

  20.     TA1CCTL0 = CCIE;                            // 使能TA1CCR0,比较匹配中断  

  21.     TA1CCR0 = 16384;                            // 初始化最大值,发生比较匹配中断频率 32768/16384 = 2Hz  

  22.     TA1CTL = TASSEL_1 + MC_1 + TACLR;           // 选择ACLK,最大值为CCR0,清除计数值  

  23.   

  24.     _EINT();                                    // 初始化全局中断  

  25.   

  26.     while(1)  

  27.     {  

  28.         ;  

  29.     }  

  30. }  

  31.   

  32. void clock_config(void)  

  33. {  

  34.     WDTCTL = WDTPW + WDTHOLD;                   // 停止看门狗  

  35.     select_xt1();                               // 选择XT1  

  36.     dco_config();                               // ACLK = XT1 = 32.768K  

  37.                                                 // MCLK = SMCLK = 8000K  

  38. }  

  39.   

  40. void select_xt1(void)  

  41. {  

  42.     // 启动XT1  

  43.     P7SEL |= 0x03;                              // P7.0 P7.1 外设功能  

  44.     UCSCTL6 &= ~(XT1OFF);                       // XT1打开  

  45.     UCSCTL6 |= XCAP_3;                          // 内部电容  

  46.     do  

  47.     {  

  48.         UCSCTL7 &= ~XT1LFOFFG;                  // 清楚XT1错误标记  

  49.     }while (UCSCTL7&XT1LFOFFG);                 // 检测XT1错误标记  

  50. }  

  51.   

  52. void dco_config(void)  

  53. {  

  54.     __bis_SR_register(SCG0);                    // 禁止FLL功能  

  55.     UCSCTL0 = 0x0000;                           // Set lowest possible DCOx, MODx  

  56.     UCSCTL1 = DCORSEL_5;                        // DCO最大频率为16MHz  

  57.     UCSCTL2 = FLLD_1 + 243;                     // 设置DCO频率为8MHz  

  58.                                                 // MCLK = SMCLK= Fdcoclkdiv = (N+1)X(Ffllrefclk/n)  

  59.                                                 // N为唯一需要计算的值  

  60.                                                 // Ffllrefclk FLL参考时钟,默认为XT1  

  61.                                                 // n取默认值,此时为1  

  62.                                                 // (243 + 1) * 32768 = 8MHz  

  63.     __bic_SR_register(SCG0);                    // 使能FLL功能  

  64.   

  65.     // 必要延时  

  66.     __delay_cycles(250000);  

  67.   

  68.     // 清楚错误标志位  

  69.     do  

  70.     {  

  71.         UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);  

  72.                                                 // 清除所有振荡器错误标志位  

  73.         SFRIFG1 &= ~OFIFG;                      // 清除振荡器错误  

  74.     }while (SFRIFG1&OFIFG);                     // 等待清楚完成  

  75. }  

  76.   

  77. #pragma vector=TIMER1_A0_VECTOR  

  78. __interrupt void TIMER1_A0_ISR(void)  

  79. {  

  80.     P4OUT ^= BIT0;  

 


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

热门文章 更多
起重变频调速系统中制动电阻功率的计算