zoukankan      html  css  js  c++  java
  • EFM32之定时器

    设置系统时钟:

    CMU_ClockSelectSet(cmuClock_HF,cmuSelect_HFXO);//32MHz

    NVIC配置:
    EFM32的库函数没有关于NVIC配置的库函数,所以我将stm32lxx中的相关库函数移植了进来,因为都是m3内核,NVIC的配置是一样的,只需要少量的修改即可。
    配置时要注意一下几点。
    1.stm32的flash起始地址是0x08000000,EFM32的flash起始地址是0x00000000。RAM地址一致。
    2.stm32的使能和失能是用枚举类型(ENABLE,DISABLE),EFM32使用的是stdbool.h头文件

    void NVIC_Config(void)
    {
        NVIC_InitTypeDef NVIC_InitStructure;
    #ifdef VECT_TAB_RAM
        NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
    #else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
    #endif
        NVIC_PriorityGropConfig(NVIC_PriorityGrop_1);//先占优先级1位,从优先级3位
       NVIC_InitStructure.NVIC_IRQChannel = TIMER0_IRQn;//定时器0中断
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//先占优先级
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//从优先级
       NVIC_InitStructure.NVIC_IRQChannelCmd = true;
        NVIC_Init(&NVIC_InitStructure);
    }

    定时器0初始化:

    void Timer_Config(void)
    {
        CMU->HFPERCLKEN0 |= (1<<4);
        TIMER0->CTRL |= (5<<24);//32分频  32/32 = 1M
        TIMER0->CTRL &= ~(3<<6);//timer0的时钟选择为外设高速时钟
        TIMER0->CTRL |= (1<<0);//计数模式为向下
    
        TIMER0->IEN |= (1<<1);//向下计数溢出中断使能
    
        TIMER0->TOP = 999;//计数1000次刚好是1ms
    
        TIMER0->CMD = 0x01;//开启定时器0
    }

    定时器0中断服务函数:

    void TIMER0_IRQHandler(void)
    {
        if(TIMER0->IF & 0x02)
        {
            TIMER0->IFC |= (1<<1);//清中断
        }
    }
  • 相关阅读:
    Linux手动安装Apache2.4
    Linux 定时任务 crontab
    微信小程序 wxs 使用正则替换字符串
    腾讯云 远程通过端口3306访问MYSQL数据库
    微信小程序点击内容展开隐藏评论文章等
    SGA设置
    oracle 序列
    oracle中lnnvl函数
    union 中null值合并原理
    oracle 事务读一致性(一)
  • 原文地址:https://www.cnblogs.com/zpehome/p/2983946.html
Copyright © 2011-2022 走看看