LMK04828 时钟PLL计算程序是一款用于快速配置TI(德州仪器)高性能时钟发生器芯片 LMK04828 的辅助工具。该程序通过自动化计算锁相环(PLL)参数、分频器设置及输出时钟配置,大大简化复杂时钟树的设计流程,相比于传统设计流程,该程序可以在嵌入式端完成快速配置计算和配置,并对配置进行现场计算和写入。适用于通信、测试设备、雷达系统等需要多路低抖动时钟的场景。
结构体 | 描述 |
---|---|
LMK_Simple | 时钟树参数需求结构体。 |
LMK_Generated | 时钟树关键时钟节点参数结构体。 |
LMK_Config | 时钟树寄存器及接口参数结构体。 |
LMK_RegMap | 时钟树寄存器表。 |
LMK_ClockPair | 时钟树输出通道寄存器表。 |
LMK_ReadBack | 时钟树状态回读结构体。 |
下图展示了各个结构体之间的关系。
首先包含相关头文件,声明所需的结构体。
#include "LMK_ClockTree.h"
LMK_Config LMK_inst;
LMK_Simple LMK_simple;
设置参考时钟速率,单位Hz。
// Set reference clock rate
LMK_simple.RefClockRate = 30720000;
设置VCOX时钟速率,单位Hz。
// Set expected VCO clock rate
LMK_simple.VCOXClockRate = 122880000;
设置SYSREF时钟速率,单位Hz。
// Set SYSREF
LMK_simple.SYSREFRate = 7680000;
设置输出时钟速率,单位Hz,配置为0则关闭对应通道,默认为关闭。
// DClockRate[n] for DCLKout(2n), the SDCLKout(2n+1) are all set to SYSREF
LMK_simple.DClockRate[0] = 491520000;
LMK_simple.DClockRate[1] = 491520000;
LMK_simple.DClockRate[2] = 491520000;
配置接口指针。
// Config the interface instance for LMK
LMK_simple.InterfaceInst = &SPI_inst;
根据配置数据计算寄存器值。
// Generate config using LMK_simple
LMK_ConfigMake(&LMK_inst, &LMK_simple);
初始化寄存器。
// Download to LMK
LMK_Init(&LMK_inst);
__weak int LMK_CalPLL1CommonRate(LMK_Simple *SimpleConfig)
__weak int LMK_CalPLL2CommonRate(LMK_Simple *SimpleConfig)
__weak int LMK_CalRegister(LMK_Simple *SimpleConfig)
__weak int LMK_ConfigSetRegister(LMK_Config *DevConfig, LMK_Simple *SimpleConfig)
__weak int LMK_ConfigPreset(LMK_Config *DevConfig, LMK_Simple *SimpleConfig)
__weak int LMK_ConfigCustomize(LMK_Config *DevConfig, LMK_Simple *SimpleConfig)
__weak int LMK_ConfigMake(LMK_Config *DevConfig, LMK_Simple *SimpleConfig)
int LMK_Init(LMK_Config *DevConfig)
__weak int LMK_StatusRead(LMK_Config *DevConfig)
int LMK_RegLock(LMK_Config *DevConfig)
int LMK_RegUnlock(LMK_Config *DevConfig)
__weak int LMK_WriteReg(LMK_Config *DevConfig, u16 RegisterAddress, u8 Value)
__weak int LMK_ReadReg(LMK_Config *DevConfig, u16 RegisterAddress, u8 *Value)