SCT基础应用

关键字 :SCTNXP

SCT (State Configurable Timer)是一个NXP MCU 独有的一个外设,它可以像传统的定时器那样运行,但它增加的状态机机制使得它可以应用于更多的场合,比传统的定时器更加强大,它配置的状态机制可以直接从内核中自动运行,无需软件干预,属于硬件状态机。

它另外增加了一个事件的概念,事件可以切换状态,驱动输出,启停计数器,产生中断或者 DMA 请求。

1、快速上手使用 SCT

先来看一下小例子。

代码应用在LPC824上,这个例子达到的效果是,每100ms改变一次 SCT_OUT0 的状态,这里面只用到了事件没有用到状态。

(1)配置config

SCT的config 寄存器用来配置SCT的计数器模式,时钟源以及时钟模式,装载值的装载设定等。

这里只配置它的计数器,其他均为位均为默认,如下,计数器为溢出自动清零的32位模式。

(2)配置计数器的match

SCT 的Match寄存器用来设定计数器的match值,在这个例子中,当计数器的值达到match值的时候,就可以产生事件。如果计数器不是32位的模式,match的高16位和低16位需要单独设定。这里使用的是32位的计数器模式,直接往寄存器结构体相应的成员写值即可。

Match reload寄存器用来设定计数器下一个计数周期的match值,即重装载值。与设定match值同理,设定重装载值即可。

(3)设定事件event

接下来就是设定事件了,事件可以在一个或者多个状态中发生,EV[n].State这个寄存器是设定当前的事件n可以在哪些状态发生,本例子中没有用到状态,所以允许EV[0]可以在所有状态中发生,所以EV[0].State的8个位全部置1了。相应地,EV[n].State一共有8位,对应8个状态,要想当前的事件在哪一个状态发生,就置位相应的位。

(4)配置事件的CTRL

接下来配置的EV[n].CTRL寄存器是控制事件由什么去出发,事件的触发有以下几种方式:

  • 计数器计数至match值
  • 外部引脚或者内部其他模块的输出信号,形式是高低电平或是上升下降沿信号
  • 前面两种方式的与或

在本例子中就选择只有计数器match去产生事件0。

EV[n].CTRL的第0位至第3位设定的是本事件所对应的match寄存器,设定方式是直接往里面写对应的值,0到7,本例子中事件对应的match寄存器是0,所以直接写0。本例子使用的是32位的计数器模式,所以不用设置 HEVENT 位。


(5)配置输出

接下来就是设置事件0的输出了,在计数器停止的时候,SCT的输出可以由软件直接去写入,但是当计数器在运行的时候,输出只能由事件去控制。

在本例子中,设定OUT0为事件0的输出。

这里可能会有疑问,为什么设定了OUT[0]为1,又同时设定了OUT[0]为0,这样不会产生冲突吗?再看下面一个寄存器,resolution(res),它的作用就是解决当多个事件或者1个事件给一个输出同时设定了1或者0,输出应该怎么执行的问题。

 该寄存器不同的位分别解决不同输出的冲突情况,0位和1位对应解决OUTPUT[0],往里面直接写进去3即可在OUTPUT[0]遇到冲突的时候翻转。就取得了想要的效果,每隔100ms改变一次OUTPUT[0]的状态。

(6)开始运行

 完成所有设定之后,就可以控制计数器开始计数,让SCT开始工作起来。控制计数器运行的寄存器是control寄存器。

本例子使用的是32位的计数器模式,所以只能使用该寄存器中带_L的位,这里只要让第2位清零便可以开始计数器计数。

2、小结

本文以一个小例子为例大致介绍了SCT的基础应用,它的一些基本的寄存器配置。SCT可以用来做很多事情,例如多路的PWM,带死区的互补PWM,输入捕获,其他的如RC5接收器等等。



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

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

评论