什么是定时器?Xilinx zynq7045/7020定时器
定时器顾名思义就是一个定时的器件,可以在计时到特定的时间后通知CPU/或其他处理器去做某些指定的事情,就像现实生活中的闹钟,提醒你到时间该去做某件事情了。作为嵌入式从业人员,我们讨论的对象为单片机的定时器。至于单片机有几个定时器,在单片机的什么地方可以先不用去深究,等到在实际工作中需要使用时,再去研究芯片的手册。
定时器其实可以被视为一个计数器,给定一个计数的初值,每计数一次,就走过一个固定的时间,计数次数到达给定的初值时,该定时器完成自己的任务,产生定时器中断。时间间隔是由定时器的工作频率来决定的。定时器的工作频率也可以通过预分频器改变。
定时器可以根据工作频率算出一次计数的时间间隔来,如果不给初值(默认),或初值为0,那么定时器中断产生的频率就是定时器工作频率,即定时时间为
定时时间 = 时间间隔
时间间隔 = 1/定时器工作频率(单位为s)
定时器有计数寄存器,可以往寄存器里写初值。这样就可以产生想要的时间更长,定时时间更灵活的定时器中断,定时时间为
定时时间 = 定时器时间间隔*初值
时间间隔 = 1/定时器工作频率
初值 = 预加载值+ 1;
以上还是属于硬件定时器的范畴。
但是定时器的计数寄存器的位数是有限制的,不可能无限大。**所以如果某些任务需要更长的定时时间,要自己使用软件计数,这就是所谓的软件定时器。
定时时间 = 定时器时间间隔初值*软件计数次数
时间间隔 = 1/定时器工作频率
初值 = 预加载值+ 1;
为什么单片机需要定时器?
①用于计时,在到时后完成某项特定操作
②替代delay或sleep函数,避免CPU长时间在程序的某个地方等待,提高CPU的运行效率和处理速度。
*
定时器中断*
定时器完成计时任务后怎么通知CPU,这就要用到定时器中断(参考前面中断文章中的外部中断)。定时器作为单片机的外设,主要用来实现定时执行某些指定任务代码的功能。一个CPU的运行是单线程的,代码顺序执行,同一时间只能干一件事情。如果想要能够在其执行代码的中途打断他,就需要定时器中断来提醒。
CPU的定时器分类(从物理层面)
CPU的定时器分为硬件定时器和软件定时器。硬件定时器时间精度高,软件定时器时间精度低且占用CPU资源,定时时间存在延迟,用在一些不需要精确定时的地方。
1.硬件定时器
一般硬件定时器集成在芯片的内部,由外部晶振作为输入时钟,硬件定时器会周期性的给到CPU一个中断信号,这个中断信号叫做定时器中断。硬件定时器的工作频率一般是可以进行配置的,可以使用预分频器(Prescaler)对定时器输入时钟的频率进行配置,将定时器时钟源进行分频输出,这样可以更好的控制(得到更长延时时间的精确的)定时器中断的周期。
应用举例:
Xilinx-zynq 7045私有定时器的工作频率为CPU的一半,CPU的工作频率为666MHz,所以私有定时器的工作频率为333MHz。Xilinx-zynq系列预分频器的值由寄存器Prescaler设定,是一个8位正整数值。
如果我们想获取一个精确的1us中断,如果不分频,333MHz的时钟对应每周期1/333us,还需设置计数器初值为333。这时候使用预分频器将输入时钟分频333(如果可以)后,得到1MHz输入时钟频率,这样定时器的周期为1us。
2.软件定时器
软件定时器是基于硬件定时器衍生出来的定时器,通过软件程序计数实现,数量无限制。
应用举例:
Xilinx-zynq 7045/7020定时器
Xilinx-zynq 7045/7020包括5种CPU定时器
①CPU私有定时器
②CPU看门狗定时器
③全局定时器
④系统看门狗定时器
⑤三重定时器/计数器
首先,zynq 7000 片上芯片有2个Cortex-a9 ARM核。每个处理器有它自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些定时器总是工作在1/2的CPU时钟频率。
在系统级上,有一个24位的看门狗定时器和两个16位的三重定时器/计数器(TTC)。
系统看门狗计时器的时钟频率为CPU频率的1/4或1/6,或是来自MIO引脚或者PL的外部时钟。两个三重定时器/计数器(TTC)的时钟为CPU频率的1/4或1/6,或是来自MIO引脚或PL的外部时钟。
全局计时器是一个64位递增的定时器。全局计时器与私有定时器映射在同一个地址空间中的内存,仅在安全状态下在重置时被访问。所有Cortex-A9处理器都可以访问全局定时器。每个Cortex-a9核都有一个64位的本地比较器,用于在全局计时器达到比较器值时产生私有中断。GTC总是以CPU频率的1/2为工作时钟。
7045、7020定时器配置简要介绍
①定义变量(SCU定时器)
②通过唯一的设备定时器ID查找设备配置(结果返回到结构体)
配置中断
异常处理程序初始化
③初始化配置一个指定的中断控制器实例(驱动器)
注:若配置失败,退出当前函数
④call 异常注册处理程序
使能异常中断
⑤链接函数—绑定中断服务程序
⑥使能要使用的中断
…
⑦使能定时器中断
⑧加载定时器计数周期
⑨将中断的预加载值设置为自动装载模式
⑩启动定时器