0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32L083如何实现AUTOTRIM时钟校准?

jf_pJlTbmA9 来源:武汉芯源半导体 作者:武汉芯源半导体 2023-11-07 17:17 次阅读

MCU中的HSIOSC和LSI时钟信号是通过内部RC振荡器产生的,该时钟信号可能会受到外界因素比如温度等的影响,使其频率在一定范围内产生误差。CW32L083可以通过AUTOTRIM的时钟校准定时器模式来对LSI和HSIOSC进行自动实时时钟校准,获得精度更高的时钟信号。

HSIOSC时钟校准模式

设置 AUTOTRIM_CR.MD 为 0x00,使定时器工作于 HSIOSC 校准模式。该模式支持自动实时校准HSIOSC的输出频率,使 HSIOSC 输出频率的精度不再受环境变化影响。

HSIOSC 时钟校准,需要向定时器提供一个精准的低频参考时钟,其来源可以是 LSE 或外部 ETR 引脚输入的低速精准时钟信号,通过控制寄存器 AUTOTRIM_CR 的 SRC 位域进行选择。

HSIOSC 校准模式的功能框图如下图所示:

poYBAGMj5iyAHda3AACK8WZRn2U332.jpg

设置 AUTOTRIM_CR.AUTO 为 1 使能自动校准,设置 AUTOTRIM_CR.EN 为1 使能定时器,开始自动校准流程。自动校准开始工作后,计数值寄存器AUTOTRIM_CNT 在每个 GCLK 时钟周期内对 HSIOSC 时钟 TCLK 从重载值 ARR 开始递减计数,计数到 0 后开始递增计数。当计数器已运行 1.5 倍 ARR 周期,计数器停止运行,同时 AUTOTRIM_ISR.MISS 标志位被硬件置 1,表示计数失败。每当 GCLK 时钟上升沿到达时,计数器重新开始从 ARR 递减计数。

如果 GCLK 时钟周期内,计数器的计数值大于误差允许值 AUTOTRIM_FLIM,寄存器TrimCode 会自动调整,直到计数器的计数值小于误差允许值 AUTOTRIM_FLIM,同时 AUTOTRIM_ISR.OK 标志位会被硬件置 1,表示校准精度已达标,此时可读取 TrimCode 寄存器并写入 SYSCTRL_HSI.TRIM,以校准 HSIOSC 时钟频率。

TrimCode 寄存器最大可调整为 0x1FF,故 TrimCode 值写入 SYSCTRL_HSI.TRIM 时,需根据 TRIM 位域的初始校 准值写入最高 2bit。代码示例如下:

CW_SYSCTRL->HSI = (CW_SYSCTRL->HSI 0xFE00) | CW_AUTOTRIM->TVAL;

误差允许值 FLIM 在设置重载值 ARR 时自动配置,校准精度为 0.4%,用户不可写入。重载寄存器 AUTOTRIM_ARR 设置公式如下:

ARR = TCLK×2PRS/RCLK-1

其中,RCLK 为参考时钟源,PRS 为预分频系数,TCLK 为计数时钟源 HSIOSC 时钟,这一部分是需要我们去配置的。

例:当参考时钟源 RCLK 为 LSE(时钟频率为 32768Hz),预分频系数 PRS 为 0x1 时,校准 HSIOSC 时钟频率为 48MHz,计算

ARR = 48000000×21 /32768-1 = 2928.6875

最接近的整数是:2929(0xB71)

即需要设置 AUTOTRIM_ARR 为 0xB71。

HSIOSC时钟校准编程示例

通过上节的模式设置介绍我们可以根据其配置AUTOTRIM的HSIOSC的实时时钟校准模式,HSIOSC 时钟校准流程如下,当选择参考时钟源为 LSE 时,步骤 1 和步骤 2 不需要执行:

步骤 1:设置外设时钟使能控制寄存器 SYSCTRL_AHBEN 的相关位为 1,使能AUTOTRIM_ETR 对应 GPIO 端口的配置时钟及工作时钟;

步骤 2:设置 GPIO 复用功能寄存器 GPIOx_AFRH 和 GPIOx_AFRL 的相关位,配置对应引脚为 AUTOTRIM 定时器的 AUTOTRIM_ETR 功能;

步骤 3:设置外设时钟使能控制寄存器 SYSCTRL_APBEN2.AUTOTRIM 为 1,打开 AUTOTRIM 模块的配置时钟;

步骤 4:设置 AUTOTRIM_CR.MD 为 0x00,使定时器工作于 HSIOSC 时钟校准模式;

步骤 5:配置控制寄存器 AUTOTRIM_CR.OST,选择实时校准模式或单次校准模式;

步骤 6:配置控制寄存器 AUTOTRIM_CR.SRC,选择 AUTOTRIM 参考时钟源为LSE;

步骤 7:配置控制寄存器 AUTOTRIM_CR.PRS,选择 AUTOTRIM 参考时钟分频系数;

