"); //-->
主要就是说明:us 延时的实现。方法是时钟摘取法。
RT-Thread 定时器的最小精度是由系统时钟节拍所决定的(1 OS Tick = 1/RT_TICK_PER_SECOND 秒,RT_TICK_PER_SECOND 值在 rtconfig.h 文件中定义),定时器设定的时间必须是 OS Tick 的整数倍。当需要实现更短时间长度的系统定时时,例如 OS Tick 是 10ms,而程序需要实现 1ms 的定时或延时,这种时候操作系统定时器将不能够满足要求,只能通过读取系统某个硬件定时器的计数器或直接使用硬件定时器的方式。
在 Cortex-M 系列中,SysTick 已经被 RT-Thread 用于作为 OS Tick 使用,它被配置成 1/RT_TICK_PER_SECOND 秒后触发一次中断的方式,中断处理函数使用 Cortex-M3 默认的 SysTick_Handler 名字。在 Cortex-M3 的 CMSIS(Cortex Microcontroller Software Interface Standard)规范中规定了 SystemCoreClock 代表芯片的主频,所以基于 SysTick 以及 SystemCoreClock,我们能够使用 SysTick 获得一个精确的延时函数,如下例所示,Cortex-M3 上的基于 SysTick 的精确延时(需要系统在使能 SysTick 后使用):
高精度延时的例程如下所示:
/**
* This function will delay for some us.
*
* @param us the delay time of us
*/
void rt_hw_us_delay(rt_uint32_t us)
{
rt_uint32_t start, now, delta, reload, us_tick;
start = SysTick->VAL;
reload = SysTick->LOAD;
us_tick = SystemCoreClock / 1000000UL;//比如系统时钟频率是80M 那么1us 需要80个周期
do {
now = SysTick->VAL;
delta = start > now ? start - now : reload + start - now;//是倒数 还是正数
} while(delta < us_tick * us);
}QQ群:嵌入式进阶,271882374,期待和大家交流。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
用PROTEL99SE布线的基本流程.
高管离职潮持续,特斯拉Cybertruck、Model Y项目负责人相继离职
中汽创智发布 “人 - 车 - 路 - 云 - 星” 平台 车路云一体化战略落地发布
在51下的外挂硬盘和FLASH的MP3方案程序以及原理图
四通道热电偶集成冷端补偿与多项式线性化功能
LM4912立体声音频功率放大器
LM4901音频功率放大电路(MSOP封装)
AMD在两家公司改革合作伙伴计划时给英特尔施加渠道压力
三菱FX系列PLC教程 26 —— FX系列的步进指令
LM4819音频功率放大电路
LM4912用于双声道的放大电路
三菱FX系列PLC教程 30 —— FX系列的BIN码变换指令
公投!
硬盘的DOS管理结构
带插入式I/O的Zynq UltraScale+MPSoC模块
英特尔人工智能领导者Sachin Katti将加入OpenAI
自动级 4 端子分流电阻器提供精确检测
英飞凌推出全新软件开发集成工具AURIX™ Configuration Studio
Molex为先进汽车系统提供高性能连接的高速FAKRA-Mini(HFM)互连系统在贸泽开售
投资怎样取得高收益
三菱FX系列PLC教程 28 —— FX系列的BCD变换指令
LM4819高增益音频放大电路
三菱FX系列PLC教程 27 —— FX系列的编程软件的应用
周末愉快!----考试趣事![转帖]
三菱FX系列PLC教程 29 —— FX系列的步进指令应用
语音单片机59UT512原理图
日本两颗间谍卫星发射失败 运载火箭被引爆
FURY Renegade G8系列NVMe SSD中添加了5TB选项
布什秘密访问巴格达给驻伊美军带来什么
语音识别集成电路AP7003及其应用