1、SCT 概述
2、SCT 原理与框图
3、SCT 定时器特性
3.1 SCT内部资源与特性
3.2 SCT 输入/输出信号
4、SCT 状态机 State Machine
4.1 状态 (State)
4.2 事件 (Event)
4.3 事件触发
4.4 事件动作
5、SCT 实例分析
5.1 要求
5.2 配置
5.3 运行波形图
6、总结
7、参考资料
一、SCT 概述
SCT :状态可配置定时器(State Configurable Timer),状态可配置定时器是恩智浦半导体特有的一种外设。
它可像大多数传统定时器一样工作,但添加了一个硬件有限状态机,从而提供更高水平的可配置性和控制度。
这允许将SCT 配置为多个 PWM、带死区控制的 PWM、带重置功能的 PWM 以及传统计时器无法复制的多种其他配置。
除非使能了需要内核来服务的 SCTimer/PWM 中断,否则配置好 SCTimer/PWM 后,它就可以自主从微控制器内核运行。
二、SCT 原理与框图
SCT 主要由定时器 Timer 和硬件有限状态机引擎 State Machine 两大部分组成,图 1左边为定时器,右边为状态机,与传统的 Timer 比较,SCT 增加了事件和状态(Event/State)的概念。
普通定时器可以向上/向下计数(counter)、计数值重载、计数值匹配(match logic)、产生中断、DMA 触发。
硬件有限状态机引擎可以灵活定义计数器、输出信号、中断、DMA 行为。
状态机是一个由有限数量的状态 State 和这些状态之间的转移 Transition (或称之为事件 Event)及动作构成的行为模式。由状态、输入、输出、切换(事件)组成。
产生事件的条件可以是:计数器匹配、输入/输出高低电平或者上升沿下降沿产生事件后可以:驱动输出信号、切换状态机状态、启动/停止/禁能/限制计数器、捕获当前计数值、产生中断或者 DMA 请求。
状态机是基于事件的数学模型,有事件才会有状态机,其转化过程如下图 2:
三、SCT 定时器特性
1) SCT 内部资源与特性
输入信号: 4 路,输入源可以是芯片内部信号或者外部引脚,如 SCT 输入信号连接模拟比较器输出或者 ADC 阈值比较输出。
输出信号: 6 路,可以像输入信号一样作为事件产生的条件,可以连接到片内其他模块,比如作为 ADC 触发信号,或者连接到片外引脚
捕获/比较寄存器:8 个,Match 和 Capture 寄存器共享,灵活选择使用 Match 或者 Capture 模式,
事件:8 个,Match 事件或者 Input / Output toggle 事件触发。
状态: 8 个。
Counter特性:
- 可以配置为2个16-bit或者1个32-bit计数器
- Counter可以由系统时钟或者外部输入驱动
- 可以设置为单一向上计数或者up-down
- 数量可配置的匹配寄存器和捕获寄存器。总共 5 个匹配和捕获寄存器。
- 匹配或输入或输出转换时触发以下事件:中断;停止、限制、挂起定时器或改变
- 计数方向;切换输出;改变状态。
- 计数器值可以载入捕获寄存器,由匹配或输入 / 输出切换触发。
事件创建特性:
- 以下条件定义了一次事件:计数器匹配条件、输入 (或输出)条件 (如上升沿或下降沿或电平)、匹配和 / 或输入 / 输出条件组合。
- 所选事件可以限制、挂起、启动或停止计数器操作,或者改变其方向。事件触发状态改变、输出切换、中断和 DMA 事务。
- 匹配寄存器 0 可用作自动限值。
- 在双向模式中,事件可以根据计数方向使能。
- 可以保持匹配事件,直至发生另一个符合条件的事件。
SCT 输入/输出信号框图如图 3:
1. SCT 输入信号片内连接设置
首先设置 Input Mux 外设寄存器,分别选择四个输入信号连接片内其他模块信号或者片外引脚
//设置SCT_INPUT0信号连接到SCT_PIN0功能
Chip_INMUX_SetSCTInMux(LPC_INMUX, SCT_INMUX_0,SCT_INP_IN0);
2. SCT 输入信号片外连接设置
如果将SCT输入信号连接到 SCT_PINx 信号,还需配置Switch Matrix引脚分配寄存器 PINASSIGN[6:7] 连接到片外引脚
//设置 SCT_PIN0 到 P0_0 脚,如图绿色线
Chip_SWM_MovablePinAssign(SWM_SCT_IN0_I, 0);
需配置 Switch Matrix 引脚分配寄存器 PINASSIGN[7:9],连接到片外引脚
//设置SCT_OUT0到P0_0脚,绿色线
Chip_SWM_MovablePinAssign(SWM_SCT_OUT0_O, 0);
4. SCT 输出信号片内连接设置
SCT_OUT3 还可以连接到 ADC 的 ADC_trigger 信号,触发 ADC 采样序列
通过设置ADC转换序列寄存器SEQ[A:B]_CTRL,来选择触发源
Chip_ADC_SetSequencerBits(LPC_ADC, ADC_SEQA_IDX, (3 <<12));
SCT的 SCT_OUT3 输出连接到 ADC 的 ADC_trigger触发输入
4、SCT 状态机 State Machine
4.1 状态 (State)
状态存储过去的信息,反映从系统开始到现在时刻的输入变化,其存储在 SCT 的状态寄存器中,状态寄存器的值反映了状态机的当前状态。
4.2 事件 (Event)
事件是状态机从一个状态向下一个状态变化的过程,该过程需要系统满足一定的触发条件才会开始,同时在该过程中还会触发一系列的动作。
4.3 事件触发
事件触发定义主要通过事件控制寄存器 EV[0:7]_CTRL 和事件使能寄存器 EV[0:7]_STATE 设置。八个事件分别对应八个控制寄存器和八个使能寄存器。
计数器及计数匹配条件:
输入\输出信号条件:
4.4 事件动作
SCT 所有的动作都由事件来驱动,是事件的输出结果,
SCT 事件驱动列表及对应的设置寄存器如下:
4.4.1 SCT 输出信号
SCT 模块共有 6 个输出信号SCT_Out[0:5],每个输出信号对应一组输出控制寄存器 OUT[0:5]_SET 和 OUT[0:5]_CLR,分别设置输出信号的置位和清零。
4.4.2 SCT 状态值更新
事件触发时可以产生对当前 SCT 状态的更新,进行状态变换。
SCT 状态寄存器 STATE 记录当前的 SCT 状态值,SCT 事件控制寄存器 EV[0:7]_CTRL 设置事件触发时对状态值的更新方式。
4.4.3 SCT 中断产生
设置 SCT 事件中断使能寄存器 EVEN,可以产生事件触发中断。
4.4.4 SCT 计数器捕获
事件触发时可以产生对 SCT 计数器的捕获功能,设置SCT捕获控制寄存器 CAPCTRL[0:7]。
4.4.4 SCT 计数器控制
事件触发时可以控制计数器的计数方向、计数清零、 启动、停止或者禁能。
如果要对计数器进行清零或者反向控制,可以根据事件编号设置LIMIT寄存器对应的位。
5、SCT 实例分析
5.1 要求
要求:输出两路占空比分别为50% 和 20% 频率为10KHZ 的 PWM 波形。
5.2 配置
SCT 输出设置:SCT 的OUT2 信号连接到 GPIO P0_28, SCT 的OUT4 信号连接到 GPIO P0_16,
/* SCT_OUT2 connect to P0_28 */
SWM_SetMovablePinSelect(SWM0, kSWM_SCT_OUT2, kSWM_PortPin_P0_28);
/* SCT_OUT4 connect to P0_16 */
SWM_SetMovablePinSelect(SWM0, kSWM_SCT_OUT4, kSWM_PortPin_P0_16);
SCT 配置:
/* Initialize SCTimer module */
SCTIMER_Init(SCT0, &sctimerInfo);
/* Configure first PWM with frequency 10000HZ from first output */
pwmParam.output = kSCTIMER_Out_4;
pwmParam.level = kSCTIMER_HighTrue;
pwmParam.dutyCyclePercent = 50;
SCTIMER_SetupPwm(SCT0, &pwmParam, kSCTIMER_EdgeAlignedPwm,10000U,sctimerClock,&event)
/* Configure second PWM with different duty cycle but same frequency as before */
pwmParam.output = kSCTIMER_Out_2;
pwmParam.level = kSCTIMER_HighTrue;
pwmParam.dutyCyclePercent = 20;
SCTIMER_SetupPwm(SCT0,&pwmParam,kSCTIMER_EdgeAlignedPwm,10000U,sctimerClock,&event)
/* Start the timer */
SCTIMER_StartTimer(SCT0, kSCTIMER_Counter_L);
5.3 运行波形图
黄色探头为 SCT_OUT4 在 P0_16 上的信号
蓝色探头为 SCT_OUT2 在 P0_28 上的信号
6、总结
本文对 NXP LPC 系列 MCU 新型外设 SCT 的原理、组成以及使用做了介绍,旨在使读者对 SCT 有更深入的理解,
并举了一个使用 SCT 产生一路 PWM 的实例,使读者可以初步了解如何使用 SDK 配置 SCT。
7、参考资料
LPC 系列规格书:
LPC82X.pdf 链接:https://www.nxp.com.cn/docs/en/data-sheet/LPC82X.pdf
参考手册:UM10800.pdf
需要登录 NXP 账户方可下载,下载页面:
https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc800-cortex-m0-plus-/low-cost-microcontrollers-mcus-based-on-arm-cortex-m0-plus-cores:LPC82X?fpsp=1&tab=Documentation_Tab
评论