一、硬件概述

LED原理图 PB22,高电平点亮
在这里插入图片描述

外部时钟,低速32kHz,高速40MHz
外部时钟电路

二、 使用内部sysosc作为主时钟点亮led

首先导入样例工程GPIO_toggle_output
启动clock tree
启动clocktree
配置时钟树
时钟配置
各时钟频率
各时钟频率
时钟配置代码:

static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_32_48_MHZ,
	.rDivClk2x              = 1,
	.rDivClk1               = 0,
	.rDivClk0               = 0,
	.enableCLK2x            = DL_SYSCTL_SYSPLL_CLK2X_DISABLE,
	.enableCLK1             = DL_SYSCTL_SYSPLL_CLK1_DISABLE,
	.enableCLK0             = DL_SYSCTL_SYSPLL_CLK0_ENABLE,
	.sysPLLMCLK             = DL_SYSCTL_SYSPLL_MCLK_CLK0,
	.sysPLLRef              = DL_SYSCTL_SYSPLL_REF_SYSOSC,
	.qDiv                   = 3,
	.pDiv                   = DL_SYSCTL_SYSPLL_PDIV_1
};
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{

	//Low Power Mode is configured to be SLEEP0
    DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
    DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);

    
	DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
	/* Set default configuration */
	DL_SYSCTL_disableHFXT();
	DL_SYSCTL_disableSYSPLL();
    DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_32_48_MHZ,0, false);
    DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
    DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_2);
    DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_SYSPLL);

}

main.c代码

#include "ti_msp_dl_config.h"

/* This results in approximately 0.5s of delay assuming 64MHz CPU_CLK */
#define DELAY (32000000)

int main(void) {
  /* Power on GPIO, initialize pins as digital outputs */
  SYSCFG_DL_init();

  /* Default: LED1 and LED3 ON, LED2 OFF */
  DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);

  while (1) {
    /*
     * Call togglePins API to flip the current value of LEDs 1-3. This
     * API causes the corresponding HW bits to be flipped by the GPIO HW
     * without need for additional R-M-W cycles by the processor.
     */
    delay_cycles(DELAY);
    DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
  }
}

运行结果:
LED按照1Hz频率闪烁

led toggle

三、 使用外部HFXT作为主时钟点亮led

继续使用上面的工程,打开时钟树配置页面,①选择HFXT,②频率设定为40MHz,③使能HFXT,④exhfmux中选择XTAL,⑤勾选HFCLK,设置PLL中的分频和倍频参数…
在这里插入图片描述
结果
CPUCLK主频为80MHz
在这里插入图片描述
时钟配置代码如下:

static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_32_48_MHZ,
	.rDivClk2x              = 1,
	.rDivClk1               = 0,
	.rDivClk0               = 0,
	.enableCLK2x            = DL_SYSCTL_SYSPLL_CLK2X_DISABLE,
	.enableCLK1             = DL_SYSCTL_SYSPLL_CLK1_DISABLE,
	.enableCLK0             = DL_SYSCTL_SYSPLL_CLK0_ENABLE,
	.sysPLLMCLK             = DL_SYSCTL_SYSPLL_MCLK_CLK0,
	.sysPLLRef              = DL_SYSCTL_SYSPLL_REF_HFCLK,
	.qDiv                   = 3,
	.pDiv                   = DL_SYSCTL_SYSPLL_PDIV_1
};
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{

	//Low Power Mode is configured to be SLEEP0
    DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
    DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);

    
	DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
	/* Set default configuration */
	DL_SYSCTL_disableHFXT();
	DL_SYSCTL_disableSYSPLL();
    DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_32_48_MHZ,0, false);
    DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
    DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_2);
    DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_SYSPLL);

}

mian.c中代码,延时参数修改下即可

#include "ti_msp_dl_config.h"

/* This results in approximately 0.5s of delay assuming 80MHz CPU_CLK */
#define DELAY (40000000)

int main(void) {
  /* Power on GPIO, initialize pins as digital outputs */
  SYSCFG_DL_init();

  /* Default: LED1 and LED3 ON, LED2 OFF */
  DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);

  while (1) {
    /*
     * Call togglePins API to flip the current value of LEDs 1-3. This
     * API causes the corresponding HW bits to be flipped by the GPIO HW
     * without need for additional R-M-W cycles by the processor.
     */
    delay_cycles(DELAY);
    DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
  }
}

四、使用内部低速晶体振荡器主时钟频率源

时钟树配置
主时钟切换到低速时钟,配置项中可能出现以下异常
在这里插入图片描述
修改lowpower 模式,切换为其它模式也可(暂时不操作低功耗模式,只要没有不兼容、相斥的状况即可)
在这里插入图片描述

时钟配置代码:

SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{

	//Low Power Mode is configured to be SLEEP1
    DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);

    
	DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
	/* Set default configuration */
	DL_SYSCTL_disableHFXT();
	DL_SYSCTL_disableSYSPLL();
    DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_32_48_MHZ,0, false);
    DL_SYSCTL_switchMCLKfromSYSOSCtoLFCLK(false);

}

main.c代码

#include "ti_msp_dl_config.h"

/* This results in approximately 0.5s of delay assuming 32.768KHz CPU_CLK */
#define DELAY (32768 >> 1)

int main(void) {
  /* Power on GPIO, initialize pins as digital outputs */
  SYSCFG_DL_init();

  /* Default: LED1 and LED3 ON, LED2 OFF */
  DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);

  while (1) {
    /*
     * Call togglePins API to flip the current value of LEDs 1-3. This
     * API causes the corresponding HW bits to be flipped by the GPIO HW
     * without need for additional R-M-W cycles by the processor.
     */
    delay_cycles(DELAY);
    DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
  }
}

五、使用外部低速振荡器

时钟配置
时钟配置代码:

static const DL_SYSCTL_LFCLKConfig gLFCLKConfig = {
    .lowCap   = false,
    .monitor  = false,
    .xt1Drive = DL_SYSCTL_LFXT_DRIVE_STRENGTH_HIGHEST,
};
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{

	//Low Power Mode is configured to be SLEEP1
    DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);

    
	DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
	/* Set default configuration */
	DL_SYSCTL_disableHFXT();
	DL_SYSCTL_disableSYSPLL();
    DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_32_48_MHZ,0, false);
    DL_SYSCTL_setLFCLKSourceLFXT((DL_SYSCTL_LFCLKConfig *) &gLFCLKConfig);
    DL_SYSCTL_switchMCLKfromSYSOSCtoLFCLK(false);

}

主时钟频率没有变,主程序不变

六、总结

通过本文,学会使用sysconfig配置系统时钟,并通过代码可以看到使用不同时钟,时钟代码配置的变化。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