//文件timer5.h
#ifndef _timer5_H_
#define _timer5_H_
#define TIM5_DIV1 (uint8)0
#define TIM5_DIV2 (uint8)1
#define TIM5_DIV4 (uint8)2
#define TIM5_DIV8 (uint8)3
#define TIM5_DIV16 (uint8)4
#define TIM5_DIV32 (uint8)5
#define TIM5_DIV64 (uint8)6
#define TIM5_DIV128 (uint8)7
#define TIM5_UpDate (unsigned char)0x01 //更新中断通道
#define TIM5_InChanel1 (unsigned char)0x02
#define TIM5_InChanel2 (unsigned char)0x04
#define TIM5_InChanel3 (unsigned char)0x08
#define TIM5_InDir_UP (unsigned char)0
#define TIM5_InDir_DOWN (unsigned char)1
#define TIM5_IEN_ENB TIM5_CR1 |= 0X01 ; //开启定时器
#define TIM5_IEN_OFF TIM5_CR1 &= ~0X01 ; //关闭定时器
extern void Init_TIM5_Base(uint16 Tcon,uint8 Pscr) ;
extern void Init_TIM5_InSet(void) ;
extern void TIM5_InChanelEnb(uint8 Chanel,uint8 en) ;
extern void TIM5_InDirection(uint8 Chanel,uint8 Dircetion);
extern void TIM5_InEnb(uint8 en) ;
extern void TIM5_IntEnb(uint8 Chanel,uint8 en) ;
extern void TIM5_Enb(uint8 en) ;
#endif
//文件timer5.c
#include "global.h"
#include "timer5.h"
#define Init_TIM5_Base_CALL
/*
#define Init_TIM5_InSet_CALL
#define TIM5_InDirection_CALL
#define TIM5_InChanelEnb_CALL
*/
#define TIM5_IntEnb_CALL
//#define TIM5_InEnb_ CALL
#define TIM5_Enb_CALL
// ***** TIM5 16位普通定时器 ********
//*************************************
// 函数名称:Init_Timer5_Timer
// 函数功能:TIM5作定时器用时初始化
// 入口参数:
// 出口参数:无
/***************************************/
#ifdef Init_TIM5_Base_CALL
void Init_TIM5_Base(uint16 Tcon,uint8 Pscr)
{
// 禁止产生更新事件
TIM5_EGR = 0x00;
//计数器时钟=主时钟/16=16MHZ/16 = 1U
// 相当于计数器周期为1uS
TIM5_PSCR = Pscr;
//设定重装载时的寄存器值
TIM5_ARRH = (Tcon >> 8) & 0xff;//0X07;
TIM5_ARRL = Tcon & 0xff ;//0XD0;
// 设定计数器的初值 定时周期=(ARR+1)*8=16320uS
TIM5_CNTRH = 0;
TIM5_CNTRL = 0;
// b0 = 1,允许计数器工作 b1 = 0,允许更新
// 设置控制器,启动定时器
TIM5_CR1 = 0x00;
}
#endif //Init_TIM5_Base_CALL
//*************************************
// 函数名称:Init_Timer5_In
// 函数功能:TIM5作输入捕捉使用时初始化
// 入口参数:
// 出口参数:无
/***************************************/
#ifdef Init_TIM5_InSet_CALL
void Init_TIM5_InSet(void)
{
TIM5_CCER1 &= ~(SETB0 | SETB4) ; //禁止输入捕获1 2 3
TIM5_CCER2 &= ~SETB0 ;
// 采样频率=Fmst N = 8
// 每个边沿捕获一次
TIM5_CCMR1 |= 0x30 ;
TIM5_CCMR2 |= 0x30 ;
TIM5_CCMR3 |= 0x30 ;
//通道映射方向
TIM5_CCMR1 |= 0x01 ;//IC1映射在TI1FP1
// TIM5_CCMR1 |= 0x02 ;//IC1映射在TI2FP1
// TIM5_CCMR2 |= 0x01 ;//IC2映射在TI2FP2
TIM5_CCMR2 |= 0X02 ;//IC2映射在TI1FP2
TIM5_CCMR3 = 0x31 ;//IC3映射在TI3FP3
TIM5_SMCR = 0X04 ; //触发方式复位
//捕捉方向
TIM5_InDirection(TIM5_InChanel1,TIM5_InDir_UP) ;
TIM5_InDirection(TIM5_InChanel2,TIM5_InDir_DOWN) ;
TIM5_InDirection(TIM5_InChanel3,TIM5_InDir_UP) ;
//捕捉通道使能
TIM5_InChanelEnb((TIM5_InChanel1 | TIM5_InChanel2) ,ENB) ;
TIM5_InChanelEnb(TIM5_InChanel3 ,DIS) ;
}
#endif //Init_TIM5_InSet_CALL
//*************************************
// 函数名称:TIM5_InDirection
// 函数功能:TIM5捕捉方向设置
// 入口参数:通道号,捕捉方向
// 出口参数:无
/***************************************/
#ifdef TIM5_InDirection_CALL
void TIM5_InDirection(uint8 Chanel,uint8 Dircetion)
{
if(Chanel == TIM5_InChanel1) //通道1
{
if(Dircetion