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.

[参考译文] AM2631:使用 SYSCFG 的 PLL 和 clkout 引脚配置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1325240/am2631-pll-and-clkout-pin-configuration-using-syscfg

器件型号:AM2631

您好!

是否可以使用 SYSCFG 配置 PLL 和 clkout 引脚? 我看不到使用 SYSCFG 1.17.0.3128时的情况、也 找不到中所述的 GEL 文件(用于此 UC)  

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

如果没有、是否有任何我可以查看的 SDK/示例代码?

谢谢。

Javier。

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

    Javier、您好!

    可以在以下位置找到包含用于配置上一篇文章中提到的 PLL 的函数的 GEL 文件:

    "C:\ccs12##\ccs\ccs_base\emulation\gel\AM263x\AM263_PLL\*"

    " \ccs12##\ccs\ccs_base\emulation\gel\AM263x\AM263_PLL\*"

    在安装过程中、具体取决于您将 Code Composer Studio 保存在本地机器上的位置。

    我没有找到明确的 CLKOUTx 示例、因此我将提出一个错误、确保将该错误添加到 SDK 中、并在平均时间内处理一个简短的测试示例。

    此致、

    扎卡里·弗莱诺

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

    嗨、Javier、

    我将包含一些示例 GEL 代码、可用作起点。

    将此源代码保存到一个新的 AM263_CLKOUT_CFG.gel 文件中上述响应中提到的 GEL 目录、并将以下行与主 AM263x.gel 文件中的其他 GEL 文件调用一起添加: GEL_LoadGel ("$(GEL_file_dir)/AM263_PLL/AM263_CLKOUT_CFG.gel");

    /**
     * \file  AM263_CLKOUT_CONFIG.gel
     *
     * \brief GEL File to configure CLKOUT0 for AM263x
     */
    
    /* Copyright (c) 2024, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
    
    /* Revision history:
     * 02-15-2024 - Initial Creation
     */
    
    // Register Definitions and Offsets
    #define IOMUX_U_BASE											(0x53100000U)
    #define IOMUX_IO_CFG_KICK0										(0x00000298U)
    #define IOMUX_IO_CFG_KICK1								 		(0x0000029CU)
    #define IOMUX_CLKOUT0_CFG_REG									(0x00000228U)
    #define IOMUX_SDFM0_CLK0_CFG_REG								(0x000001E8U)
    
    #define MSS_TOP_RCM_U_BASE										(0x53200000U)
    #define MSS_TOP_RCM_LOCK0_KICK0									(0x00001008U)
    #define MSS_TOP_RCM_LOCK0_KICK1									(0x0000100CU)
    
    #define MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL							(0x00000C00U)
    #define MSS_TOP_RCM_CLKOUT1_CLK_SRC_SEL							(0x00000C04U)
    #define MSS_TOP_RCM_CLKOUT0_DIV_VAL								(0x00000C08U)
    #define MSS_TOP_RCM_CLKOUT1_DIV_VAL								(0x00000C0CU)
    #define MSS_TOP_RCM_CLKOUT0_CLK_GATE							(0x00000C10U)
    #define MSS_TOP_RCM_CLKOUT1_CLK_GATE							(0x00000C14U)
    #define MSS_TOP_RCM_CLKOUT0_CLK_STATUS							(0x00000C18U)
    #define MSS_TOP_RCM_CLKOUT1_CLK_STATUS							(0x00000C1CU)
    
    #define XTALCLK													(0x000)
    #define DPLL_CORE_HSDIV_CLKOUT0									(0x111)
    #define DPLL_CORE_HSDIV_CLKOUT1									(0x222)
    #define DPLL_PER_HSDIV_CLKOUT0									(0x333)
    #define DPLL_PER_HSDIV_CLKOUT1									(0x444)
    #define RCCLK10M												(0x555)
    #define RCCLK32K												(0x666)
    #define CPTS_GENF0												(0x777)
    
    #define div1													(0x000)
    #define div2													(0x111)
    #define div3													(0x222)
    #define div4													(0x333)
    #define div5													(0x444)
    #define div6													(0x555)
    #define div7													(0x666)
    #define div8													(0x777)
    #define div9													(0x888)
    #define div10													(0x999)
    #define div11													(0xAAA)
    #define div12													(0xBBB)
    #define div13													(0xCCC)
    #define div14													(0xDDD)
    #define div15													(0xEEE)
    #define div16													(0xFFF)
    
    
    hotmenu Make_CLKOUT0_25MHz_XTALCLK_div1() 
    {
    	MSS_TOPRCM_unlock();
    
    	// Use CLK Source defines as the input source clock for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, XTALCLK);
    	GEL_TextOut("XTALCLK selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div1);
    	GEL_TextOut("XTALCLK will be divided by 0 for 25MHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_10MHz_RCCLK10M_div1() 
    {
    	MSS_TOPRCM_unlock();
    
    	// Use CLK Source defines as the input source clock for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK10M);
    	GEL_TextOut("RCCLK10M selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div1);
    	GEL_TextOut("RCCLK10M will be divided by 1 for 10MHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_5MHz_RCCLK10M_div2() 
    {
    	MSS_TOPRCM_unlock();
    
    	// Use CLK Source defines as the input source clock for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK10M);
    	GEL_TextOut("RCCLK10M selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div1);
    	GEL_TextOut("RCCLK10M will be divided by 2 for 5MHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_2MHz_RCCLK10M_div5() 
    {
    	MSS_TOPRCM_unlock();
    
    	// Use CLK Source defines as the input source clock for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK10M);
    	GEL_TextOut("RCCLK10M selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div5);
    	GEL_TextOut("RCCLK10M will be divided by 5 for 2MHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_32kHz_RCCLK32_div1() 
    {
    	MSS_TOPRCM_unlock();
    
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK32K);
    	GEL_TextOut("RCCLK32K selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div1);
    	GEL_TextOut("RCCLK32K will be divided by 1 for 32kHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_16kHz_RCCLK32K_div2() 
    {
    	MSS_TOPRCM_unlock();
    
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK10M);
    	GEL_TextOut("RCCLK32K selected as CLK source for CLKOUT0\n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div2);
    	GEL_TextOut("RCCLK32K will be divided by 2 for 16kHz CLKOUT0\n");
    }
    
    
    hotmenu Make_CLKOUT0_8kHz_RCCLK32K_div4() 
    {
    	MSS_TOPRCM_unlock();
    
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_CLK_SRC_SEL, RCCLK32K);
    	GEL_TextOut("RCCLK32K selected as CLK source for CLKOUT0 \n");
    	
    	// Write DIV_VAL as the clock divider value for CLKOUT0
    	Write_MMR(MSS_TOP_RCM_U_BASE+ MSS_TOP_RCM_CLKOUT0_DIV_VAL, div4);
    	GEL_TextOut("RCCLK32K will be divided by 4 for 8kHz CLKOUT0\n");
    }

    希望这对您有所帮助!

    此致、

    扎卡里·弗莱诺

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

    谢谢 Zachary、我会尝试一下、感谢及时的响应。 我没有意识到 GEL 文件默认不是工程的一部分、而是通用文件的一部分。 我还看到、如果修改了初始化脚本位置(Target Configuration -> CPU Properties ->初始化脚本)、则可以自定义 GEL 文件。

    此致、

    哈维尔

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

    只是为了确认 Zachary、它对我起了作用。 唯一需要做的是、我必须禁用 SYSCFG 才能手动更改 CLKOUT1引脚的 PIN_MODE。 此链接包含禁用 SYSCFG 的说明:  

    https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/3.40.00.02/exports/docs/ti154stack/html/sysconfig/sysconfig-disable.html

    谢谢。

    哈维尔