📄 tim.h
字号:
/****************************************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 + -