TA的每日心情 | 奋斗 2020-5-27 15:41 |
---|
签到天数: 868 天 连续签到: 1 天 [LV.10]以坛为家III
|
你一定对定时器不陌生把,定时闹钟,定时开、关机,等等。在需要控制时间的场合,一定少不了定时器的身影。
定时器多种多样,种类繁多,这里我要学习的是ADuCM360芯片的内部定时器。
ADuCM360 内部有两个完全一样的、通用目的、16位向上/向下计数器 Timer0 and Timer1。由4个可选的不同的、可向下预分频(1、16、256、32768)的时钟源驱动.,能工作在自由运行模式和周期模式。
每个定时器可捕获15个不同的事件。
定时器包括 16位装载值寄存器TxLD、16位计数值TxVAL、控制寄存器TxCON、清除中断寄存器TxCLRI、捕获寄存器TxCAP、状态寄存器TxSTA。
MINI开发板外部资源只有PTD电阻和一个LED,遗憾的是所有的引出端没有排针。需要你自己焊接。
使用板上的32.768KHz晶振 ,让定时器产生0.5s定时,驱动LED每秒闪烁1次。
定时器初始化函数
void Time0_INIT (void){ GptLd(pADI_TM0, 1023); //32.768k 时钟16分频后除以2-1==0.5s 向下计数到0产生中断 GptCfg(pADI_TM0, TCON_CLK_LFXTAL, TCON_PRE_DIV16, TCON_MOD_PERIODIC|TCON_UP_DIS|TCON_RLD_EN|TCON_ENABLE);//外部晶振32.768k }结果LED怎么也不正常,这个时候仿真器在调试时才显得强大,DEBUG单步执行观察T0定时器的控制寄存器和状态寄存器,明明各项参数都设置的不错,就是中断状态不 改变,也就是说进不了中断。看了好几遍手册,查看了程序函数参数,也没有找到错误,考虑到定时器有4个时钟驱动源,好吧,换成系统时钟试试
void Time0_INIT (void){ GptLd(pADI_TM0, 31249); //16M时钟256分频后除以2-1==0.5S 向下计数到0产生中断 GptCfg(pADI_TM0, TCON_CLK_UCLK, TCON_PRE_DIV256, TCON_MOD_PERIODIC|TCON_UP_DIS|TCON_RLD_EN|TCON_ENABLE); //UCLK为16M } 编译调试运行,期待的每秒闪烁一次的LED开始闪烁了。这个圆柱形的外部晶振真不给力啊,不起振,坏的?
源代码如下:
#include <stdio.h>#include <string.h>#include <aducm360.h>#include <ClkLib.h>#include <WdtLib.h>#include <GptLib.h>#include <IntLib.h>#include <DioLib.h>void Time0_INIT(void ); int main (void){ DioOen(pADI_GP1,0x8); //设置P1.3输出 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); // Select CD0 for CPU clock Time0_INIT(); // 定时器初始化 NVIC_EnableIRQ(TIMER0_IRQn); //中断使能 while (1) { }}void Time0_INIT (void){ GptLd(pADI_TM0, 31249); //预装载计数初值 GptCfg(pADI_TM0, TCON_CLK_UCLK, TCON_PRE_DIV256, TCON_MOD_PERIODIC|TCON_UP_DIS|TCON_RLD_EN|TCON_ENABLE); //配置定时器时钟源为系统时钟、256分频、周期计数、向下计数、重载计数值、定时器使能}void GP_Tmr0_Int_Handler (){ GptClrInt(pADI_TM0,TSTA_TMOUT); //清除定时器溢出中断标志 DioTgl(pADI_GP1,0x8);} 通过简单的中断,实现了led闪烁。了解了定时器工作原理。和其它单片机比,由于ADu360专为采集数据而生,定时器简单易用。 |
|