#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()函数了。