【电路笔记 TMS320F28335DSP】时钟+看门狗+相关寄存器(功能模块使能、时钟频率配置、看门狗配置)

时钟源和主时钟(SYSCLKOUT)

  • 外部晶振:通常使用外部晶振(如 20 MHz)作为主要时钟源。
  • 内部振荡器:还可以选择内部振荡器(INTOSC1 和 INTOSC2),适合无需高精度外部时钟的应用。
  • PLL(锁相环)
    • 提供倍频功能,将外部晶振频率倍增以生成更高的系统时钟频率。
    • TMS320F28335 的最大系统频率为 150 MHz
    • 配置时需要通过 PLLCR 寄存器设置倍频因子,同时需要注意锁定时间。

在这里插入图片描述

请添加图片描述

内部时钟

请添加图片描述
请添加图片描述

锁相环

  • 锁相环或锁相环 (PLL) 是一种控制系统,可生成输出信号,其相位相对于输入信号的相位是固定的。保持 input 和 output 相位为 lockstep 也意味着保持 input 和 output 频率相同,因此锁相环也可以跟踪 input 频率。通过集成分频器,PLL 可以产生一个稳定的频率,该频率是输入频率的倍数。
    • 这些 properties 用于 clock synchronization, demodulation, frequency synthesis, clock multipliers,以及从嘈杂的通信通道恢复信号。自 1969 年以来,单个集成电路可以提供完整的 PLL 构建块,如今的输出频率从几十赫兹到几千兆赫兹不等。因此,PLL 广泛用于无线电、电信、计算机(例如在微处理器中分配精确定时的时钟信号)、并网逆变器(用于将直流可再生资源和存储元件(如光伏和电池)与电网集成的电子电源转换器)和其他电子应用。

    • 相关器件:锁频环 (FLL) 是一种电子控制系统,可生成锁定到输入或 “参考” 信号频率的信号。[1]该电路将受控振荡器的频率与参考频率进行比较,自动升高或降低振荡器的频率,直到其频率(但不一定是相位)与参考频率匹配。

请添加图片描述

外设时钟

  • 外设时钟由 SYSCLKOUT 分频后提供,通过寄存器(HISPCP、LOSPCP)控制。这允许为不同的外设设置合适的时钟频率,从而优化性能和功耗。

请添加图片描述
请添加图片描述
请添加图片描述

看门狗

请添加图片描述

工作原理

  1. 看门狗定时器从预设值开始递减计数。
  2. 如果计数到零且未刷新,触发复位或中断。
  3. 系统通过定期向看门狗写入特定值来“喂狗”(清除计数器),以防止溢出。

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

相关寄存器

请添加图片描述

  • 常见外设及其时钟特性:
外设模块 时钟来源 时钟配置寄存器 特性及应用
ADC SYSCLKOUT 或其分频信号 ADCCTL2.ADCNONOVERLAP 时钟速率决定采样频率,最大速率 12.5 MSPS
ePWM SYSCLKOUT - 驱动电机、PWM 控制信号
eQEP/eCAP SYSCLKOUT 或外部时钟 - 编码器接口、捕获输入事件
SPI SYSCLKOUT 分频 SPIBRR 最大速率取决于时钟源配置
I2C SYSCLKOUT 分频 I2CPSC/I2CCLKL/I2CCLKH 时钟决定 I2C 的速率(如 100kHz)
UART SYSCLKOUT 分频 SCIHBAUD/SCILBAUD 配置波特率分频器
CAN SYSCLKOUT 或外部时钟 CANBTC 用于工业通信

请添加图片描述
请添加图片描述

时钟管理寄存器

寄存器名称 功能描述
PLLSTS 控制和监测 PLL 的状态
HISPCP 配置高速外设(如 SPI)的时钟分频值。
LOSPCP 用于设置低速外设(如 ePWM、eCAP)的时钟分频值。
PLLCR 配置 PLL 倍频因子
SYSCTL_REGS 提供外设启用/禁用和时钟配置的寄存器
XCLKOUT 配置外部时钟输出的频率和信号

外设时钟配置示例

功能模块使能配置

请添加图片描述

设置 HISPCP

请添加图片描述
请添加图片描述

150 / 6 = 25 M 150/6=25 M 150/6=25M

设置 SPI 时钟

SpiaRegs.SPIBRR = 0x63; //波特率=150M/4/100=375K https://blog.****.net/qq_17525633/article/details/103145686

SPI 波特率由以下公式计算:

波特率 = SPI 模块时钟频率 (SPI Clock) SPIBRR 值 + 1 \text{波特率} = \frac{\text{SPI 模块时钟频率 (SPI Clock)}}{\text{SPIBRR 值 + 1}} 波特率=SPIBRR  + 1SPI 模块时钟频率 (SPI Clock)

