11.EPIT定时器

一、原理介绍EPIT

在这里插入图片描述
​ 1.是一个计数器,他没有其他花里胡哨的功能,仅仅是一个向下计数器。

​ 2.时钟源选择。

​ 3.选择完时钟源以后进行分频,是一个12bit的分频器。

​ 4.分频以后获得计数器。load会向下加载,compare会与counter比较。

​ 5.进入cmp比较器中。要设置CR寄存器的模式,有两种模式,set-and-forget模式是当counter减到0以后会停止重新装载计数器的值;free-running模式是counter减到0以后就不再运行了。

二、寄存器设置

​ CR寄存器:

其中有一些位是在不同的模式下才会使用的,就不需要管他们。

bit[0] 设置EPIT使能

bit[1] 设置初始化寄存器的值

bit[3] 设置定时器工作模式

bit[15-4] 设置分频值

bit[25] 设置时钟源的选择

​ SR寄存器是在中断定时器中才用到的状态位。

​ LR寄存器:load 寄存器。设置寄存器的加载值。

​ CMPR寄存器:当load与counter相等置位为1。

​ CNR寄存器:当前寄存器的值。

三、EPIT中断实例

void Epit_Init(unsigned int frac , unsigned int value)
{
    if(frac > 4095)
        frac = 4095;
    /*Setup EPIT_CR Register*/
    EPIT1->CR = 0;
    EPIT1->CR = ( (1 << 1)| (1 << 2) | (1 << 3)|(frac << 4) | (1<<24) );
    EPIT1->LR = value;
    EPIT1->CMPR = 0;

    /*Init interrupt*/
    GIC_EnableIRQ(EPIT1_IRQn);
    system_register_irqhandler(EPIT1_IRQn , (system_irq_handler_t)EPIT1_irq_handler ,NULL);

    /*Enable EPIT*/
    EPIT1->CR |= (1 << 0);
}

/*EPIT1 IRQ*/
void EPIT1_irq_handler(unsigned int gicciar,void *param){
    static unsigned char state = 0 ;

    state = !state;
    if(EPIT1->SR & (1 << 0 ) ){
        led_switch(LED_GREEN , state);
    }

    /*clear INterrupte*/
    EPIT1->SR |= (1 << 0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值