?? tim.h
字號:
/****************************************Copyright (c)**************************************************
**
**
** 杭州央海軟件科技有限公司
**
** http://www.armgcc.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: tim.h
** 創(chuàng) 建 人: 羅輝聯(lián)
** 創(chuàng)建日期: 2006年5月11日
** 描 述: 該文件包含了所有TIMER功能函數(shù)原型與所需要的常量
**
**--------------歷史版本--------------------------------------------------------------------------------
** 創(chuàng) 建 人: 羅輝聯(lián)
** 版 本: 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 //決定是否編譯該文件
/************************************** 宏定義,常量定義 ******************************************/
/* 說明: 通過帶參數(shù)的宏來訪問不同定時器的同一個名稱的寄存器 */
#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; /* 定時計數(shù)器時鐘源類型 */
typedef enum { TIM_RISING, TIM_FALLING } TIM_CLOCK_EDGES_T; /* 定時器時鐘觸發(fā)類型*/
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;/*定時器計數(shù)器控制類型 */
typedef enum { TIM_ICFA = 0x8000, /* 定時計數(shù)器狀態(tài)標志類型 */
TIM_OCFA = 0x4000,
TIM_TOF = 0x2000,
TIM_ICFB = 0x1000,
TIM_OCFB = 0x0800
} TIM_FLAGS_T;
typedef struct { UWORD16 pulse; /* PWM 特性參數(shù)結構定義 */
UWORD16 period;
} PWMI_PARAMETERS_T;
/********************************** 全局外部函數(shù)原型聲明 *****************************************/
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值 */
/* 配置定時計數(shù)器(開始,停止,清除) */
void TIM_CounterConfig(TIM_TYPES_T timer, TIM_COUNTEROPERATIONS_T operation);
/*********************************************************************************************************
;** 函數(shù)名稱: TIM_ClockSourceConfig
;** 功能描述: 配置指定定時器的時鐘類型
;**
;** 參 數(shù): timer: 選擇定時器類型(TIMER0, TIMER1, TIMER2, TIMER3)
;** : clock: TIM_INTERNAL-定時器使用系統(tǒng)內部時鐘FCLK2
;** TIM_EXTERNAL-定時器使用外部時鐘
;**
;** 返 回 值: None
;**
;** 作 者: 羅輝聯(lián)
;** 日 期: 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;
}
/*********************************************************************************************************
;** 函數(shù)名稱: TIM_ClockSourceObtain
;** 功能描述: 獲得指定定時器的時鐘類型
;**
;** 參 數(shù): timer: 選擇定時器類型(TIMER0, TIMER1, TIMER2, TIMER3)
;** : clock: TIM_INTERNAL-定時器使用系統(tǒng)內部時鐘FCLK2
;** TIM_EXTERNAL-定時器使用外部時鐘
;**
;** 返 回 值: 指定定時器使用時鐘類型(TIM_INTERNAL,TIM_EXTERNAL)
;**
;** 作 者: 羅輝聯(lián)
;** 日 期: 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;
}
/*********************************************************************************************************
;** 函數(shù)名稱: TIM_PrescalerConfig
;** 功能描述: 配置指定定時器預分頻系數(shù)
;**
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -