AutoChips的AC781X系列微控制器片上资源丰富,有些外设还独具特色,比如周期性中断定时器——TIMER,相邻通道之间可以相互勾搭能够产生更长的延时。本次实验即使用了其中的两个通道TIMER2与TIMER3,由TIMER2产生1ms计时脉冲并同时链接至TIMER3,当TIMER3累计收到10个脉冲后产生中断。为便于观察,在PA0、PA1端口连接了逻辑分析仪。工程依然使用了“AutoGen Studio”创建。下面是实验过程:
一、实验资源
1、AC7811-MINI开发板;
2、AutoGen Studio 1.2.0;
3、KEIL 5.28.0.0;
4、USB转串口工具;
5、逻辑分析仪
二、资源简介
AutoChips的AC781X周期性中断定时器(TIMER)最多支持8个通道,其中的TIMER0、TIMER1是32位计数器,其余TIMER2~TIMER7均为16位计数器,从数据资料上了解到应该是向下的减计数器,可生成中断并具有链(chain)模式。
用到定时器资源首先要了解一下时钟系统。 AutoChips的AC781X系列微控制器时钟系统描述如下:
后面的三张局部截图是与TIMER相关的时钟路线,实验中使用“AutoGen Studio”也是进行了相应的时钟配置,采用外部晶振(8MHz)作为系统时钟源,经PLL倍频、各级分频等一系列折腾后生成SYS_CLK(96MHz),再经APB_DIV分频后产生PCLK(48MHz)时钟,TIMER计数脉冲亦来自于此时钟(48MHz)。在此基础上计算了TIMER最大计时时基32位定时器:(2^32-1) * 1/48000000=89.4784853125s;16位定时器:(2^16-1) * 1/48000000=0.0013653125s。下面是“AutoGen Studio”时钟配置界面:
三、代码实现
代码参考了DEMO,工程中配置了两个通道TIMER2和TIMER3,由TIMER2产生1ms计时中断,为便于观察设置了中断产生后PA0端口输出翻转;TIMER3被配置为“链接”至TIMER2,每当TIMER2产生一个1ms计时中断后TIMER3便会发生一次向下计数,当TIMER3计数期结束即会产生中断,使得PA1端口输出翻转便于观察。下面是文档中关于“chain”的描述:
主要代码如下:
/* TIMER2 init function */
void ATC_TIMER2_Init(void)
{
TIMER_ConfigType timConfig;
TIMER_SetCallback(TIMER2, TIMER2_IRQHandler_Callback);
MSP_TIMER_Init(TIMER2);
timConfig.timerEn = 1;
timConfig.interruptEn = 1;
timConfig.linkMode = 0;
timConfig.loadValue = (48000-1);
TIMER_Init(TIMER2, &timConfig);
TIMER_SetCallback(TIMER2, TIMER_CallBack);
}
/* TIMER3 init function */
void ATC_TIMER3_Init(void)
{
TIMER_ConfigType timConfig;
TIMER_SetCallback(TIMER3, TIMER3_IRQHandler_Callback);
MSP_TIMER_Init(TIMER3);
timConfig.timerEn = 1;
timConfig.interruptEn = 1;
timConfig.linkMode = 1;
timConfig.loadValue = (10-1);
TIMER_Init(TIMER3, &timConfig);
TIMER_SetCallback(TIMER3, TIMER_CallBack);
}
上面的代码是由“AutoGen Studio”创建生成的,不过最后的“TIMER_SetCallback(TIMER2(3), TIMER_CallBack)”是要自己写上的,当然由他呼叫的那个“TIMER_CallBack”也得自己比划。下面就是:
/* USER CODE BEGIN 1 */
void TIMER_CallBack(uint8_t TIMERX)
{
if(TIMER_GetIntFlag(TIMER2))
{
TIMER_ClrIntFlag(TIMER2);
TIMER2_OUT = !TIMER2_OUT;
}
if(TIMER_GetIntFlag(TIMER3))
{
TIMER_ClrIntFlag(TIMER3);
TIMER3_OUT = !TIMER3_OUT;
}
}
/* USER CODE END 1 */
四、实验结果
五、实验总结
通过本次实验对TIMER资源有了进一步的了解和认识,尤其是“链”功能比较有特点,多级链接可以形成超长延时。另外文中有些描述可能存在错误,还请朋友们指教。
六、附件
TIMER.rar
(973.85 KB)
|