【电路笔记 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)控制。这允许为不同的外设设置合适的时钟频率,从而优化性能和功耗。
看门狗
工作原理
- 看门狗定时器从预设值开始递减计数。
- 如果计数到零且未刷新,触发复位或中断。
- 系统通过定期向看门狗写入特定值来“喂狗”(清除计数器),以防止溢出。
相关寄存器
- 常见外设及其时钟特性:
外设模块 | 时钟来源 | 时钟配置寄存器 | 特性及应用 |
---|---|---|---|
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.csdn.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.5MHz−1=100−1=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.csdn.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×512≈2.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;
}
注意事项
- PLL 稳定性:
- 在修改 PLL 配置后,必须等待 PLL 锁定,避免系统时钟不稳定。
- 时钟抖动:
- 对于 ADC 等高精度模块,输入时钟必须稳定,推荐使用外部晶振。
- 功耗管理:
- 未使用的外设可以通过关闭其时钟降低功耗。
- 外设时钟限制:
- 部分外设有最大时钟频率要求(如 I2C 最大 12 MHz)。