“线程:HALCOGEN”中讨论的其它部件
王工您好:
我用tms570lc43xx芯片,在调用checkPLL1Slip函数后,时钟就不对了。请问有没有什么思路帮忙解决一下此问题。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
王工您好:
我用tms570lc43xx芯片,在调用checkPLL1Slip函数后,时钟就不对了。请问有没有什么思路帮忙解决一下此问题。
您好,明溪
HALCoGen 不会为 LC43x 设备生成此函数。 您是否改为使用 TMS570LSx 器件的 checkPLL1Slip()函数?
此功能将有意产生 PLL1打滑。 PLL1打滑后,时钟源被切合晶体时钟。 但此功能会在末尾恢复 PLL1
[引用 userid="507609" url="~/support/icls/arm-based 微处理器-组/基于 ARM 的微控制器/f/arm-based 微控制器- forum/1076859/tms570lc4357-tms570lc43xx-checkpll1slitts"]时钟就不对了您可以使用 ECLK 检查内部 PLL 时钟,VCLK 等。系统时钟是否变为 OSC 时钟?
王工,我增加一个延时就好了(绿色标注的),请问这是为什么啊。
/*恢复 PLL 乘数值*/
systemREG1->PLLCTL1 ^= 0x8000U;
/*启用 PLL1 */
systemREG1->CSDISCLR = 0x2U;
/*等待 PLL1启用*/
/*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
While (((systemREG1->CSDIS 和0x2U)!= 0U)
{
}/*等待*/
/*lmx add*/
Delay_us (2000年);
/***** /
/*切换回初始时钟源*/
systemREG1->GHVSRC = ghvsrc_bk;
/*清除 PLL 滑动标志*/
systemREG1->GLBSTAT = 0x300U;
王工,我的代码如下。我将时钟源由PLL1转到oscillator ,然后再恢复回来。如果不加delay ć_us,时钟就恢复不到之前的状态了。ć
UINT32 ghvsrc_bk,pllctl1_bk;
/*备份寄存器 GHGVSRC 和 PLLCTRL1 */
gvsrc_bk = systemREG1->gvsrc;
pllctl1_bk = systemREG1->PLLCTL1;
/*将所有时钟域切换到振荡器*/
systemREG1->GHRSRC = 0x000000000000U;
/*禁用 PLL1 */
systemREG1->CSDISSET = 0x2U;
/*等待 PLL1被禁用*/
/*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
While (((systemREG1->CSDIS 和0x2U)==0U)
{
}/*等待*/
/*启用 PLL1 */
systemREG1->CSDISCLR = 0x2U;
/*等待 PLL1启用*/
/*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
While (((systemREG1->CSDIS 和0x2U)!= 0U)
{
}/*等待*/
/*lmx add*/
Delay_us (2000年);
/***** /
/*切换回初始时钟源*/
systemREG1->GHVSRC = ghvsrc_bk;
/*清除 PLL 滑动标志*/
systemREG1->GLBSTAT = 0x300U;
/*清除 ESM 标记*/
esmREG->SR1[0U]= 0x400U;
/*恢复 PLLCTL1寄存器*/
systemREG1->PLLCTL1 = pllctl1_bk;
王工按照您说的, 在启用 PLL。但是还是不行。之前,请清除 PLL 滑动标志
检查无效 PLL1Slip (无效)
{
UINT32 ghvsrc_bk,pllctl1_bk;
/*备份寄存器 GHGVSRC 和 PLLCTRL1 */
gvsrc_bk = systemREG1->gvsrc;
pllctl1_bk = systemREG1->PLLCTL1;
/*将所有时钟域切换到振荡器*/
systemREG1->GHRSRC = 0x000000000000U;
{
/*禁用 PLL1 */
systemREG1->CSDISSET = 0x2U;
/*等待 PLL1被禁用*/
/*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
While (((systemREG1->CSDIS 和0x2U)==0U)
{
}/*等待*/
/*恢复 PLL 乘数值*/
//systemREG1->PLLCTL1 ^= 0x8000U;
/*清除 PLL 滑动标志*/
systemREG1->GLBSTAT = 0x300U;
/*启用 PLL1 */
systemREG1->CSDISCLR = 0x2U;
/*等待 PLL1启用*/
/*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
While (((systemREG1->CSDIS 和0x2U)!= 0U)
{
}/*等待*/
/*lmx add*/
//delay_us(2000);
/***** /
/*切换回初始时钟源*/
systemREG1->GHVSRC = ghvsrc_bk;
/*清除 PLL 滑动标志*/
//systemREG1->GLBSTAT = 0x300U;
/*清除 ESM 标记*/
esmREG->SR1[0U]= 0x400U;
/*恢复 PLLCTL1寄存器*/
systemREG1->PLLCTL1 = pllctl1_bk;
}
}