其中:

  • SPI 模块时钟频率 是由系统时钟(SYSCLKOUT)分频得到,公式为:
    SPI 模块时钟频率 = SYSCLKOUT SPI 时钟分频器 \text{SPI 模块时钟频率} = \frac{\text{SYSCLKOUT}}{\text{SPI 时钟分频器}} SPI 模块时钟频率=SPI 时钟分频器SYSCLKOUT

  • 分频器配置:SPI 模块时钟的分频因子由 HISPCP 寄存器配置。在本例中,分频值为 4:
    SPI 模块时钟频率 = 150   MHz 4 = 37.5   MHz \text{SPI 模块时钟频率} = \frac{150\, \text{MHz}}{4} = 37.5\, \text{MHz} SPI 模块时钟频率=4150MHz=37.5MHz

SPIBRR = 37.5   MHz 375   kHz − 1 = 100 − 1 = 99 \text{SPIBRR} = \frac{37.5 \, \text{MHz}}{375 \, \text{kHz}} - 1 = 100 - 1 = 99 SPIBRR=375kHz37.5MHz1=1001=99

99 转换为十六进制:
SPIBRR = 0 x 63 \text{SPIBRR} = 0x63 SPIBRR=0x63

配置 ADC 时钟为 25 MHz:

  • 确保 SYSCLKOUT 设置为 150 MHz。
  • 配置分频因子为 6:
    AdcRegs.ADCCTL2.bit.PRESCALE = 6; // 设置 ADC 时钟分频,https://blog.****.net/weixin_40785694/article/details/95944219
    

看门狗示例

看门狗配置
看门狗通过 System Control Register(系统控制寄存器组)进行配置。以下是关键寄存器:

寄存器名称 功能描述
WDCR (看门狗控制寄存器) 控制看门狗启停、分频和模式设置
WDCNTR 看门狗计数器值
WDKEY 写入特定密钥以喂狗
  • WDENINT(看门狗中断使能)
    • 1:触发中断,而不是复位。
    • 0:直接复位系统。
  • WDCHK:写保护,看门狗启用后不能随意更改。
  • WDPS:设置看门狗计时器的分频。

时钟来源和计数周期

  • 看门狗计数器的时钟来源为 SYSCLKOUT,通过分频器配置。计数周期计算公式为:

超时时间 = 看门狗时钟周期 × 2 16 分频因子 \text{超时时间} = \frac{\text{看门狗时钟周期} \times 2^{16}}{\text{分频因子}} 超时时间=分频因子看门狗时钟周期×216

例:

  • SYSCLKOUT = 150 MHz

  • 分频因子 = 512(WDPS 设置为 101)

  • 则看门狗超时时间为:
    超时时间 = 1 150 × 1 0 6 × 2 16 × 512 ≈ 2.23   ms \text{超时时间} = \frac{1}{150 \times 10^6} \times 2^{16} \times 512 \approx 2.23 \, \text{ms} 超时时间=150×1061×216×5122.23ms

典型用法

禁用看门狗
  • 通常在调试阶段会禁用看门狗:

请添加图片描述

void DisableWatchdog(void) {
    EALLOW;
    SysCtrlRegs.WDCR = 0x68; // 禁用看门狗,0x68 的二进制表示为 0110 1000,按照3到6位的约束设置
    EDIS;
}

请添加图片描述

初始化看门狗
void InitWatchdog(void) {
    EALLOW; // 允许写入受保护寄存器

    SysCtrlRegs.WDCR = 0x28; // 启用看门狗,分频因子 512
    EDIS;   // 禁止写入受保护寄存器
}
喂狗(刷新看门狗计数器)
void ServiceWatchdog(void) {
    EALLOW;
    SysCtrlRegs.WDKEY = 0x55; // 写入第一密钥
    SysCtrlRegs.WDKEY = 0xAA; // 写入第二密钥完成喂狗
    EDIS;
}

请添加图片描述

看门狗中断模式

在一些应用中,可以将看门狗设置为触发中断,而不是复位系统。此时:

  • 设置 WDENINT 位。
  • 在中断服务例程中处理溢出逻辑。

示例代码:

interrupt void WatchdogISR(void) {
    // 用户代码:处理看门狗溢出
}

void EnableWatchdogInterrupt(void) {
    EALLOW;
    SysCtrlRegs.SCSR = 0x1; // 启用看门狗中断模式
    PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // 使能 PIE 看门狗中断
    EDIS;
}

注意事项

  1. PLL 稳定性
    • 在修改 PLL 配置后,必须等待 PLL 锁定,避免系统时钟不稳定。
  2. 时钟抖动
    • 对于 ADC 等高精度模块,输入时钟必须稳定,推荐使用外部晶振。
  3. 功耗管理
    • 未使用的外设可以通过关闭其时钟降低功耗。
  4. 外设时钟限制
    • 部分外设有最大时钟频率要求(如 I2C 最大 12 MHz)。
上一篇:wordpress获取文章总数、分类总数、tag总数等


下一篇:Vue3 + Pinia:批量修改数据的终极指南