当前位置: 首页 > news >正文

Telink 时钟模块

系统时钟(systemclock)是 MCU 执⾏程序的时钟

系统定时器(SystemTimer)是⼀个只读的定时器,为BLE的时序控制提供时间基准,同时也可以提供给⽤⼾ 使⽤。

在Telink 上⼀代IC(826x系列)上,SystemTimer的时钟来源于systemclock,⽽B85m系列IC上,System Timer 和 system clock 是独⽴分开的。如下图所⽰,SystemTimer是由外部24MCrystalOscillator 经 3/2 分 频得到的16M。

图上可以看到,system clock 可以由外部 24M 晶体振荡器经“doubler”电路倍频到 48M 后再分频得到 16M、 24M、32M、48M等,这⼀类clock我们称为crystalclock(如16Mcrystal system clock、24M crystal system clock);也可以由 IC 内部24MRCOscillator 处理后得到24MRCclock、32M RC clock、48M RC clock 等。这 ⼀类我们称为RCclock(BLESDK不⽀持RCclock)

上面可以看出:

1. system timer 和system clock 不一样,用户需要了解MCU上各个硬件模块的clock是来自于system clock 还是system tick。我们以system clock 为 24M crystal 的情况来进⾏说明,此时system clock 为 24M,⽽ System Timer 是 16M。

在⽂件app_config.h 中 system clock 以及对应的 s、ms、us 的定义如下:

#define CLOCK_SYS_CLOCK_HZ  24000000enum{CLOCK_SYS_CLOCK_1S = CLOCK_SYS_CLOCK_HZ,CLOCK_SYS_CLOCK_1MS = (CLOCK_SYS_CLOCK_1S / 1000),CLOCK_SYS_CLOCK_1US = (CLOCK_SYS_CLOCK_1S / 1000000),};

System Timer 是固定的 16M,所以对于这个timer,SDKcode中使⽤如下的数值来表⽰s、ms和us。

 //system timer clock source is constant 16M, never change 
enum{ CLOCK_16M_SYS_TIMER_CLK_1S = 16000000, CLOCK_16M_SYS_TIMER_CLK_1MS = 16000, CLOCK_16M_SYS_TIMER_CLK_1US = 16, 
}

由于SystemTimer 是 BLE 计时的基准,SDK中所有BLE时间相关的参数和变量,在涉及到时间的表达时,都 是⽤”CLOCK_16M_SYS_TIMER_CLK_xxx” 的方式。

System Timer 的使⽤

System Timer tick 的读取可以通过 clock_time() 函数获得:

u32 current_tick = clock_time();

BLE SDK 整个BLE 时序都是基于SystemTimer tick 设计的,程序中也⼤量使⽤这个SystemTimertick 来完 成各种计时和超时判断,强烈推荐user使⽤这个SystemTimertick来实现⼀些简单的定时和超时判断。

⽐如要实现⼀个简单的软件定时。软件定时器的实现基于查询机制,由于是通过查询来实现,不能保证⾮常好 的实时性和准备性,⼀般⽤于对误差要求不是特别苛刻的应⽤。实现⽅法: (1) 启动计时:设置⼀个u32的变量,读取并记录当前SystemTimertick。

u32 start_tick = clock_time(); // clock_time() returns System Timer tick value

假设需要定时的时间为100ms,查询计时是否到达的写法为:

if( (u32) ( clock_time()- start_tick) > 100 * CLOCK_16M_SYS_TIMER_CLK_1MS)

实际上SDK中为了解决系统时钟不同导致和u32转换的问题,提供了统⼀的调⽤函数,不管系统时钟多少,都 可以下⾯函数进⾏查询判断:

if( clock_time_exceed(start_tick, 100 * 1000)) //第⼆个参数单位为 us

需要注意的是:由于16MHz时钟转⼀圈为268秒,这个查询函数只适⽤于268秒以内的定时。如果超过268 秒,需要在软件上加计数器累计实现(这⾥不介绍)。 应⽤举例:A条件触发(只会触发⼀次)的2秒后,程序进⾏B()操作

 u32 a_trig_tick;int a_trig_flg = 0;while(1){if(A){a_trig_tick = clock_time();a_trig_flg = 1;}if(a_trig_flg && clock_time_exceed(a_trig_tick,2 *1000 * 1000)){a_trig_flg = 0;B();}}

总结

Telink采用24MHz系统时钟 + 16MHz系统定时器这种不对称设计的主要原因:

  1. 功耗优化:16MHz RC振荡器比24MHz PLL方案功耗显著更低

  2. 精度需求:16MHz为定时器提供62.5ns分辨率,满足大多数应用需求

  3. 成本控制:避免为定时器也使用复杂的PLL时钟生成电路

  4. 系统稳定性:定时器使用独立时钟源,不受系统时钟调节影响

  5. 射频时序:16MHz更便于BLE等射频协议的精确时序控制

  6. 外设兼容性:24MHz便于生成各种标准外设时钟频率

这种设计在性能、功耗和成本之间取得了最佳平衡,特别适合物联网设备对低功耗和成本敏感的应用场景。

http://www.dtcms.com/a/508471.html

相关文章:

  • 阿尔茨海默病早期症状影像分类数据集
  • 网站首页的快照更新慢如何服务器ip地址做网站
  • 计算机网站开发参考文献绥德网站建设设计
  • Android 多语言切换最佳实践:从原理到封装与优化
  • 深圳微网站搭建爱站网络科技有限公司
  • 东莞网站设计公司建网站科技公司
  • 网站提供入口开发公司一季度汇报
  • 伤寒杂病论
  • 性能测试 | 性能测试工具Jmeter的认识和基础使用
  • 网站建设实现后台数据导出excel如何用asp编写网站后台
  • 宿迁哪家做网站好做学校教务处网站
  • PS插件大全:人像修图/调色特效/字体管理/抠图合成超全工具包,设计师效率直接拉满
  • 外卡收单那点事儿之Visa篇(10)
  • 有个做图片mv的网站56wordpress博客排行
  • 企业网上年检在网站怎么做做装修哪个网站推广好
  • STM32F103C8T6--深入GPIO
  • 国家级!悬镜安全入选两项“网络安全国家标准应用实践案例”
  • 影视网站建设策划文案万源网站建设
  • Java集合操作实战:List工人管理
  • C#高级:数据库中使用SQL作分组处理4(LAG() 偏移函数)
  • 福州手游网站建设c2c电商平台有哪几个
  • 做pvc卡片的交流网站wordpress移除头部无用
  • 怎么搭建一个自己的网站洛阳做公司网站
  • 简述营销型企业网站建设的内容wordpress小店主题
  • 崩溃信息追溯——backward-cpp
  • 怎么找网站帮我做推广wordpress加入下载标签
  • 深度学习实验二 简单神经网络模型构建
  • IP 汇总名单
  • 同城购物网站建设成本有人上相亲网站做传销燕窝
  • P7073 [CSP-J2020] 表达式