nuc123的timer操作

#include "NUC123.h"
static uint32_t modulate = 0;
// Time-out period = (Period of Timer clock input) * (8-bit PRESCALE + 1) * (24-bit TCMP).(在NUC123.h文件TIMER_T::TCMPR寄存器的描述中有此公式)
// 调制频率定时器,0-300Hz
void Timer1_Init(void)
{
    
    
    CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HCLK, 0);
    CLK_EnableModuleClock(TMR1_MODULE);
    SYS_ResetModule(TMR1_RST);
    /* Initial Timer1 default setting */
    TIMER_Open(TIMER1, TIMER_CONTINUOUS_MODE, 4000);    // 默认是8分频,即72MHz / 8 = 9MHz
    TIMER1->TCSR |= 1 << 16;    // TDR寄存器自动向上计数
    TIMER_SET_CMP_VALUE(TIMER1, 0xAFC8);    // f = 100Hz, T = 1 / f = 0.01s
    TIMER_EnableInt(TIMER1);
    NVIC_EnableIRQ(TMR1_IRQn);
    TIMER_Start(TIMER1);
}

void TMR1_IRQHandler(void)
{
    
    
    modulate += 0xAFC8;
    if(TIMER_GetIntFlag(TIMER1) == 1)
    {
    
    
        TIMER_ClearIntFlag(TIMER1);
        TIMER_SET_CMP_VALUE(TIMER1, modulate);
    }
}

这样初始化timer1之后,就可以动态的修改modulate的值,从而达到修改定时器频率的目的。也可以使用TIMER_Delay()函数了。

猜你喜欢

转载自blog.csdn.net/cp_srd/article/details/106987436
123