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.

[参考译文] RM48L952:Halcogen 不执行 SSWF0221#35

Guru**** 2448780 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/623731/rm48l952-halcogen-does-not-implement-sswf021-35

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

你好!

在 Halcogen 中、我已经为 PLL 生成了代码、并注意到勘误表 SSWF0221#35权变措施说明:

解决方法在切换之前、将所有时钟域切换至不同的源(例如振荡器)
PLL 输出时钟分频器从1分频到更大的分频器;在 PLL 分频器之后
已更改、恢复为 PLL 作为这些时钟域的时钟源。

在 halcogen system.c 文件 mapClock()函数中,在更改时钟分频器之前不会从 PLL 切换时钟源。 请参阅下面突出显示的行:

/* sourceId:system_sourceId_005 */*
DesignId:system_DesignId_005 */*
要求:HL_SR469 */
void mapClocks(void)
{
uint32 SYS_CSVSTAT、SYS_CSDIS;

/*用户代码开始(11)*/
/*用户代码结束*/

/**@b 初始化@b 时钟@b 树:*/
/**-禁用/启用时钟域*/
systemREG1->CDDIS =(UINT32)((UINT32)0U <<4U)/* AVCLK 1关闭*/
|(uint32)((uint32) 1U << 5U)// AVCLK 2 off */
|(uint32)((uint32) 1U << 8U)/* VCLK3关闭*/
|(uint32)((uint32) 0U << 9U)// VCLK4 off */
|(uint32)((uint32) 1U << 10U)/* AVCLK 3关闭*/
|(uint32)((uint32) 1U << 11U);// AVCLK 4 off */


/*勘误表的解决方法 SYS#46:
*
*勘误表说明:
* 时钟源切换不符合时钟源使能和时钟源有效的要求
*权变措施:
* 始终检查 CSDIS 寄存器以确保时钟源已打开并检查
* CSVSTAT 寄存器以确保时钟源有效。 然后写入 GHVSRC 以切换时钟。
*
/**-等待直到时钟锁定*/
SYS_CSVSTAT = systemREG1->CSVSTAT;
SYS_CSDIS = systemREG1->CSDIS;
while ((SYS_CSVSTAT &(SYS_CSDIS ^ 0xFFU)& 0xFFU))!=((SYS_CSDIS ^ 0xFFU)& 0xFFU)
{
SYS_CSVSTAT = systemREG1->CSVSTAT;
SYS_CSDIS = systemREG1->CSDIS;
} /*等待*/

/*用户代码开始(12)*/
/*用户代码结束*/

/**-将器件时钟域映射到所需的源并配置顶级分频器*/
/**-到目前为止,所有时钟域都在关闭默认时钟源*/
/**-可以使用 HALCoGen GUI 轻松修改以下分配*/

/**-为正常运行、断电模式和唤醒后设置 GCLK、HCLK 和 VCLK 时钟源*/
systemREG1->GHVSRC =(UINT32)((UINT32) SYS_OSC << 24U)
|(UINT32)((UINT32) SYS_OSC << 16U)
|(UINT32)((UINT32) SYS_PLL1 << 0U); 

/**-设置 RTICLK1和 RTICLK2时钟*/
systemREG1->RCLKSRC =(uint32)((uint32) 1U << 24U)
|(UINT32)((UINT32) SYS_VCLK << 16U)
|(uint32)((uint32) 2U << 8U)
|(UINT32)((UINT32) SYS_VCLK << 0U);

/**-为 AVCLK1和 AVCLK2设置异步外设时钟源*/
systemREG1->VCLKASRC =(uint32)((uint32) SYS_VCLK << 8U)
|(UINT32)((UINT32) SYS_VCLK << 0U);

/**-为 VCLK1、VCLK2、VCLK3设置同步外设时钟分频器*/
systemREG1->CLKCNTL =(systemREG1->CLKCNTL & 0xF0FFFFFFU)
|(uint32)((uint32) 2U << 24U);
systemREG1->CLKCNTL =(systemREG1->CLKCNTL & 0xFFF0FFFFU)
|(uint32)((uint32) 2U << 16U);

systemREG2->CLK2CNTL =(systemREG2->CLK2CNTL 和0xFFFFFF0F0U)
|(uint32)((uint32) 1U <<8U)
|(uint32)((uint32) 2U << 0U);

systemREG2->VCLKACON1 =(uint32)((uint32)(1U-1U)<< 24U)
|(UINT32)((UINT32) 0U << 20U)
|(UINT32)((UINT32) SYS_VCLK << 16U)
|(uint32)((uint32)(1U-1U)<<8U)
|(uint32)((uint32) 0U << 4U)
|(UINT32)((UINT32) SYS_VCLK << 0U);

/*用户代码开始(13)*/
/*用户代码结束*

/*现在 PLL 被锁定并且 PLL 输出可被向上加速*/
/* R 分频器被设定为0xF。 现在、该分频器已更改为编程值*/
systemREG1->PLLCTL1 =(systemREG1->PLLCTL1 & 0xE0FFFFFFU)|(uint32)((uint32)(2U-1U)<< 24U); 
/*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
systemREG2->PLLCTL3 =(systemREG2->PLLCTL3 & 0xE0FFFFFFU)|(uint32)((uint32)(2U-1U)<< 24U); 

/*启用/禁用频率调制*/
systemREG1->PLLCTL2 |= 0x000000000000U;

//用户代码开始(14)*/
//*用户代码结束*/

} 

请澄清这是否正确。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bho、

    感谢您的指出。 我将让 HALCoGen 团队检查它。