我们在这一章会用到的是EPIT,Enhanced Periodic Interrupt Timer,加强的周期性中断定时器。
它所起到的作用听它的名字就能猜出来,它会每隔一段时间中断一次。
EPITx_CR是控制模式的寄存器
它有两种模式:set-and-forget与free-running
set-and-forget:我们提供一个初值,比如1000,它就开始倒计时,从999到0,接着提醒你一下,然后继续从999倒数到0;
free-running:我们不用提供初值,它会从0XFFFFFFFF倒数到0,然后提醒你一下,像沙漏一样翻转,继续从0XFFFFFFFF倒数到0。
接着我们看代码:
常规初始化,先清零我们的CR模式寄存器,接着输入初始化参数
其中LR是加载寄存器,CMPR是比较寄存器,
具体可查看文首的结构图
我们如何判断是否到达中断时间呢?
是不断地去观察EPIT_SR的值,如果是1则到达中断时间,但是接着我们要手动清除该中断标志位噢!
我们在初始化的时候设定了时钟源的频率为66MHz
根据上述公式计算value的值,我们设定Tout是0.01s,即10ms,设定分频值为0,即1分频,
那么我们的value=Tclk*0.01
timarder!!!(他妈的)
在做定时器按键消抖的时候被绕进代码里面了,终于理解了!
首先我们在init的时候已经打开了key所在GPIO口的中断功能
注意在这里我们已经初始化了,注意倒数第四行的gpio1_16_31_irqhandler,当按键按下后,我们会转到函数
中断会打开restart定时器开关,定时10ms,接着转到
在10ms后,定时器又产生中断,先判断是否结束了,如果定时结束了就关闭定时器,然后判断是否电平改变,因为如果按键抖动的话电平就没有改变哇,所以判断一下是不是,如果是改变了,那就反转蜂鸣器。
就是这样!