EFM32片内外设Timer之基本操作

硬件环境:TG STK

实现的效果:LED灯每1秒闪烁一次 .Timer采用基本定时方式工作。

 

#include <stdint.h>
#include <stdbool.h>
#include "efm32.h"
#include "efm32_chip.h"
#include "efm32_cmu.h"
#include "efm32_timer.h"
#include "efm32_gpio.h"


//13761 Hz -> 14Mhz (clock frequency) / 1024 (prescaler)
//Setting TOP to 27342 results in an overflow each 2 seconds

#define TOP (13761/2)

void TimerConfig(void)
{
    /* Enable clock for TIMER0 module */
    CMU_ClockEnable(cmuClock_TIMER0, true);
   
    /* Select TIMER0 parameters */ 
    TIMER_Init_TypeDef timerInit =
    {
        .enable     = true,
        .debugRun   = true,
        .prescale   = timerPrescale1024,
        .clkSel     = timerClkSelHFPerClk,
        .fallAction = timerInputActionNone,
        .riseAction = timerInputActionNone,
        .mode       = timerModeUp,
        .dmaClrAct  = false,
        .quadModeX4 = false,
        .oneShot    = false,
        .sync       = false,
    };
   
    /* Enable overflow interrupt */
    TIMER_IntEnable(TIMER0, TIMER_IF_OF);
   
    /* Enable TIMER0 interrupt vector in NVIC */
    NVIC_EnableIRQ(TIMER0_IRQn);
   
    /* Set TIMER Top value */
    TIMER_TopSet(TIMER0, TOP);
   
    /* Configure TIMER */
    TIMER_Init(TIMER0, &timerInit);
}

//中断响应函数
void TIMER0_IRQHandler(void)
{
    /* Clear flag for TIMER0 overflow interrupt */
    TIMER_IntClear(TIMER0, TIMER_IF_OF);
   
    GPIO_PinOutToggle(gpioPortD, 7);
}

/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{
  /* Chip errata */
  CHIP_Init();
  CMU_ClockEnable(cmuClock_GPIO, true);
  TimerConfig();
 
  GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull, 0);
 
  while(1);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值