主题中讨论的其他器件: AM5728
在我们的设计中、我们使用的是 AM5726 Sitara 处理器、SYSCLK1上采用了27MHz 晶体。 我们使用的是最新 的 Processor-SDK-Linux-AM57x_03_03_00_04。 SYSBOOT[9:8]引脚被正确配置以反映27MHz 输入。 我们在启动 SPL U-boot 时遇到问题。
我们目前正在使用 CCSv7对 spl 引导加载 程序进行故障排除。我手动修改了 CCSv7 AM572x_prcm_config.gel 以支持27MHz 晶体、并能够从 SRAM 或 DDRAM 加载/执行 spl 和测试程序。 AM5728 DPLL 配置具有许多参数并生成大量子时钟。
我的问题是- TI 是否有一个 AM5728 GEL 参考文件、该文件具有27MHz 的 dls 时钟设置(CCS 随附的 AM572x_prcm_config.gel 仅支持20MHz 晶体时钟、请参阅下文):
#define SYS_CLK1 (20)
/*********
* DPLL_a15_opp_config():Cortex A15 DPLL OPP 配置
秘书长的报告 /
DPLL_a15_opp_config (uint32_t opp、uint32_t device_type)
{
uint32_t DPLL_m、DPLL_n、divm2、DCC_en;
DCC_EN = 0;
GEL_TextOut ("\tCortex A15 DPLL OPP %d 时钟配置正在进行中...\n"、、、、 OPP);
IF (OPP_HIGH =OPP)
{
//1500MHz、20MHz SYS_clk
DPLL_m = 600;
DPLL_n = 7;
DIM2 = 1;
DCC_EN = 1;
}
否则、如果(OPP_OD = OPP)
{
在20MHz SYS_clk 时为//1176MHz
DPLL_m = 294;
DPLL_n = 4;
DIM2 = 1;
}
else //默认为 OPP_NOM
{
//1000MHz、20MHz SYS_clk
DPLL_m = 500;
// DPLL_m = 370;
DPLL_n = 9;
DIM2 = 1;
}
IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_MPU)&0x1)
{
GEL_TextOut ("\tCortex A15 DPLL 已锁定、现在正在解锁... \n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_MPU);
}
CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_MPU)=((DPLL_m << 8)| DPLL_n |(DCC_EN << 22));
//对 DPLL_CLKOUT 分频器进行编程(M2 = 1)
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_MPU)= DIMM2;
DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_MPU);
GEL_TextOut ("\tCortex A15 DPLL OPP %d 已完成!\n"、、、、、 OPP);
}
/*********
* DPLL_PER_OPP_CONFIG():按 DPLL OPP 配置
(小部分 /
DPLL_PER_OP_CONFIG (uint32_t OPP、uint32_t DEVICE_TYPE)
{
GEL_TextOut ("\tPER DPLL OPP %d clock config in progress...\n"、、、、 OPP);
IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_PER)&0x1)
{
GEL_TextOut ("\tPER DPLL 已锁定、现在解锁\n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_PER);
}
/* CM_CLKSEL_DPLL_PER DPLL 乘法器*/
CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_PER)= 0x6004;
/* CM_DIV_M2_DPLL_PER.DPLL_CLKOUT_DIV = 4*/
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_PER)= 0x4;
/* CM_DIV_M3_DPLL_PER.DPLL_CLKOUT_DIV = 3 */
CM_DIV_M3_DPLL (CM_CLKMODE_DPLL_PER)= 0x1;
/* CM_DIV_H11_DPLL_PER.HSDIVIDER_CLKOUT1_DIV = 3 */
CM_DIV_H11_DPLL (CM_CLKMODE_DPLL_PER)= 0x3;
/* CM_DIV_H12_DPLL_PER.HSDIVIDER_CLKOUT2_DIV = 4 *
CM_DIV_H12_DPLL (CM_CLKMODE_DPLL_PER)= 0x4;
/* CM_DIV_H13_DPLL_PER.HSDIVIDER_CLKOUT2_DIV = 4:获得192M 输出*/
CM_DIV_H13_DPLL (CM_CLKMODE_DPLL_PER)= 0x04;
/* CM_DIV_H14_DPLL_PER.HSDIVIDER_CLKOUT3_DIV = 2 */
CM_DIV_H14_DPLL (CM_CLKMODE_DPLL_PER)= 0x2;
DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_PER);
GEL_TextOut ("\tPER DPLL OPP %d 已完成!\n"、、、、、 OPP);
}
/*********
* DPLL_CORE_OPP_CONFIG():内核 DPLL OPP 配置
(小部分 /
DPLL_CORE_OPP_CONFIG (uint32_t OPP、uint32_t DEVICE_TYPE)
{
GEL_TextOut ("\tCORE DPLL OPP %d 时钟配置正在进行中...\n"、、、、、 OPP);
IF (CM_IDLEST_DPLL (CM_CLKMODE_DPLL_CORE)&0x1)
{
GEL_TextOut ("\tCORE DPLL OPP 已锁定、现在正在解锁...。 \n");
DPLL_UNLOCK_SEQUENCE (CM_CLKMODE_DPLL_CORE);
}
//从内核 DPLL 对 L3和 L4分频器进行编程
/* L3时钟=内核 CLK /2;L4时钟= L3时钟/2;CORE_CLK=CORE_X2_CLK/2 */
WR_MEM_32 (CM_CLKSEL_CORE、0x110);
/*锁定和代码输出被覆盖*/
WR_MEM_32 (CM_DLL_CTRL、0x00000000);
/* CM_CLKSEL_DPLL_CORE.PLL_MULT = 0x200 */
CM_CLKSEL_DPLL (CM_CLKMODE_DPLL_CORE)= 0x10a04;
/* CM_DIV_M2_DPLL_CORE */
CM_DIV_M2_DPLL (CM_CLKMODE_DPLL_CORE)= 0x2;
/* CM_DIV_M3_DPLL_CORE *
CM_DIV_M3_DPLL (CM_CLKMODE_DPLL_CORE)= 0x1;
/* CM_DIV_H12_DPLL_CORE */
CM_DIV_H12_DPLL (CM_CLKMODE_DPLL_CORE)= 0x4;
/* CM_DIV_H13_DPLL_CORE */
CM_DIV_H13_DPLL (CM_CLKMODE_DPLL_CORE)= 0x3E;
/* CM_DIV_H14_DPLL_CORE */
CM_DIV_H14_DPLL (CM_CLKMODE_DPLL_CORE)= 0x5;
/* CM_DIV_H22_DPLL_CORE */
CM_DIV_H22_DPLL (CM_CLKMODE_DPLL_CORE)= 0x5;
/* CM_DIV_H23_DPLL_CORE */
CM_DIV_H23_DPLL (CM_CLKMODE_DPLL_CORE)= 0x4;
/* CM_DIV_H24_DPLL_CORE */
CM_DIV_H24_DPLL (CM_CLKMODE_DPLL_CORE)= 0x6;
DPLL_LOCK_SEQUENCE (CM_CLKMODE_DPLL_CORE);
GEL_TextOut ("\tCORE DPLL OPP %d 已完成!\n"、、、、、 OPP);
}
我还检查了 U-boot 源代码、 在 arch/arm/cpU/armv7/omap5/hw_data.c 中没有27MHz 晶体的设置(见下文)
OMAP5 ES2.0和 DRA7 ES1.0的/* OPP NOM 频率*/
静态常量结构 DPLL_params MPU_DPLL_params_1GHz[NUM_SYS_CLKS]={
{250、2、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 12 MHz */
{500、9、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 20MHz */
{119、1、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 16.8MHz *
{625、11、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 19.2 MHz */
{500、12、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 26 MHz */
{-1、-1、-1、-1、-1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 27 MHz */
{625、23、1、1、-1、 -1、-1、-1、-1、-1、-1、 -1、-1}、/* 38.4MHz */
};
要正确设置 dplls、需要以下时钟:
struct dplls dra7xx_dplls ={
MPU = MPU_DPLL_params_1GHz、
.core = core_DPLL_params_2128mhz_dra7xx、
PER = PER_DPLL_params_768mhz_dra7xx、
安倍=安倍_DPLL_params_sysclk2_361267khz、
IVA = IVA_DPLL_params_2330mhz_dra7xx、
USB = USB_DPLL_params_1920mhz、
DDR = DDR_DPLL_params_2128mhz、
GMAC = GMAC_DPLL_params_2000MHz、
};
TI 是否可以在中为 GEL 文件提供所有此时钟的参考设置、或者在 SYSCLK1上为27MHz 晶体时钟提供 HW_DATA.c 的参考设置。
要 支持27MHz 时钟、还需要从 SYSCLK1论坛上具有27MHz 晶体的 AM572x 进行更改。
请告诉我。
提前感谢您。
此致、
Andriy Nazar