ARM M0+各种定时器驱动的编写


systick

系统滴答时间。这个定时器之前的文章已经讲过。这个是一个递减的定时器,有个模数寄存器。在此不多说。就是一个系统的模块,这个模块是集成在ARM M0+内核中的,其实主要是集成在NVIC 中的,NVIC也是ARM 内部模块,该模块的定时器,用该模块的时钟源来使能该定时器。以及模数计数器。总共只有四个寄存器。控制状态寄存器:主要包含一个COUNTFLAG 中断标志位,当计数器计数到0的时候标志该位,CLKSOURCE :可选择时钟源,默认为内核始终,有的厂家还会提供其他外设始终。TICKINT中断使能位,ENABLE计数器使能位。

RVR重载寄存器:每次计数器计数到0 的时候,都重载该值。

CVR计数器的值,记录当前的值。

CALIB校准寄存器:有的厂家将计算好的10ms的ticks值放入该寄存器。也就是说是厂商决定的,厂商烧入,则有,没有设置则没有。

TPM

ARM M0+各种定时器驱动的编写

这个寄存器是递增的。有三个模块,

分为主计数器,和通道计数器,也就是相当于一个计数器,分一个主模数,一个次模数。状态和控制寄存器(SC)中,通过CMOD 可以选计数的模式通过该计数模式可以选择时钟,是选择模块时钟还是选择时钟失效,还是选择异步外设时钟,。再经过PS分频,2(PS次幂)代表分频值,即将该时钟降频。  CPWMS:中心对齐PWM选择(即计数器的计数模式,这个也算该计数器的一个特色吧。比如一般来说计数器是1,2,3,4,5, 然后1,2,3,4,5 。通过该位置1,可以设置成1,2,3,4,5,4,3,2,1)。所以置1只能配出中央对齐的PWM.

该定时器有一个总的MOD模数值,该值用来控制该模块的一个总的中断请求置状态寄存器的TOF位,当计数器达到该值时,该请求。当然一定有一个中断使能位,就是TOIE中断使能位,。两个值一并即触发了中断服务历程。

TPM的分通道。每个模块也有自己的模数寄存器的值。就相当于,主计数器模数是5,从1数到5,通道模数是3,即从1数到3的时候就出发了通道相应的事件。

其实也就是说通过将该模块的计数值。当前通道通过一定的配置 ,根据计数器来进行相应的处理。通道中分为MSnB:MSnA该位控制模式的。ELSNB:ELSNA该两位控制的是边沿和等级。模式有0:输入捕捉(01上升沿,10下降沿,11上升或下降捕捉),1,输出比较(在通道的模数值和计数器的值相等的时候,01翻转电平,10清除电平即置0,11设置电平即置1),2边沿对其PWM(10重新加载的时候是高电平,匹配的时候是低电平,即先高后低,01或11先低电平后高电平),11输出比较(10在匹配的时候打出低电平,X1在匹配的是打出高电平)。后面两种其实是一种,不同的就是在重新加载计数器的时候是否有操作。

每个通道都有一个状态控制寄存器和模数值,包含一个标志通道的中断的标志位,该标志位每个通道都有,还有一个中断使能位,还有就是刚才提到的模式控制和边沿控制,外加一个DMA使能。

模数值和计数器的模数值一样都是16位的,

由于一个模块的通道都比较多,每个通道虽然都有这个中断标志,但是,模块中断只有一个,所以KL25有一个寄存器STATUE将总中断标志位TOF,和每个通道的中断标志位,都映射到一个寄存器中,这个标志都是写1清0的。

有CONFIG配置寄存器,配置计数器的模式,以及时钟源,以及触发方式,比如让计数器不计数,等到输入捕捉到一个上升沿就开始捕捉。等等。还有在调试模式和在等待模式下用的时间基数。

根据以上寄存器的功能可以配置一下的几种功能:

输入捕捉:一般用于编码器

采集输入脉冲的上升沿,下降沿或者上升沿下降沿都采集。采样周期得是计数器时钟的1/4。这其中还涉及到一个Nyquist定律。输入捕捉的时候,CnV就没有用了。

ARM M0+各种定时器驱动的编写

输出捕捉功能:一般用于打出方波波形,比如步进电机需要的方波波形

即只有在通道值和模块的计数器的值相等的时候,会操作,可以翻转,默认高,或者默认低。该脉冲周期是计数器周期的两倍

边沿对其的PWM;即在上面的输出比较功能的基础上添加在重载计数器的值得时候进行设置。形成方波脉冲波形。

中心对其的PWM:这个就比较复杂了。周期是模数的两倍。就是1,2,3,4,5,模数是5 ,通道的模数是3 ,当开始和结尾的时候有一次溢出中断,总中断,当1数到3的时候触发一次通道中断,当3数到5 再从5数到3的时候又触发一次通道中断,然后再从3数到1.

  • 1
  • 2
  • 下一页

相关内容

    暂无相关文章