打印

[技术问答] AC781X MCU平台如何实现延时功能?

[复制链接]
172|3
跳转到指定楼层
楼主
本帖最后由 AutochipsMCU 于 2019-7-16 12:05 编辑

延时,在编程时常会用到。
本帖介绍在AC781X MCU如何使用延时功能。
使用方法很简单,在调用延时函数前,先调用InitDelay()函数进行初始化。
然后就可以调用mdelay进行毫秒级延时,udelay进行微秒级延时。
该功能使用的定时器为TICK定时器,适用于裸跑平台。如果带OS的平台,会使用TICK定时器,就不能使用该接口。不过,直接用OS封装的延时函数就可以了。
udelay和mdelay函数的实现

使用特权

评论回复

相关资料

沙发
| 2019-7-16 12:09 | 只看该作者
initdelay在干啥,初始化定时器?

使用特权

评论回复
板凳
 楼主 | 2019-7-16 13:16 | 只看该作者
marginer 发表于 2019-7-16 12:09
initdelay在干啥,初始化定时器?

void InitDelay(void)
{
    s_facus = __SYSTEM_CLOCK / 1000000;
    s_facms = s_facus * 1000;
}SysTick的配置和使能是在mdelay或udelay里面配置的。
InitDelay会根据当前的系统时钟算出1ms或1us需要多少个count。在调用udelay或mdelay时,会参考这个值。
void udelay(uint32_t us)
{
    uint32_t tick = us * s_facus;

    SysTickRepeatDelay(tick / MAX_SYSTICK_COUNT, MAX_SYSTICK_COUNT);

    SysTickDelay(tick % MAX_SYSTICK_COUNT);
}

使用特权

评论回复
地板
| 2019-7-16 13:17 | 只看该作者
marginer 发表于 2019-7-16 12:09
initdelay在干啥,初始化定时器?

初始化SysTick定时器,用于delay延时;必须在调用AC781x库封装的延时函数之前,调用InitDelay()。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表