⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tim.h

📁 这是一个定时器timer的驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                                      
**                                          
**                                杭州央海软件科技有限公司
**
**                                 http://www.armgcc.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: tim.h
** 创 建 人: 罗辉联
** 创建日期: 2006年5月11日
** 描    述: 该文件包含了所有TIMER功能函数原型与所需要的常量
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: 罗辉联
** 版    本: V1.0
** 日   期: 2006年5月11日
** 描   述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#ifndef __TIM_H
#define __TIM_H

#include "cpu_cfg.h"


    #ifdef __cplusplus
    extern "C" {
    #endif

#if EN_ARM_TIM > 0		//决定是否编译该文件

/************************************** 宏定义,常量定义 ******************************************/

									/* 说明: 通过带参数的宏来访问不同定时器的同一个名称的寄存器 */
#define TIMx_ICAR(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_ICAR)))
#define TIMx_ICBR(timer) 	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_ICBR)))
#define TIMx_OCAR(timer) 	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_OCAR)))
#define TIMx_OCBR(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_OCBR)))
#define TIMx_CNTR(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_CNTR)))
#define TIMx_CR1(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_CR1)))
#define TIMx_CR2(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_CR2)))
#define TIMx_SR(timer)  	(*((volatile unsigned short *)(0xE0009000+(timer)*0x1000+TIMn_SR)))


#define TIM_ECKEN_MASK  	0x0001
#define TIM_EXEDG_MASK  	0x0002

#define TIM_IEDGA_MASK  	0x0004
#define TIM_IEDGB_MASK  	0x0008

#define TIM_PWM_MASK    	0x0010

#define TIM_OMP_MASK    	0x0020

#define TIM_OCAE_MASK   	0x0040
#define TIM_OCBE_MASK   	0x0080

#define TIM_OLVLA_MASK  	0x0100
#define TIM_OLVLB_MASK  	0x0200

#define TIM_FOLVA_MASK  	0x0400
#define TIM_FOLVB_MASK  	0x0800

#define TIM_PWMI_MASK   	0x4000

#define TIM_EN_MASK     	0x8000

#define TIM_OCBIE_mask  	0x0080
#define TIM_ICBIE_MASK  	0x1000
#define TIM_TOE_MASK    	0x2000
#define TIM_ICAIE_MASK  	0x8000
#define TIM_OCAIE_mask  	0x4000

#define TIM_ICA_IT   		0x8000 									/* Channel A 输入捕捉中断  	*/
#define TIM_OCA_IT   		0x4000 									/* Channel A 输出比较中断   */
#define TIM_TO_IT    		0x2000 									/* 定时器溢出 IT  			*/
#define TIM_ICB_IT   		0x1000 									/* Channel B 输入捕捉中断  	*/
#define TIM_OCB_IT   		0x0800 									/* Channel B 输出比较中断 	*/



typedef enum { TIMER0 =0, TIMER1,TIMER2, TIMERT3 } TIM_TYPES_T;		/* 定时器类型 				*/

typedef enum { TIM_EXTERNAL, TIM_INTERNAL } TIM_CLOCKS_T;			/* 定时计数器时钟源类型 	*/

typedef enum { TIM_RISING, TIM_FALLING  } TIM_CLOCK_EDGES_T;		/* 定时器时钟触发类型*/

typedef enum { TIM_CHANNEL_A, TIM_CHANNEL_B } TIM_CHANNELS_T;		/* 定时器比较输出通道类型	*/

typedef enum { TIM_WITH_IT, TIM_WITHOUT_IT } TIM_IT_MODE_T;			/* 定时器中断控制类型 		*/

typedef enum { TIM_TIMING, TIM_WAVE } TIM_OC_MODES_T;				/* 定时器比较输出模式类型	*/

typedef enum { TIM_HIGH, TIM_LOW } TIM_LOGIC_LEVELS_T;				/* 输出电平类型 			*/

typedef enum { TIM_START, TIM_STOP, TIM_CLEAR } TIM_COUNTEROPERATIONS_T;/*定时器计数器控制类型 	*/

typedef enum { TIM_ICFA = 0x8000, 									/* 定时计数器状态标志类型 	*/
               TIM_OCFA = 0x4000,
               TIM_TOF  = 0x2000,
               TIM_ICFB = 0x1000,
               TIM_OCFB = 0x0800
             } TIM_FLAGS_T;
             

typedef struct { UWORD16 pulse;									/* PWM 特性参数结构定义 	*/
                 UWORD16 period;
               } PWMI_PARAMETERS_T;
               

/********************************** 全局外部函数原型声明 *****************************************/

void TIM_Reset(TIM_TYPES_T timer);							/* 复位指定的定时器 				*/
                                                            /* 配置指定定时器输入捕捉模式 		*/
void TIM_ICAPModeConfig (TIM_TYPES_T timer, TIM_CHANNELS_T channel, TIM_CLOCK_EDGES_T edge);

void TIM_OCMPModeConfig(TIM_TYPES_T 	   timer,			/* 配置指定定时器输出比较模式 		*/
                        TIM_CHANNELS_T 	   channel,
                        UWORD16        pulse_length,
                        TIM_OC_MODES_T     mode,
                        TIM_LOGIC_LEVELS_T level);
                        
void TIM_OPModeConfig (TIM_TYPES_T         timer,			/* 配置指定定时器的单个脉冲模式 	*/
                       UWORD16  pulse_length,
                       TIM_LOGIC_LEVELS_T level1,
                       TIM_LOGIC_LEVELS_T level2,
                       TIM_CLOCK_EDGES_T  edge );
                       
void TIM_PWMOModeConfig( TIM_TYPES_T 		timer,			/* 配置指定定时器的PWM输出模式 		*/
                         UWORD16        duty_cycle,
                         TIM_LOGIC_LEVELS_T	level1,
                         UWORD16        full_period,
                         TIM_LOGIC_LEVELS_T level2
                       );
                       										/* 配置指定定时器的PWM输入模式 		*/
void TIM_PWMIModeConfig (TIM_TYPES_T timer, TIM_CLOCK_EDGES_T  edge);

PWMI_PARAMETERS_T TIM_PWMIValue (TIM_TYPES_T timer);		/* 获得PWMI值 						*/
                                                            /* 配置定时计数器(开始,停止,清除) */
void TIM_CounterConfig(TIM_TYPES_T timer, TIM_COUNTEROPERATIONS_T operation);


/*********************************************************************************************************
;** 函数名称: TIM_ClockSourceConfig
;** 功能描述: 配置指定定时器的时钟类型 
;** 
;** 参    数: timer: 选择定时器类型(TIMER0, TIMER1, TIMER2, TIMER3)
;**         : clock: TIM_INTERNAL-定时器使用系统内部时钟FCLK2
;**                  TIM_EXTERNAL-定时器使用外部时钟 
;**          
;** 返 回 值: None
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月11日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void TIM_ClockSourceConfig (TIM_TYPES_T timer, TIM_CLOCKS_T clock )
{
	if(clock==TIM_EXTERNAL) 
		TIMx_CR1(timer) |=TIM_ECKEN_MASK; 
	else 
		TIMx_CR1(timer) &=~TIM_ECKEN_MASK;
}
/*********************************************************************************************************
;** 函数名称: TIM_ClockSourceObtain
;** 功能描述: 获得指定定时器的时钟类型 
;** 
;** 参    数: timer: 选择定时器类型(TIMER0, TIMER1, TIMER2, TIMER3)
;**         : clock: TIM_INTERNAL-定时器使用系统内部时钟FCLK2
;**                  TIM_EXTERNAL-定时器使用外部时钟 
;**          
;** 返 回 值: 指定定时器使用时钟类型(TIM_INTERNAL,TIM_EXTERNAL)
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月11日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline TIM_CLOCKS_T TIM_ClockSourceObtain( TIM_TYPES_T timer )
{
	return ( TIMx_CR1(timer) & TIM_ECKEN_MASK) == 0 ? TIM_INTERNAL : TIM_EXTERNAL;
}
/*********************************************************************************************************
;** 函数名称: TIM_PrescalerConfig
;** 功能描述: 配置指定定时器预分频系数 
;** 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -