技术热线: 4007-888-234

单片机的重要外设:定时器

更新时间: 2021-08-26
阅读量:3113

单片机(MCU)应该知道当前的日期和时间。他们还经常需要测量预定的时间段,并跟踪经过的时间。例如,一个典型的应用程序可能会反复询问MCU自应用程序本身启动以来已经过去了多长时间。另一个应用程序可以指示MCU每秒发出128次特定信号。程序还会经常告诉MCU在采取一些进一步的行动或转换到其他一些进程之前等待一些指定的时间。在这些情况中的每一种情况下,以及在许多其他情况下,MCU必须使用一个或多个定时器。这些定时器通常作为MCU本身的外设功能实现。(见图1)

fig1-types-of-processing-en.jpg

当然,软件确实可以自行控制等待时间,不依赖硬件定时器的服务,只需保持CPU被非生产性步骤占用即可。这种方法如图2所示。如果我们假设CPU需要1μs(微秒;百万分之一秒)来执行一次循环迭代,我们可以通过将初始值设置为有效地实现1秒的等待100万次,然后循环100万次。这种方法的一个主要问题是它垄断了CPU,CPU忙于数计算,以至于无法做任何其他事情。另一个问题是不能自由设置计数自定义增量,而定时器支持多种增量,0.1秒,1/1024秒等等。

fig2-software-timer-en.jpg

这种方法的另一个大问题是它依赖于CPU时钟速度。如果程序稍后在具有不同时钟速度的不同CPU上运行,那么等待时间也会改变。如果在100MHz PU上运行时等待时间需要1秒,那么在50MHz PU上运行时将需要2秒。如果希望保持相同的速度,则需要为使用的每台机器修改循环代码。这将花费大量时间,并且也容易出现许多错误。因此,在可能的情况下,最好使用硬件来跟踪时间。

关于中断的简单介绍

下面简单介绍一下中断的概念,它是硬件定时器操作的一个基本特征。中断——顾名思义,中断当前处理以请求立即处理其他一些处理。通过使用中断,即使CPU忙于做其他事情,也可以引起CPU的注意。

这是厨房的一个类比。你正在煮一些面条,你想在三分钟内把它们从炉子上拿下来。一种方法是站在一旁盯着时钟上的秒针三分钟;这是软件在等待循环重复一百万次时所采用的方法。另一种方法是设置厨房计时器,然后做其他事情,直到闹钟“打断”并重新引起的注意。使用这种方法,可以自由地处理其他任务,直到出现中断。

当达到预定时间(经过时间;一天中的时间;完成时间等)时,MCU中的各种外设定时器通过发送中断来提醒CPU。许多其他外设也使用此类中断:例如,通知CPU某些监视状态已更改,或者某些进程已启动或结束。CPU可以一直忙于其他任务,直到每个中断出现,因此整体效率仍然很高。

定时器和看门狗

MCU最常使用的外设定时器是对特定时间段进行计数的定时器,以及发出周期性中断的定时器。RX63N还包括许多其他定时器,其中一个用于生成用于伺服电机控制的PWM(脉宽调制)信号,另一个用于测量输入信号之间的时间,以及一个RTC(实时时钟)跟踪当前时间。

嵌入式系统中常用的一种更有趣的定时器是“看门狗”(WDT:看门狗定时器),也称为“cop”(计算机正常运行)定时器。顾名思义,这个计时器的作用是检测和响应计算机故障,以便系统可以从失控的程序中恢复,否则会导致系统冻结。当系统启动程序时,它也会将预定的时间计数写入WDT。然后WDT会定期自动递减计数。如果程序正常结束,它将在关闭前清除WDT计数值。但是,如果程序挂起,WDT计数将继续递减。当该值低于0(“下溢”条件)时,WDT将产生一个中断,警告CPU发生了错误。