步骤 8:根据上节HSIOSC时钟校准模式ARR 配置公式,设置重载值寄存器 AUTOTRIM_ARR,自动配置 校准精度为 0.4%;

步骤 9:设置 AUTOTRIM_CR.AUTO 为 1,使能自动校准;

步骤 10:设置 AUTOTRIM_CR.EN 为 1,使能定时器,开始自动校准;

步骤 11:查询等待 AUTOTRIM_ISR.END 和 AUTOTRIM_ISR.OK 标志位置 1,自动校准完成且精度达标;

步骤 12:读取 TrimCode 寄存器,并将 TrimCode 值写入 SYSCTRL_HSI.TRIM。

代码示例:

CW_SYSCTRL->HSI = (CW_SYSCTRL->HSI 0xFE00) | CW_AUTOTRIM->TVAL;

具体的寄存器配置可以参考CW32L083用户手册的时钟校准定时器(AUTOTRIM)章节。在上述的一系列校准步骤配置完之后,我们就可以通过示波器或者万用表来读取开发板的HSIOSC的频率输出,会发现在不同的温度影响下,MCU会自动校准HSIOSC的时钟频率。通过对比会发现,用AUTOTRIM自动校准模式之后的HSIOSC会比没有用AUTOTRIM的HSIOSC的精度更高,误差更小。

LSI时钟校准

设置 AUTOTRIM_CR.MD 为 0x01,使定时器工作于 LSI 校准模式。该模式支持自动实时校准 LSI 的输出频率,使 LSI 输出频率的精度不再受环境变化影响。

LSI 时钟校准,需要向定时器提供一个精准的高频计数时钟,其来源可以是 HSE 或外部 ETR 引脚输入的高速精准时钟信号,通过控制寄存器 AUTOTRIM_CR 的 SRC 位域进行选择。

LSI校准模式的功能框图如下图所示:

pYYBAGMj5iyAf265AABICTXJh8Y768.jpg

设置 AUTOTRIM_CR.AUTO 为 1 使能自动校准,设置 AUTOTRIM_CR.EN 为 1 使能定时器,开始自动校准流程。

自动校准开始工作后,计数值寄存器 AUTOTRIM_CNT 在每个 GCLK 时钟周期内对计数时钟 TCLK 从重载值 ARR 开始递减计数,计数到0后开始递增计数。当计数器已运行1.5倍ARR 周期,计数器停止运行,同时 AUTOTRIM_ISR.MISS 标志位被硬件置1,表示计数失败。每当 GCLK 时钟上升沿到达时,计数器重新开始从 ARR 递减计数。

如果 GCLK 时钟周期内,计数器的计数值大于误差允许值 AUTOTRIM_FLIM,则寄存器TrimCode会自动调整,直到计数器的计数值小于误差允许值 AUTOTRIM_FLIM,同时 AUTOTRIM_ISR.OK 标志位会被硬件置 1,表示校准精度 已达标,此时可读取 TrimCode 寄存器并写入 SYSCTRL_LSI.TRIM,以校准 LSI 时钟频率。具体的代码配置可以参考下节的步骤12的代码示例。

TrimCode 寄存器最大可调整为0x1FF,故 TrimCode 值写入 SYSCTRL_LSI.TRIM 时,需根据 TRIM 位域的初始校 准值写入最高 1bit。

代码示例如下:

CW_SYSCTRL->LSI = (CW_SYSCTRL->LSI 0xFE00) | CW_AUTOTRIM->TVAL;

误差允许值 FLIM 在设置重载值 ARR 时自动配置,校准精度为 0.4%,用户不可写入。重载寄存器 AUTOTRIM_ARR 设置公式如下:

ARR = TCLK×2PRS/RCLK-1

其中,RCLK 为 LSI 时钟,PRS 为预分频系数,TCLK 为计数时钟源。

例:当计数时钟源 TCLK 为 HSE(时钟频率为 16MHz),预分频系数 PRS 为 0x1 时,校准 LSI 时钟频率为 32kHz,计算

ARR = 16000000×21 /32000-1 = 999

即需要设置 AUTOTRIM_ARR 为 0x3E7。

LSI时钟校准编程示例

通过上节的模式设置介绍我们可以根据其配置AUTOTRIM的LSI的实时时钟校准模式,LSI 时钟校准流程如下,当选择计数时钟源为 HSE 时,步骤 1 和步骤 2 不需要执行:

步骤 1:设置外设时钟使能控制寄存器 SYSCTRL_AHBEN 的相关位为 1,使能 AUTOTRIM_ETR 对应 GPIO 端口的 配置时钟及工作时钟;

步骤 2:设置 GPIO 复用功能寄存器 GPIOx_AFRH 和 GPIOx_AFRL 的相关位,配置对应引脚为 AUTOTRIM 定时器 的 AUTOTRIM_ETR 功能;

步骤 3:设置外设时钟使能控制寄存器 SYSCTRL_APBEN2.AUTOTRIM 为 1,打开 AUTOTRIM 模块的配置时钟;

步骤 4:设置 AUTOTRIM_CR.MD 为 0x01,使定时器工作于 LSI 时钟校准模式;

