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.

[参考译文] CCS/MSP432P401R:关于Systick计时器频率的问题

Guru**** 2604225 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/630887/ccs-msp432p401r-a-question-about-the-frequency-of-systick-timer

部件号:MSP432P401R

工具/软件:Code Composer Studio

关于Systick计时器频率的问题。

首先,我使用DCO生成8.33M MCLK,然后将Systick计时器配置为每0.5秒生成一个中断。 程序运行后LED指示灯以达到0.5秒的闪烁。 该代码如下所示:

int main (void)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();

/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);

//![简单FPU配置]
/*为DCO频率计算启用FPU */
MAP_FPU_enableModule();

MAP_CS_setDCOCenteredFrequency (833万);

/*配置Systick在416.5万时触发(MCLK为8.33MHz,因此这将是
*每~0.5秒切换一次)*/
MAP_Systick_enableModule();
//map_Systick_setPeriod (416.5万);
MAP_Systick_setPeriod (416.5万);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Systick_enableInterrupe();

/*启用主中断*/
MAP_Interrupt_enableMaster();

MCLK = CS_getMCLK();

同时(1)
{
MAP_PCM_GotoLPM0();
}
}

作废Systick_Handler(void){

MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}

然后我将DCO计时为48M,为了使系统计时器产生0.5 中断,我将系统计时器的周期设置为MCLK的一半:“系统计时器”(2400万);
程序运行后,LED指示灯快速闪烁,显然Systick计时器中断不是0.5秒。
我想知道如何解决这个问题。 我的Systick计时器驱动时钟是否错误?
该代码如下所示:

int main (void)
{
/*停止监视程序*/
MAP_WDT_A_HoldTimer();

/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);

//![简单FPU配置]
/*为DCO频率计算启用FPU */
MAP_FPU_enableModule();

MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
MAP_FlashCTL_setWaitState(FLASH_BANK0, 2);
MAP_FlashCTL_setWaitState(FLASH_Bank1,2);

/*将DCO频率设置为非标准48MHz */
/*初始化时钟系统*/
MAP_CS_setDCOCenteredFrequency (CS_DCO_Frequency_48);
MAP_CS_INITClockSignal (CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK分隔符_1);
MAP_CS_initClockSignal (CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLock_diver_1 );
MAP_CS_initClockSignal (CS_SMCLK, CS_DCOCLK_SELECT, CS_CLock_diver_1 );
MAP_CS_INITClockSignal (CS_ACLK,CS_REFOCLK_SELECT,CS_CLock_diver_1);
//![简单FPU配置]

/*将Systick配置为在2400万时触发(MCLK为48MHz,因此这将是
*每~0.5秒切换一次)*/
MAP_Systick_enableModule();

MAP_Systick_setPeriod (2400万);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Systick_enableInterrupe();

/*启用主中断*/
MAP_Interrupt_enableMaster();

MCLK = CS_getMCLK();

同时(1)
{
MAP_PCM_GotoLPM0();
}
}

作废Systick_Handler(void){

MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}