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);//清中断
        }
    }
  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/zpehome/p/2983946.html
Copyright © 2011-2022 走看看