步骤 5:配置控制寄存器 AUTOTRIM_CR.OST,选择实时校准模式或单次校准模式;

步骤 6:配置控制寄存器 AUTOTRIM_CR.SRC,选择 AUTOTRIM 计数时钟源HSE;

步骤 7:配置控制寄存器 AUTOTRIM_CR.PRS,选择 AUTOTRIM 参考时钟分频系数;

步骤 8:根据 11.3.3 LSI 时钟校准小节 ARR 配置公式,设置重载值寄存器 AUTOTRIM_ARR,自动配置校准精度 为 0.4%;

步骤 9:设置 AUTOTRIM_CR.AUTO 为 1,使能自动校准;

步骤 10:设置 AUTOTRIM_CR.EN 为 1,使能定时器,开始自动校准;

步骤 11:查询等待 AUTOTRIM_ISR.END 和 AUTOTRIM_ISR.OK 标志位置 1,自动校准完成且精度达标;

步骤 12:读取 TrimCode 寄存器,并将 TrimCode 值写入 SYSCTRL_LSI.TRIM。

代码示例:

CW_SYSCTRL->LSI = (CW_SYSCTRL->LSI 0xFE00) | CW_AUTOTRIM->TVAL

来源:武汉芯源半导体


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16022

    浏览量

    343676
  • 时钟
    +关注

    关注

    10

    文章

    1480

    浏览量

    130306
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112050
  • CW32
    +关注

    关注

    1

    文章

    122

    浏览量

    232
收藏 人收藏

    评论

    相关推荐

    基于CW32L083的线控器方案设计

    基于武汉芯源推出的CW32L083设计的空调线控器产品.
    的头像 发表于 06-25 14:23 1.1w次阅读
    基于<b class='flag-5'>CW32L083</b>的线控器方案设计

    CW32L083 RTC初始化设置

    介绍CW32L083的RTC初始化设置
    的头像 发表于 06-24 10:16 977次阅读
    <b class='flag-5'>CW32L083</b> RTC初始化设置

    CW32L083系列微控制器的ADC和DAC模块要如何使用?怎么配置?

    如何配置和使用CW32L083系列微控制器的ADC和DAC模块?
    发表于 01-17 06:08

    [技术手册] CW32L083数据手册

    CW32L083数据手册,PSMCU0116.pdf,Rev1.2
    发表于 05-31 16:13

    [技术手册] CW32L083用户手册

    CW32L083用户手册
    发表于 06-02 15:41

    武汉芯源Cortex-M0+ 32位低功耗MCU CW32L083系列产品介绍

    列表02 CW32L083系列功能优势1.深度休眠模式0.6uACW32L083系列产品在深度休眠模式下电流只有0.6uA(所有时钟关闭,上电复位有效,IO状态保持,IO中断有效,所有寄存器、RAM
    发表于 08-24 09:12

    武汉芯源CW32L083系列MCU在空气净化器的应用介绍

    中断;支持自动唤醒功能,可产生中断并通过引脚输出;支持 1Hz 方波和 RTCOUT 输出功能;支持内部时钟校准补偿。CW32L083内置经独立校准的 32.8kHz 频率的 RC
    发表于 10-13 16:57

    CW32L083系列MCU系统时钟详解

    性能,有的外设需要低速时钟降低功耗或提高抗干扰能力,因此单片机采用多种时钟源来解决此问题。下面将详细介绍如何配置CW32L083产品的系统时钟CW
    发表于 10-25 13:32

    CW32L083系列MCU中断系统介绍

    本文针对CW32L083系列MCU,同系列产品亦可参考。ARM® Cortex®-M0+ 内核的嵌套向量中断控制器 (NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟
    发表于 12-01 10:30

    CW32L083产品介绍

    CW32L083是一款基于eFlash的单芯片低功耗微控制器,集成了ARM®Cortex®-M0+ 核心,主频高达64MHz,高速嵌入式存储器(高达256K字节的FLASH和 高达24K字节
    发表于 09-14 06:41

    CW32L083微控制器数据手册

    CW32L083 是基于 eFlash 的单芯片低功耗微控制器,集成了主频高达 64MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 256K 字节 FLASH 和多至
    发表于 09-14 06:27

    CW32L083 StartKit软件包分享

    CW32L083 StartKit软件包
    发表于 09-15 07:00

    CW32L083 I2C主板发送编程示例

    CW32L083的I2C主机发送示例。
    的头像 发表于 06-09 16:54 17.9w次阅读

    CW32L083段码屏驱动

    CW32L083开发板上有8个段码LCD显示,使其显示为0-9数字。
    的头像 发表于 06-18 09:13 18w次阅读
    <b class='flag-5'>CW32L083</b>段码屏驱动

    CW32L083实现SHT30驱动

    CW32L083驱动SHT30,并显示到LCD屏上。
    的头像 发表于 06-22 09:57 2392次阅读
    <b class='flag-5'>CW32L083</b><b class='flag-5'>实现</b>SHT30驱动