LPC82x 可配置状态定时器(SCT)介绍

关键字 :NXPLPC824MCU

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特性

  1. 可以配置为2个16-bit或者1个32-bit计数器
  2. Counter可以由系统时钟或者外部输入驱动
  3. 可以设置为单一向上计数或者up-down
  4. 数量可配置的匹配寄存器和捕获寄存器。总共 5 个匹配和捕获寄存器。
  5. 匹配或输入或输出转换时触发以下事件:中断;停止、限制、挂起定时器或改变
  6. 计数方向;切换输出;改变状态。
  7. 计数器值可以载入捕获寄存器,由匹配或输入 / 输出切换触发。

 

事件创建特性:

  1. 以下条件定义了一次事件:计数器匹配条件、输入 (或输出)条件 (如上升沿或下降沿或电平)、匹配和 / 或输入 / 输出条件组合。
  2. 所选事件可以限制、挂起、启动或停止计数器操作,或者改变其方向。事件触发状态改变、输出切换、中断和 DMA 事务。
  3. 匹配寄存器 0 可用作自动限值。
  4. 在双向模式中,事件可以根据计数方向使能。
  5. 可以保持匹配事件,直至发生另一个符合条件的事件。
      2) SCT 输入/输出信号

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);

3. SCT 输出信号片外连接设置

          需配置 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

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论