📄 time_16_count.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: time_16_count.c
** Last modified Date: 2007-04-25
** Last Version: v1.0
** Description: Stellaris系列单片机定时器0库函数的操作
** 使用定时器实现输入边沿计数并产生中断
**------------------------------------------------------------------------------------------------------
** Created By: Pan Yi Fei
** Created date: 2007-04-25
** Version: v1.0
** Descriptions: KEY1输入边沿,由定时器递减计数,
** 当计数值和匹配值相等时,进入中断:LED1的状态翻转。
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_ints.h"
#include "gpio.h"
#include "sysctl.h"
#include "systick.h"
#include "timer.h"
#include "interrupt.h"
#define KEY1 GPIO_PIN_4 //定义KEY1 :PD4
#define LED1 GPIO_PIN_7 //定义LED1 :PD7
void Timer0A_ISR (void)
{
TimerIntClear(TIMER0_BASE, TIMER_CAPA_MATCH); // 清除定时器0中断。
TimerLoadSet(TIMER0_BASE, TIMER_A, 10); // 重装定时器装载值为10
GPIOPinWrite(GPIO_PORTD_BASE, LED1,GPIOPinRead(GPIO_PORTD_BASE, LED1) ^ LED1);
// 翻转GPIO PD7 端口。
TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0。
}
int main(void)
{
SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ ); // 设定晶振为时钟源。
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设。
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOD ); // 使能GPIO D口外设。
IntMasterEnable(); // 处理器使能。
GPIOPinTypeTimer( GPIO_PORTD_BASE,KEY1); //设置PD4为CCP0功能输入口
GPIODirModeSet(GPIO_PORTD_BASE, LED1,GPIO_DIR_MODE_OUT);
// 设置 GPIO PD4为输出口。
GPIOPinWrite( GPIO_PORTD_BASE, LED1, ~LED1 ); // 点亮LED1
TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_CAP_COUNT);
// 设置定时器0为16位定时器配置,边沿计数捕获模式
TimerControlEvent(TIMER0_BASE,TIMER_A,TIMER_EVENT_NEG_EDGE); //设置为下降沿捕获
TimerLoadSet(TIMER0_BASE, TIMER_A, 10); // 设置定时器装载值为10
TimerMatchSet(TIMER0_BASE,TIMER_A, 6); // 设置定时器匹配值为6
TimerIntEnable(TIMER0_BASE, TIMER_CAPA_MATCH); // GPTM捕获B的匹配中断使能
TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器并开始等待边沿事件
IntEnable(INT_TIMER0A); // 使能定时器0
while(1); // 等待中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -