7210|10

164

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【TIVA C Launchpad 学习笔记六】定时器四种模式:单次计时,周期计时,数捕获,计时捕获 [复制链接]

 
模式一&模式二:单次计时&周期计时/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:16位定时器,单次定时模式和周期性定时模式
程序说明:
编程者:Linchpin
********************************************/
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"




int main(void)
{
        SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
        //5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟40MHZ
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        //使能GPIOF外设
        GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
        //使能TIMER0


        //TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT);//单次计数模式
        TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期性计数模式


        TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 10 - 1);//计数频率10HZ
    IntEnable(INT_TIMER0A);//NVIC
        //使能TIMER0A
        TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
        //TIMEOUT标志位触发中断
        IntMasterEnable();
    //master interrupt enable API for all interrupts
        TimerEnable(TIMER0_BASE, TIMER_A);
    //TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
        while(1)
        {
        }
}


void Timer0IntHandler(void)
{


        TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    //清除标志位
        if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_2))
        {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
        }
        else
        {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
        }
}





模式三:计数捕获
/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:16位定时器,计数捕获模式,递增计数模式
程序说明:捕获引脚PB6,当捕获边沿数达到Match时产生中断
编程者:Linchpin
********************************************/
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"


int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
        //5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟40MHZ
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
            //使能TIMER0 32位(TIMER0A16位+TIMER0B16位)
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        //使能GPIOF和GPIOC外设
        GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_6);
        GPIOPinConfigure(GPIO_PB6_T0CCP0);    //#define GPIO_PC4_WT0CCP0   0x00021007
        GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_6);


        //计数捕获模式,上升沿捕获,Two half-width timers
        TimerConfigure(TIMER0_BASE,TIMER_CFG_A_CAP_COUNT_UP|TIMER_CFG_SPLIT_PAIR);
        //捕获模式,A定时器,上升沿捕获,增计数模式,到达匹配值后可自动清零
        TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
        //TimerLoadSet(TIMER0_BASE, TIMER_A, 6);//溢出值6
        TimerMatchSet(TIMER0_BASE, TIMER_A, 3);//匹配值3
       
    IntEnable(INT_TIMER0A);
        //使能TIMER0A
        TimerIntEnable(TIMER0_BASE, TIMER_CAPA_MATCH);
        //定时器A捕获事件触发中断
        IntMasterEnable();
    //master interrupt enable API for all interrupts
        TimerEnable(TIMER0_BASE, TIMER_A);
    //TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
        while(1)
        {
        }
}


void Timer0IntHandler(void)
{


        TimerIntClear(TIMER0_BASE,TIMER_CAPA_MATCH);
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 14);
    SysCtlDelay(SysCtlClockGet() / 30);//100ms
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);


}




模式四:计时捕获
/*******************************************
开发坏境:CCSv5.4
开发板:TIVA C Launchpad(TM4C123GH6PM)
程序功能:16位定时器,计时捕获模式
程序说明:捕获引脚PB6
编程者:Linchpin
********************************************/
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"


int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
        //5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟40MHZ
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
            //使能TIMER0 32位(TIMER0A16位+TIMER0B16位)
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        //使能GPIOF和GPIOC外设
        GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_6);
        GPIOPinConfigure(GPIO_PB6_T0CCP0);    //#define GPIO_PC4_WT0CCP0   0x00021007
        GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_6);


        TimerConfigure(TIMER0_BASE,TIMER_CFG_A_CAP_TIME_UP|TIMER_CFG_SPLIT_PAIR);//计时捕获模式,上升沿捕获
        TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
        //捕获模式,A定时器,上升沿捕获
    IntEnable(INT_TIMER0A);
        //使能TIMER0A
        TimerIntEnable(TIMER0_BASE, TIMER_CAPA_EVENT);
        //定时器A捕获事件触发中断
        IntMasterEnable();
    //master interrupt enable API for all interrupts
        TimerEnable(TIMER0_BASE, TIMER_A);
    //TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
        while(1)
        {
        }
}


void Timer0IntHandler(void)
{


        TimerIntClear(TIMER0_BASE,TIMER_CAPA_EVENT);
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
    SysCtlDelay(SysCtlClockGet() / 30);//100ms
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 14);


}




最新回复

楼主 周期性定时模式里面  TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 10 - 1);怎么是10Mhz 系统时钟是40Mhz 40/10=4啊 怎么是等于10呢  详情 回复 发表于 2018-9-30 23:29
 
点赞 关注(3)

回复
举报

4

帖子

2

TA的资源

一粒金砂(初级)

沙发
 
太给力了,值得珍藏
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢分享啊,调捕获调了好久了
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主,能捕获脉冲时间吗?
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主,能捕获脉冲宽度吗?
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢卤煮, 好帖啊
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
希望楼主持续更新啊
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢楼主的分享
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
赞一个,辛苦了
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

10
 
感谢楼主分享!!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 
楼主 周期性定时模式里面  TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 10 - 1);怎么是10Mhz 系统时钟是40Mhz 40/10=4啊 怎么是等于10呢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表