【星闪】Hi2821 | SysTick系统定时器

1. 简介

        hi2821 和 STM32 一样也有系统定时器,系统定时器的优点是配置及功能简单,可以用来实现一般的计时、计数、延时等任务。

        hi2821 的 SysTick 使用外部 32.768kHz 晶振或内部 32kHz 时钟作为时钟源,默认为内部晶振。hi2821 的 SysTick 包含 2 个 32 位的计数寄存器,可以单独使用也可串联一起使用,当串联使用时,计数值最高可为 2^{64}-1

2. 函数接口

  • uapi_systick_init(void):初始化Systick;
  • uapi_systick_deinit(void):去初始化Systick;
  • uapi_systick_count_clear(void):清除Systick计数;
  • uapi_systick_get_count(void):获取Systick计数值;
  • uapi_systick_get_s(void):获取Systick计数秒值;
  • uapi_systick_get_ms(void):获取Systick计数毫秒值;
  • uapi_systick_get_us(void):获取Systick计数微秒值;
  • uapi_systick_delay_count(uint64_t c_delay):按count计数延时(c_delay表示延时时间);
  • uapi_systick_delay_s(uint32_t s_delay):按秒数延时(s_delay表示延时时间);
  • uapi_systick_delay_ms(uint32_t m_delay):按毫秒数延时(m_delay表示延时时间);
  • uapi_systick_delay_us(uint32_t u_delay):按微秒数延时(us_delay表示延时时间);
  • uapi_systick_suspend(uintptr_t arg):挂起Systick模块,低功耗情况使用(arg表示挂起时所需要的参数);
  • uapi_systick_resume(uintptr_t arg):恢复Systick模块,低功耗情况使用(arg表示恢复时所需要的参数)。

3. 例程

        例程中只是简单演示获取计数和计时相关的函数接口,延时相关的接口已经集成到 LiteOS 的系统接口中了,无需调用 SysTick 的接口。

3.1 Kconfig

        因为 LiteOS 的系统心跳是依靠 SysTick 的,因此 SDK 中自然是默认打开相关的配置选项。如果有需要可以使能下面的计数寄存器串联功能。

3.2 代码

#include "soc_osal.h"
#include "app_init.h"
#include "securec.h"
#include "systick.h"

#include <string.h>
#include <stdint.h>


void app_main(void *unused)
{
    (void)(unused);

    while (1) {
        uint64_t tick = uapi_systick_get_count();
        uint64_t s = uapi_systick_get_s();
        uint64_t ms = uapi_systick_get_ms();
        uint64_t us = uapi_systick_get_us();

        osal_printk("tick: %lld, s: %lld, ms: %lld, us: %lld\r\n",
                    tick,
                    s,
                    ms,
                    us);

        osal_msleep(1000);
    }
}

        SysTick 的初始化,即 uapi_systick_init 函数,用户是不需要调用的,因为系统在初始化的时候就已经调用了一次了。

        代码当中可以直接调用相关函数获取计数值。需要注意的是,如果获取微秒值,它的最小计数单位是 \frac{1}{32000}\times 1000000=31.25us(使用内部32kHz时钟),所以如果调用速度很快可能会出现前后两次的值是一样的

3.3 测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马浩同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值