查看: 1131|回复: 0

OKdo E1板的MicroTick(UTICK)计时器教程

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3301

    主题

    6548

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32040
    最后登录
    2024-4-28
    发表于 2020-8-6 09:06:45 | 显示全部楼层 |阅读模式
    OKdo E1板的MicroTick(UTICK)计时器教程
    翻译自:mark Embeddedpro

    我想与您分享一些嵌入式技巧,以提高代码的可靠性。而且,除了提高可靠性外,该技术还可用于安排“将来某个时候”发生的任何事件。它使用NXP LPC55S69微控制器上的MicroTick(UTICK)计时器,并且可以通过简单的计时器应用于任何设备。

    MicroTick计时器是一种优雅,美丽的东西。但是,lpcxpresso55s69 SDK中没有内置驱动程序示例,并且我相信计时器并未得到广泛使用。这意味着我们需要一个教程!

    假设您要打开LED 1秒钟,或者在eInk显示屏初始化时创建200ms的延迟。或者,您知道微控制器上的PLL应该锁定在100us之内,并希望保护不可避免的while(PLL_hasnt_locked)代码循环。在这里应该使用一个简单的计时器,而不是delay()函数。 while()循环在嵌入式应用程序中是如此广泛地使用,并且通常用于测试状态寄存器中的标志。您可以在lpcxpress55s69 SDK上找到所有内容……在CMSIS代码库,PLL配置代码,I2C驱动程序,USART和SPI驱动程序中……

    现在,我对while()和do…while()构造没有哲学上的问题,但是它们在实际应用中可能非常危险。考虑一下:
    1.png
    摘录>>来自lpcxpresso55s69 SDK的i2c驱动程序
    在do {}内部的第1124行读取I2C STAT寄存器,并执行循环,直到硬件将SLVPENDING标志设置为true。在1133行针对I2C_STAT_SLV_PENDING_MASK进行了测试。任何电气噪声,硬件故障或其他现实世界的干扰都可能使I2C状态机发生故障,并导致软件永久挂在此循环内,而SLVPENDING永远不会置位。将来某个时候(如果启用),我们可能会被看门狗救出,但那时我们将不知道是什么原因导致了死机。启用定义I2C_RETRY_TIMES可能更可取,但由于我将UTICK计时器用于所有非RTOS应用程序(开关反跳,显示驱动器中的一般延迟,LED闪烁,以代替delay_ms()...)宁愿使用此UTICK计时器来保护while()循环。

    MicroTick计时器
    2.png
    Utick计时器(LPC55S69)的框图

    这是一个非常简单的计时器!专用的1MHz自由运行振荡器fro_1m是时钟源,定时器可以装入31位计数值。时钟使计时器递减,并在Count = 0时向NVIC发出中断。有一个重复模式,因此计时器会产生周期性中断,但是我更喜欢在“一次性”模式下使用计时器……我只是将计时器配置为在“ X”微秒内生成中断,然后UTICK驱动程序发送我的代码进入我分配给驱动程序的回调函数。

    需要注意的另外两点…2 ^ 31 /(1,000,000)给出的最大延迟约为35分钟(实际上是00:35:47),最小延迟为几微秒。由于参考时钟来自自由运行的1MHz振荡器,因此UTICK定时器不适用于精确计时。其次,请注意,UTICK定时器具有4个捕获输入…当捕获引脚上发生编程的边沿检测时,这些允许我们将计数器值锁存到4个捕获寄存器之一中。简单意味着低门数和低门数意味着非常低的功耗……LPC55S69数据表中的utick报价为200nA,fro_1m报价为3.5uA。

    使用UTICK计时器驱动程序

    在本教程随附的视频中,我演示了如何配置和使用UTICK计时器。真的很简单。由于我的示例在OKdo E1板上运行,因此有必要配置时钟,以便我们不使用外部晶振和PLL0(否则代码挂在while()循环中……..您明白我的意思了吗?
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 06:10 , Processed in 0.124546 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表