这是我的整个程序!
void PLL_init(unsigned int main_PLLM, unsigned int main_PLLD)
{
CSL_PllcHandle hPllc;
Uint8 goStatus;
hPllc=CSL_PLLC_open (0);
CSL_BootCfgUnlockKicker(); //并不锁定Kicker以便配置boot方便写入MMR寄存器的值
CSL_PLLC_setPllCtrlPllEnSrc (hPllc, 0); // Enable PLLEN bit configuration
CSL_PLLC_setPllCtrlPllEn (hPllc, 0); // Put PLLC in Bypass mode
CSL_PLLC_setPllCtrlPllPowerDown(hPllc,0); // PUT PLLPWRDN = 0
CSL_PLLC_setPllCtrlPllReset (hPllc, 1); // Put PLLC in reset
CSL_PLLC_setPllMultiplierCtrlReg (hPllc, main_PLLM); // Setup x1 multiplier rate PLLM=0
CSL_PLLC_setPllSecCtrlReg (hPllc, 0x11); //设置PLL第二功能寄存器,分频系数为1分频
CSL_PLLC_setPllDivReg (hPllc,17,1,0x01); // Setup /1 divider rate and enable divider 1
CSL_PLLC_setPllAlignCtrlReg (hPllc, 1); // Set the respective ALNn bit in ALNCTL register
CSL_PLLC_setPllCtrlPllReset (hPllc, 0); // Bring PLLC out of reset
CSL_PLLC_setPllCtrlPllEn (hPllc, 1); // Put PLLC back in PLL mode
CSL_PLLC_setPllCmdReg (hPllc, 1); // Start GO operation
CSL_PLLC_getPllStatusReg (hPllc, &goStatus);// Ensure no GO operation in progress already
while (goStatus != 0)
{
CSL_PLLC_getPllStatusReg (hPllc, &goStatus);// wait some time and recheck GOSTAT status
}
CSL_BootCfgLockKicker(); //锁定Kicker保护boot MMR寄存器不被修改
}
倍频,分频修改的函数
CSL_PLLC_setPllMultiplierCtrlReg (hPllc, main_PLLM); // Setup x1 multiplier rate PLLM=0
CSL_PLLC_setPllSecCtrlReg (hPllc, 0x11); //设置PLL第二功能寄存器,分频系数为1分频
CSL_PLLC_setPllDivReg (hPllc,17,1,0x01); // Setup /1 divider rate and enable divider 1
我才用的是TI的6678的测试版TMXEVM6678LE,测试点T12,为DSP内核系统时钟输出。
我秀该倍频因子,PLLM是,能够产生倍频,不仅大概16MHZ左右,比如
PLLM=0 输出16.6MHZ,
PLLM=1 输出33.3MHZ,
PLLM=2 输出50.0MHZ,
PLLM=3 输出66.8MHZ,
PLLM=4 输出83.3MHZ,
PLLM=5 输出100MHZ,
PLLM=6 输出116MHZ,
但是我设置分频因子时候,却是无效的,请工程师给我看看,分析分析我的错误。另外我不明白两个分频因子是如何计算左后的系统时钟的。请工程师给我讲解下,谢谢了。