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);//清中断
        }
    }
  • 相关阅读:
    java===单类设计模式之饿汉式与懒汉式
    java===数组工具类创建,并使用eclipse导出说明文档.html
    java===static关键字
    java===this关键字
    java=====二维数组应用
    java===算法思想锻炼
    【CSP-S 2019模拟】题解
    【CSP-S 2019模拟】题解
    【LOJ#2124】【HAOI2015】—树上染色(树形dp)
    【LOJ#2019】【AHOI / HNOI2017】—影魔(线段树+扫描线)
  • 原文地址:https://www.cnblogs.com/zpehome/p/2983946.html
Copyright © 2011-2022 走看看