[技术问答]

AC781X MCU平台如何实现延时功能?

[复制链接]
797|3
手机看帖
扫描二维码
随时随地手机跟帖
AutochipsMCU|  楼主 | 2019-7-16 12:05 | 显示全部楼层 |阅读模式
本帖最后由 AutochipsMCU 于 2019-7-16 12:05 编辑

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

使用特权

评论回复

相关帖子

marginer| | 2019-7-16 12:09 | 显示全部楼层
initdelay在干啥,初始化定时器?

使用特权

评论回复
AutochipsMCU|  楼主 | 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);
}

使用特权

评论回复
TechHolder| | 2019-7-16 13:17 | 显示全部楼层
marginer 发表于 2019-7-16 12:09
initdelay在干啥,初始化定时器?

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:合肥杰发科技有限公司
简介:四维图新全资子公司 全球多地布局;专注于汽车电子芯片及相关系统的研发与设计 车规级芯片覆盖整车;客户遍及海内外 全球超过8000万辆车搭载杰发科技芯片。

59

主题

268

帖子

7

粉丝