详细了解:核心独立外围设备

核心独立外围设备(CIP)能为应用程序带来什么?CIP 可以让用户按照写入软件的指令自动执行通常由中央处理器执行的某些任务。CIP 还可以减少开发人员编写代码的数量,同时创建响应速度更快、功耗更低的系统。Microchip 的这段视频详细介绍了何为 CIP、如何使用以及如何让您的项目受益。

嗨,大家好,这次由 Marc McComb 带您详细了解核心独立外围设备。

您可能知道,PIC 和 AVR 微控制器的体系结构都带有外围设备。其中很多就是我们所说的核心独立外围设备,或简称 CIP。这些外围设备旨在按照开发人员写入软件的指令自动执行通常由中央处理器或核心执行的某些任务。

这些核心独立外围设备具有各种先天优势,如减少开发人员编写代码的数量,同时有助于创建响应速度更快、功耗更低的系统。我想通过这个视频让您大体了解,核心独立外围设备能为应用程序带来什么。

为此,我将使用一个非常基本的示例,我要将输入/输出端口引脚切换为高电平或低电平,基本上创建一个调用心跳信号的方波输出。现在为了完成这个心跳信号,我写了一些代码,每次通过这个流程图显示的环路实现高低输出的切换。

现在我为这个应用程序添加另一个任务。只要按下微控制器一个引脚所连的按钮,我们希望能够驱动另外一个引脚上大约两毫秒宽的输出脉冲,类似于一个单稳态触发器或单稳态多谐振荡器。

现在,假如我们有一个配有基本外围设备的微控制器,我们将需要使用中断执行这个额外的任务,就像这样。这里我用的是基本的定时器外围设备和连接到按钮的通用输入/输出端口。大多数这些外围设备都可以产生大部分现代微控制器上会看到的常见中断。

我要使用的第一个中断是关联的引脚电压发生变化时输入/输出外围设备会产生的中断。这样按下按钮后,引脚电压会降为零,因为我把按钮拉高到了这里,触发了中断。若收到通知触发了输入/输出端口中断,核心会检查软件的中断优先级,如果安装了微控制器,则会检查硬件的中断优先级。

这样可以确保不会同时发生优先级高于此输入/输出端口中断的其他中断事件。否则核心会调用输入/输出端口中断服务程序。在服务程序中,核心按照指令重置定时器,将其加载到特定的值,使其溢出两毫秒,然后定时器开始计数。

核心还按照指令拉高输出引脚的电平。这会产生我们单触发信号的上升沿。端口中断服务程序结束后,核心就会返回执行之前的任务,在我们的例子中就是切换我们的心跳信号。于是核心继续切换心跳信号,直到定时器溢出我们设置的两毫秒,触发中断,就像执行硬件或软件中的输入/输出端口中断优先级,等到不会出现其他优先级更高的中断,就会调用定时器中断服务程序。

核心会按照代码的指令,清零并停止定时器,然后拉低我们的单触发信号。所以这个代码其实没什么太过复杂之处,但我们需要记住中断事件发生后的这些步骤,先识别,再排出优先级,最后执行关联硬件服务程序,这都需要时间,在这期间核心无法切换心跳信号。

 

那我们来演示一下。实际上,我已经为这个应用程序写了代码,并下载到了微控制器。我将一个示波器连接到了两个输出引脚。这个蓝色信号就是核心正在产生的心跳信号,每次通过环路切换引脚。看看我按下按钮触发端口中断后会发生什么,您可以看到,在单触发脉冲上升沿前后以及下降沿前后的短暂时间内,我们的心跳信号丢失了一些脉冲。

在这里按下按钮。单触发脉冲第一个边沿之前的延迟是多种因素造成的,包括中断等待时间,即核心实际检测到发生中断所用的时间。但造成延迟的主要原因是我们的中断优先级和中断子程序中的实际执行代码。

核心实际返回到切换心跳信号的任务之前,您也会看到单触发脉冲升高之后出现了延迟。所以这里多了几个脉冲,然后两毫秒后定时器中断。同样,在核心实际检测到中断发生所需的短暂时间后,就会停止产生心跳信号,然后排出优先级,跳转定时器中断服务程序,最后拉低单稳态触发器引脚的电平。

所以这其实只是一个我们在软件中切换输入/输出的基本应用程序。不过想象一下,并非切换心跳信号,而可能是核心需要检测的某种输入信号。因此,可能是用户输入,如电容式触摸传感器,甚或较为紧急的信号,如检测系统过热或用户潜在危险的信号。

