【LPC800 系列】SCT 的配置及使用
本文将介绍 NXP 的专利外设模块 SCTimer ,主要是介绍其比引脚中断响应时间还快的用法。
- LPC800 SCT 简介
LPC800 系列的 SCT 外设模块其主要特点就是它在定时器中加入了状态机,使得其功能更加灵活,可以适应很多场景的需求,实现复杂的功能。关于 SCT 的基本介绍请参考公众号——单片大师中的以篇博文:“《说好不哭》,当我错过 SCT 真的哭了”,链接如下:https://mp.weixin.qq.com/s/oxjwQ5FChVS-DhKii094Hw,
这篇博文对 SCT 的使用及基本用法介绍的很详细,这里就不再重复介绍。
废话不多说,接下来就进入码代码的环节。
- 实战演练
接下来我们将做两个实验:第一,引脚中断响应时间测试;第二,SCT 引脚响应时间测试。两个实验都使用 LPCXpresso845MAX EVK 做测试。
测试方法:按键 SW2 作为触发中断源,产生中断后翻转 LED3 电平状态,示波器两个探头分别连接这两个引脚,通过示波器波形来获得该段时间。
- 引脚中断程序设计
打开 SDK 中的 引脚中断例程,路径如下:
SDK_2.6.0_LPCXpresso845MAX\boards\lpcxpresso845max\driver_examples\pint\pin_interrupt\mdk
为了测试的更准确,我们将其余不需要的部分都去掉,只留下引脚中断的相关配置,并添加如下图所示:
然后将例程中的中断回调函数直接更改为中断服务函数,这样可以省去回调的时间,如下图所示:
可以看到中断服务函数里直接操作寄存器先使 IO 口翻转,再清除中断标志位,这会使得响应时间更快。
将代码编译下载到板子上之后,LED3 亮,按下按键 SW2 可以看到 LED3 熄灭,再次按下 SW2 LED3 亮。
- SCT 引脚响应程序设计
打开 SDK 中的 SCT 例程,路径如下: SDK_2.6.0_LPCXpresso845MAX\boards\lpcxpresso845max\driver_examples\sctimer\16bit_counter\mdk
修改 Main 函数,如下图所示:
首先定义一些需要用的结构体,进行时钟初始化:
然后通过开关矩阵将 SCT 的输入和输出的引脚连接到 SW2 和 LED3 ,并初始化 SCTimer:
最后设置输入触发条件为下降沿触发,创建一个事件对应输入 INPUT0 ,设置事件发生后翻转输出 OUTPUT0 状态,使能 SCT。
将程序编译下载到板子上后,LED3 亮,按下 SW2 后 LED3 熄灭,再次按下 SW2 后 LED3 亮。
- 测试结果
接下来就测试下两种方法哪种响应时间更快,手上没有示波器的话也可以用逻辑分析仪抓取波形。
- 中断响应
可以看到在主频最高 30 MHz 的情况下是需要 2us 的时间的
- SCT 响应
测量时间为 0.25us ,比中断响应快了很多。
需要响应时间快的可以使用 SCT 。
参考资料:
- 《LPC84X User Manual》
用户手册包含了外设配置方法,由 NXP 官网提供下载,链接如下:
- LPC845 官方 SDK 包
SDK 包里包含了许多例程,由 NXP 官网提供下载,链接如下:
https://mcuxpresso.nxp.com/en/select
评论