我是靠谱客的博主 沉静盼望,最近开发中收集的这篇文章主要介绍玩转TM4C1294XL(3)——Timer定时器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.简介
       简单介绍芯片内部的通用定时器,使用通用定时器进行一个周期性定时中断,中断中让灯闪烁。本人是边学习边记录,内容仅作参考,有错误的地方请见谅。
2.定时器介绍
       本部分内容参考自TI官方手册,任何芯片最权威的资料都是官方手册。像TI、ST、NXP等这些大厂的手册资料和例程都是非常完善的,使用这些资料进行参考开发就完全够用了。
       芯片内部的通用定时器功能非常的多,先来简单的看一下手册里面的介绍。
在这里插入图片描述

图1 手册中timer的介绍

       定时器可以作为普通的定时器,可以作为一个RTC,可以触发uDMA,可以触发ADC,可以输出PWM信号,可以输入捕获计数等。这边先来介绍一下定时器的最基本功能,定时功能。其他的功能像触发ADC的功能后面介绍ADC的时候再进行介绍。由于这个芯片有独立的RTC外设和PWM外设,因此我不会将Timer用在这些模式,也不会去介绍。
       芯片内部有8个定时器,有16bit/32bit两种模式,16bit模式时一个定时器会分裂成两个独立的16bit定时器,这样最多就有16个16bit的定时器可以使用,当16bit的定时器使用时可以有个8bit的分频系数可以进行设置,根据设置的分频系数和定时值来确定定时时间。当作32bit定时器时就没有分频系数的设置了,当然32bit的定时器也不需要用到分频系数这个设置,32bit的定时值对于120M的主频来说本身就能定时很长的时间了。不管是16bit还是32bit的定时器都可以设置定时模式为单次模式还是周期模式,计数方式是向下计数还是向上计数。

3.定时器初始化配置
       配置实现一个32bit的周期性定时器,开启定时器中断。

void bsp_InitTimer(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); //使能定时器时钟
    TimerConfigure(TIMER1_BASE,  TIMER_CFG_PERIODIC | TIMER_CFG_A_PERIODIC); //32bit 周期定时器
    TimerLoadSet(TIMER1_BASE, TIMER_A, SystemCoreClock); //设置重装载值为系统时钟,定时时间1s。

    IntMasterEnable(); //Enable processor interrupts.

    TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); //使能TIMER1_A超时中断

    IntEnable(INT_TIMER1A);

    TimerEnable(TIMER1_BASE, TIMER_A); //Enable Timer1A.
}

//TIMER1A 中断函数
void TIMER1A_Handler(void)
{
    TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
    Led3_Toggle();
}

       代码中都有相应的注释比较好理解,简单的分析一下。TimerConfigure函数来配置定时器,通过后面的参数组合来配置定时器,比如想要将定时器分裂成两个16bit定时器时增加一个参数TIMER_CFG_SPLIT_PAIR即可。定时器工作在32bit模式时,只能使用TimerA,相应的中断函数也需要使用TimerA的。定时器的默认时钟源就是系统时钟,所以这边设置重装值为系统时钟频率值就是定时1s。

定时器配置Keil工程下载

最后

以上就是沉静盼望为你收集整理的玩转TM4C1294XL(3)——Timer定时器的全部内容,希望文章能够帮你解决玩转TM4C1294XL(3)——Timer定时器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部