ADI EVAL-ADuCM360QSPZ开发套件试用报告二

作者:
上传时间为: 2018-05-17 08:51 AM
2018-05-17
阅读:

       这一期给大家带来定时器的使用。控制对象还是开发板上那个孤零零的LED,当然首先还是初始化定时器,先把代码贴出来。

void Timer0_Init()
{
   DioOen(pADI_GP1,0x8);    
   WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS); 
   ClkDis(CLKDIS_DISSPI0CLK| CLKDIS_DISSPI1CLK| CLKDIS_DISI2CCLK|CLKDIS_DISUARTCLK|CLKDIS_DISPWMCLK| CLKDIS_DIST1CLK| CLKDIS_DISDACCLK| CLKDIS_DISDMACLK| CLKDIS_DISADCCLK);
   ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG);  
   GptCfg(pADI_TM0,TCON_CLK_UCLK,TCON_PRE_DIV256, TCON_MOD_PERIODIC|TCON_UP_DIS|TCON_RLD_EN|TCON_ENABLE);  
   GptLd(pADI_TM0,31249);   
   NVIC_EnableIRQ(TIMER0_IRQn);        
}

这次使用的是定时器0,在初始化函数中前四行代码想必大家都有点印象了吧,没错!就是上一期中初始化LED引脚的程序。下一行代码是选用系统内部时钟,即16MHz,采用的256分频。然后接下来的一行写的是定时器的预装载值。这一次我的期望是LED每半秒闪烁一次,所以预装载值是31249,具体的计算公式如下:

定时时间=装载值*(分频数+1)/系统时钟

接触过stm32的大神对这个公式肯定再熟悉不过了,没接触过的呢要牢牢记住这个公式了哟~经过三下五除二的运算,预装载值就这样算出来了。最后一行代码是使能定时器的中断。这样就初始化完成了,接下来是对定时器中断函数的编写了。老规矩,先看代码。

void GP_Tmr0_Int_Handler()
{
	GptClrInt(pADI_TM0,TSTA_TMOUT);  
	DioTgl(pADI_GP1,0x08);   
}
由于只是单纯的控制LED的闪烁,所以中断函数非常简单。如果大家不会写定时器的中断函数名,可以去下面这个文件中进行查找,就会找到定时器0对应的中断函数名称。

在中断函数的第一行代码的意义是清除定时器0的溢出中断标志,这一点但凡是学过51单片机的人也都会知道的,所以这里就不再赘述了。下一行是控制LED闪烁,这的代码在上一期也介绍过了。然后在主函数中调用定时器初始化函数即可,将程序下载到开发板上就可以看到每半秒闪烁一次的LED了。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示