首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Kinetis KEA:生成的定时器中断的LED切换频率

Kinetis KEA:生成的定时器中断的LED切换频率
EN

Stack Overflow用户
提问于 2018-01-26 10:30:44
回答 1查看 186关注 0票数 0

我使用的是恩智浦的Kinetis KEA64微控制器。

实际时钟频率为20 MHz,每2.5ms产生一个定时器中断。我有一个中断处理程序,当这个定时器中断产生时,它会切换LED。LED正在触发这个定时器中断,但我不知道LED的确切频率。我的LED是否以5 5kHz的频率切换?这是正确的吗?

代码语言:javascript
复制
void interrupt_application_timer_FTM0()
{
    SIM_SCGC |= SIM_SCGC_FTM0_MASK; /* Enable Clock for FTM0 */         
    FTM0_SC |= FTM_SC_PS(7);    /* Select Preescaler in this case 128. 20 Mhz /128 =156.25 Khz. */ 
                                    /* Counter increase by one every 6.4 us */      
        /* Enable Channle 0*/
    FTM0_C0SC |= FTM_CnSC_CHIE_MASK; /* Enable channel 0 interrupt */
    FTM0_C0SC |= FTM_CnSC_MSA_MASK;  /* Channel as Output compare mode */           
        /*Select interrupt frequency*/
    FTM0_C0V = FTM_CnV_VAL(391) ;       /* Interrupt every 2.5ms */ 

    FTM0_SC |= FTM_SC_CLKS(1); /*FTM0 use system clock*/

        /* Set the ICPR and ISER registers accordingly */
    NVIC_ICPR |= 1 << ((INT_FTM0-16)%32);
    NVIC_ISER |= 1 << ((INT_FTM0-16)%32);
}

下面是我的中断处理程序

代码语言:javascript
复制
void FTM0_IRQHandler()
  {     
    if (1==((FTM0_C0SC & FTM_CnSC_CHF_MASK)>>FTM_CnSC_CHF_SHIFT) )  /* If the CHF of the channel is equal to 0 */
    {
        (void)FTM0_C0SC;                            /* Read to clear flag */
        FTM0_C0SC ^= FTM_CnSC_CHF_MASK;             /* Clear flag */
        FTM0_C0V = FTM0_C0V + 391 ; /* Refresh interrupt period */

        if (LED_counter>=50){
            /* Toggle LED */
            /* Reset counter */
            LED0_TOGGLE;
            LED_counter = 0;
        }
        LED_counter++;
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2018-07-01 08:22:07

  1. 频率测量的使用范围在单片机中,您可以启用总线时钟到一个引脚(Busclockout),启用该时钟并检查总线时钟,以便您可以在
  2. 确认您的calculations
  3. Then使用范围以确认您的频率
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48455003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档