最糟糕的情况是,核心可能会停止执行某个中断,完全错过那个信号,致使用户有点恼火,甚至对系统产生某种灾难性的影响。现在我们可以提高运行速度,使核心更快地处理中断,以尽量减少这种情况的发生,但切记,这同时也会增加我们的功耗。而且加快运行只能尽量减少心跳信号的中断,无法完全避免中断的发生。
 

我们也可以让我们的应用程序设计人员编写不同的软件程序,花费更多时间对应用程序进行台架试验,或者配置其他系统元器件来改善这种情况。但时间就是金钱,对吧?因此,花费更多时间编写代码或尝试微控制器所连的辅助系统的不同配置可能成本高昂。

那我们来看一下使用核心独立外围设备的另一种解决方案。这就是 ATTINY817,这是一款 AVR 设备,除其他外围设备外,还配有一个名为 B 型定时器/计数器(TCB)的基于定时器的外围设备以及另一个叫做事件系统的外围设备。事件系统可以使用微控制器上其他位置产生的事件在同一微控制器上触发其他事件。

比如说,如果连接到比较器一个输入引脚的电压超过预定阈值,比较器就可以配置为高输出。利用事件系统,我们就可以用这个比较器输出触发另一个引脚电压的模拟数字转换。

或者外部信号发生某种变化(如按下端口连接的按钮),触发计数器开始计数。ATTINY817 上 16 位 B 型定时器/计数器之类的计数器恰好具有单脉冲发生模式,触发时可以输出用户定义持续时间的脉冲。

 

接下来我要做的就是用此产生我们的单稳输出。在我们的设计中,按钮连接的端口输入/输出将使用事件系统发送到 B 型定时器/计数器,以使引脚的输入变化触发这个单脉冲输出。在我们的应用程序中实现这些功能与这类似。

所以再次使用微控制器核心切换输入/输出引脚的心跳信号。但这次我们不再依靠核心的中断驱动我们的单触发脉冲,而是通过事件系统发送按钮连接的端口引脚的变化事件,并将其连接到我们的 B 型定时器/计数器,以触发输出脉冲两毫秒。

由这个结构图您可以看到,核心实际上已经不再执行与检测按钮按下或执行单稳输出有关的任何任务,因为这些任务均使用外围功能在硬件中完成了。我已经开始使用这个应用程序为 ATTINY817 编程,现在我们来看一下我们的波形。

这还是我们由核心控制的输入/输出切换引脚。这次的不同之处在于,当我按下输入连接的按钮时,外围设备正在硬件中处理的两毫秒输出脉冲对心跳信号没有丝毫影响,因为核心从未中断。使用外围设备在硬件而非软件中处理任务意味着,核心现在可以同时执行其他任务,如为心跳执行代码,甚至进入低功耗模式。

最重要的是,我们不仅通过省掉占用核心的软件和中断提高了系统的响应速度,而且还降低了运行速度以降低功耗。最后我想告诉你们的一点是,切记,我们想要的是两毫秒宽的输出脉冲。

但请看一下基于软件中断的这款应用程序。我们对定时器进行了配置以产生两毫秒的中断,但由于中断等待时间以及执行与中断服务程序有关的代码所花的时间等,您可以看到,我们的输出脉冲实际上比我们希望的长出大约 300 微秒。

请看一下使用 ATTINY817 外围设备产生的波形。如您所见,输出正是我们想要的两毫秒宽,因为这个任务是在硬件中处理的,没有软件和中断固有的费用。这个硬件外围版本实际上是使用 Microchip Technology 的一些图形编程工具快速开发的,这些工具以非常高的水平呈现外围设备,以使用 PIC 和 AVR 微控制器简化应用程序开发。

在以后的视频中我会介绍这些工具和更多内容。同时,欲了解更多有关这些主题或其他主题的信息,请访问www.microchip.com/8bit。我是 Marc McComb,感谢您的观看。


最新视频

抱歉,您所选择的筛选条件未返回任何结果。

请仔细阅读我们近期更改的隐私政策。当按下确认键时,您已了解并同意艾睿电子的隐私政策和用户协议。

本网站需使用cookies以改善用户您的体验并进一步改进我们的网站。此处阅读了解关于网站cookies的使用以及如何禁用cookies。网页cookies和追踪功能或許用于市场分析。当您按下同意按钮,您已经了解并同意在您的设备上接受cookies,并给予网站追踪权限。更多关于如何取消网站cookies及追踪的信息,请点击下方“阅读更多”。尽管同意启用cookies追踪与否取决用户意愿,取消网页cookies及追踪可能导致网站运作或显示异常,亦或导致相关推荐广告减少。

我们尊重您的隐私。请在此阅读我们的隐私政策。