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.

[参考译文] AM2634:使用 SysConfig 的 AM263x 外设时钟配置

Guru**** 2463330 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1172793/am2634-am263x-peripheral-clock-configuration-using-sysconfig

器件型号:AM2634
Thread 中讨论的其他器件:SysConfig

尊敬的 TI 专家:

我使用的是 MCUPlusSDK 8.3.1.05版和 SysConfig 1.12.1、但在 SysConfig 中找不到修改内核时钟、SYSCLK 和其他外设时钟的选项。

目前在示例项目中、我可以看到默认情况下时钟配置为400MHz coreclock 和200MHz SYSClock。

关于如何配置/修改时钟的任何建议。

此致

Bikash

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

    尊敬的 TI 团队:

    请就本主题向我提供帮助、我有兴趣了解如何使用 MCUPLUSSDK 修改时钟配置。

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

    您好、Bikash、  

    当前、时钟配置基于 GEL。 连接到 R5时、GEL 将执行"Configure_PLLs_R5F_400_SYS_200_Clocks ()"、该函数调用多个函数以实现400MHz 的 R5时钟和200MHz 的 SYSCLK。  

    在 OnTargetConnect()脚本中,我们有:

    ...
    
            //Configure PLLs
            Configure_Plls_R5F_400_SYS_200_Clocks();
    
            //Enable all peripheral clocks
            Configure_All_Peripheral_Clks();
        }else{
            GEL_TextOut("Warning !! None of the scripts executed in this mode\n");
        }
    }

    其中、"Configure_PLLs_R5F_400_SYS_200_Clocks ()"调用位于 "AM263x_PLL.GEL"中的"Program_Core_PLL()":

    hotmenu Configure_Plls_R5F_400_SYS_200_Clocks()
    {
        if(Enable_OnTarget_Connect == 1){
            Program_Core_PLL();
            Program_Per_PLL();
            Program_SYS_CLK_DIVBY2();
            // Switch R5SS and SYS_CLK to Core PLL, so that R5 run at 400MHz
            Program_R5F_SYS_CLK_SRC();
            GEL_TextOut("\n CLK Programmed R5F=400MHz and SYS_CLK=200MHz \n");
        }else{
            GEL_TextOut("Errrrr... Please Load Gel files\n");
        }
    }

    hotmenu Program_Core_PLL() 
    {
        unsigned int val_pll_core_stat = 0;
        unsigned int val_pll_per_stat = 0;
        unsigned int val_hsdiv_clkout;   
    
        val_pll_core_stat = Read_MMR(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_STATUS);
        if((val_pll_core_stat & 0x00000400) != 0x00000400)
        {
            // N
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_M2NDIV, 9, 8, 0);
            //M2
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_M2NDIV, 1, 7, 16);
            
            //M
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_MN2DIV, 0x320, 12, 0); 
           
            //N2
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_MN2DIV, 0x0, 4, 16); 
    
            //SD divider of the PLL with the value of 0x8 to get the optimum jitter performance
            Write_MMR_Field(0x53200418, 8, 8,24);
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_CLKCTRL, 0,1, 23);        //Idle
    
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_CLKCTRL, 0,1,0);  		//Soft Reset
    
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_TENABLE, 1,1,0);          // PLL_CORE_TENABLE = 1;
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_CLKCTRL, 1,1,0);          //Soft Reset
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_TENABLE, 0,1,0);          // PLL_CORE_TENABLE = 0;
                
            Write_MMR(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_TENABLEDIV, 1);                 // PLL_CORE_TENABLEDIV = 1;
            Write_MMR(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_TENABLEDIV, 0);                 // PLL_CORE_TENABLEDIV = 0;
            
            do
            {     
                val_pll_core_stat = Read_MMR(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_STATUS);
            }while( ((val_pll_core_stat & 0x00000400) != 0x00000400) ) ;
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT0, 0x4, 5, 0);//CLKOUT0
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT1, 0x3, 5, 0);//CLKOUT1
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT2, 0x4, 5, 0);//CLKOUT2
            
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER, 1,1,2);   // PLL_CORE_HSDIV_TENABLEDIV = 1;
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER, 0,1,2);   // PLL_CORE_HSDIV_TENABLEDIV = 0;
            
            
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT0, 0x1, 1, 8);//CLKOUT0
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT1, 0x1, 1, 8);//CLKOUT1
            Write_MMR_Field(MSS_TOP_RCM_U_BASE + MSS_TOP_RCM_PLL_CORE_HSDIVIDER_CLKOUT2, 0x1, 1, 8);//CLKOUT1
            
            GEL_TextOut("CORE PLL Configuration Complete \n");
        
        }
    }

    您可以通过修改 M 和 N 分频器以及 HSDIVIDER 值以输出所需的输出时钟值、以此作为示例使用此脚本。

     有关用于配置 PLL 的变量的详细信息、请参阅 TRM 的6.4.1.2模拟模块部分。 此外、有关如何配置内核 PLL 的更多详细说明、请参阅 第6.4.1.2.3.1.2节配置内核 PLL 的序列

    最棒的

    Daniel

    TRM: AM263x Sitara 微控制器技术参考手册(修订版 B)链接(TI.com)

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

    感谢 Daniel 提供的详细信息。