[PIC®/AVR®/dsPIC®产品] ATtiny817 Xplained 开发板时钟配置方法

[复制链接]
1229|7
 楼主| gejigeji521 发表于 2024-3-25 19:09 | 显示全部楼层 |阅读模式
ATtiny817 中的时钟控制器负责处理所有与时钟相关的操作。以下是时钟控制器的一些功能

我将使用 20MHz 和 32.768KHz 的内部振荡器(如果某些功能需要)。预分频器可用于根据需要划分时钟。
时钟图如下所示

蓝线用于内部20MHz时钟源,绿线用于内部32.768KHz CLK源。我们可以使用这 2 个振荡器对一切进行计时。
在今天的教程中,我们将闪烁 LED,因此我将使用内部 20MHz 振荡器。
时钟控制部分的第一个寄存器是主时钟控制 A (MCLKCTRLA)


要设置内部20MHz振荡器,我们需要将0写入MCLKCTRLA寄存器的CLKSL (1:0)位。此外,寄存器的第 7 位会配置是否需要 CLKOUT 引脚上的时钟输出。我保持它为 0,因为我不需要时钟输出。

此寄存器具有配置更改保护 (CCP)。这意味着我们不能将数据直接写入寄存器。我们需要使用 _PROTECTED_WRITE 函数进行编写,如下图所示。


  1. void clkInit(void)
  2. {
  3.         _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, 0);  // Internal 20MHz OSC, CLKOUT=0
我为时钟配置创建了一个新函数 clkInit。此外,我正在配置值为 0 的 MCLKCTRLA 寄存器。
下一个寄存器是主时钟控制 B (MCLKCTRLB)。该寄存器可用于控制主时钟的预分频器。预分频器进一步将时钟与振荡器分开,并根据用户的要求进行设置。

此寄存器的第 0 位 (PEN) 启用/禁用预分频器。我通过将位设置为 1 来启用预分频器。
PDIV 位 (4:1) 用于设置预分频器值。我们内部振荡器的主时钟为20MHz。我正在使用 4 的预分频器将主时钟降低到 20/4=5MHz。
要将预分频器设置为 4,我们需要将 0x1 写入 PDIV 位,要启用预分频器,我们需要将 1 写入 PEN 位。我们该寄存器的最终数据是 0 0 0 1 1(0x03)。

  1. _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0x03);  // PEN=1, DIV=4
接下来,我们对主时钟状态寄存器(MCLKSTATUS)感兴趣。该寄存器可用于检查各种振荡器的状态。

对于20MHz的内部振荡器,位OSC20MS(位4)指示振荡器是否稳定。
我们将等待此位设置为 1,以确保振荡器稳定。
  1. while ((CLKCTRL.MCLKSTATUS & (1<<4)) == 0);  // wait for the osc to stabilize.
  2. }



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| gejigeji521 发表于 2024-3-25 19:09 | 显示全部楼层
在这里,我将 CPU 时钟定义为 5 MHz。此外,我还包含了延迟库,以便延迟函数工作。
稳稳の幸福 发表于 2024-3-26 19:28 | 显示全部楼层
这个系列都很小是吧,适用于比较简单的项目。
蝶弄美人簪 发表于 2026-1-22 16:32 | 显示全部楼层
可通过 MCC 图形化配置或寄存器编程:先选时钟源(内部 20MHz 振荡器 / 外部晶振),配置 CLKCTRL 寄存器设置分频系数,启用对应的时钟源并等待稳定标志;若用外部晶振,需配置 PORT 引脚为输入并设置晶振驱动强度;最后验证 CLKSTATUS 寄存器确认时钟切换成功,注意避免高频时钟下未配置看门狗导致复位。
总结
可选内部振荡器 / 外部晶振,通过 CLKCTRL 配置分频与使能;
外部晶振需配置引脚与驱动强度;
验证时钟状态,注意高频时钟的看门狗配置。
643757107 发表于 2026-1-23 16:14 | 显示全部楼层
内部 20MHz 振荡器 (OSC20M):默认启用,精度 ±2%,无需外部元件,适合快速开发。
小灵通2018 发表于 2026-1-27 10:46 | 显示全部楼层
ATtiny817 时钟配置核心是通过 CLKCTRL 寄存器组,且必须用 _PROTECTED_WRITE() 解锁写保护。
少女诗篇 发表于 2026-2-3 09:39 | 显示全部楼层
ATtiny817 Xplained 开发板时钟可通过 Atmel Studio/Microchip Studio 配置:打开项目熔丝位设置,选时钟源(如 20MHz 内部 OSC、外部晶振),配置分频系数,禁用不需要的时钟以节能;也可通过 CLKCTRL 寄存器代码编程配置,无需烧写熔丝,灵活适配不同主频需求
您需要登录后才可以回帖 登录 | 注册

本版积分规则

199

主题

3323

帖子

8

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