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

📄 lpc_timer.h

📁 深圳优龙公司LPC2148开发板(与iar公司开发板基本相同)的原理图和配套样例程序
💻 H
字号:
#ifndef __LPC_TIMER_H
#define __LPC_TIMER_H

/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2003
 *
 *    File name   : LPC_Timer.h
 *    Description : 
 *
 *    History :
 *    1. Date: July 08, 2004											  
 *  	 Author: Wilson Liu 												   
 *  	 Description: Create the basic function    
 *
 *    2. Date: August 12, 2004  											
 *  	 Author: Shawn Zhang												 
 *  	 Description: Re-write some API interface
 *
 *    3. Data   	 : Oct 10, 2004 
 *  	 Author 	 : Stanimir Bonev
 *  	 Description : Modify some function and interface  
 *
 *    $Revision: 1.1 $
 **************************************************************************/

#include <includes.h>

/* Timer Control register bit descriptions */
#define TCR_ENABLE_BIT  0
#define TCR_RESET_BIT   1

// The channel name which is used in matching, in fact they represent 
// corresponding Match Register 
#define CH_MAXNUM   	4
#define CH0 			0
#define CH1 			1
#define CH2 			2
#define CH3 			3

// The channel name which is used in capturing, in fact they represent 
// corresponding Capture Register 
#define CPCH_MAXNUM 	4
#define CPCH0   		0
#define CPCH1   		1
#define CPCH2   		2
#define CPCH3   		3

//The actions when matching
#define TimerAction_Interrupt   0x1
#define TimerAction_ResetTimer  0x2
#define TimerAction_StopTimer   0x4

//Interrupt source type
#define TIMERMR0Int 	0x01
#define TIMERMR1Int 	0x02
#define TIMERMR2Int 	0x04
#define TIMERMR3Int 	0x08
#define TIMERCR0Int 	0x10
#define TIMERCR1Int 	0x20
#define TIMERCR2Int 	0x40
#define TIMERCR3Int 	0x80

#define TIMERALLInt 	0xFF

// TIMER Chanel def
typedef enum
{
	TIMER0		= 0 ,
	TIMER1
} LPC_TimerChanel_t;

// External Match Control Action Type
typedef enum
{
	DONOTHING		= 0 ,
	SETTOLOW ,
	SETTOHIGH ,
	TOGGLE
} LPC_Timer_ExtAction_t;

// Capture Control Action Type
typedef enum
{
	TimerCPTrigger_Rising		= 1 ,
	TimerCPTrigger_Falling
} LPC_Timer_CapureAction_t;

typedef struct
{
	bool Enable;			
	unsigned char Action;
	unsigned long TimeValue;
	void ( * Fnpr )( void* );
	void* FnprArg;
} LPC_Timer_MatchChannel_t;

typedef struct
{
	bool Enable;			
	unsigned char TriggerType;
	bool EnableInt;
	void ( * Fnpr )( void* );
	void* FnprArg;

	long CPValue;
} LPC_Timer_CaptureChannel_t;

typedef struct
{
	unsigned long Precision;
	unsigned long Prescaler;
	LPC_Timer_MatchChannel_t MatchCH[CH_MAXNUM];
	LPC_Timer_CaptureChannel_t CaptureCH[CPCH_MAXNUM];

	LPC_Timer_ExtAction_t ExtAction[CH_MAXNUM];
	unsigned char ExtBitValue[CH_MAXNUM];			// low or high, only 1 bit
} LPC_Timer_Config_t;


/* Declare functions */
int TIMER_Init( LPC_TimerChanel_t DevNum , unsigned long precision );
int TIMER_Reset( LPC_TimerChanel_t DevNum );
int TIMER_Start( LPC_TimerChanel_t DevNum );
int TIMER_Stop( LPC_TimerChanel_t DevNum );

int TIMER_SetMatchAction( LPC_TimerChanel_t DevNum , unsigned int CHNum , unsigned int action ,
	unsigned long TimeValue , void ( *Fnpr ) ( void* ) , void* FnprArg , LPC_Timer_ExtAction_t ExtAction );

int TIMER_GetTimerMatch( LPC_TimerChanel_t DevNum , unsigned int MRNum , unsigned int* pAction ,
	unsigned int* pMatchValue );

int TIMER_GetTimerExternalMatch( LPC_TimerChanel_t DevNum , unsigned int MATNum , unsigned int* pAction ,
	unsigned int* pExternalMatchValue );

int TIMER_SetCaptureAction( LPC_TimerChanel_t DevNum , unsigned char CPCHNum , unsigned char  TriggerType ,
	bool EnableInt , void ( *Fnpr ) ( void* ) , void* FnprArg );

int TIMER_GetTimerCapture( LPC_TimerChanel_t DevNum , unsigned int CRNum , unsigned int* pCaptureValue );

unsigned long TIMER_CheckIntType( LPC_TimerChanel_t DevNum );
unsigned long TIMER_ClearInt( LPC_TimerChanel_t DevNum , int IntType );

unsigned long TIMER_GetREGValue_CR( LPC_TimerChanel_t DevNum , int CRNum );
unsigned long TIMER_GetREGValue_TC( LPC_TimerChanel_t DevNum );
unsigned long TIMER_GetPrescaler( LPC_TimerChanel_t DevNum );

void TIMER0_ISR();
void TIMER1_ISR();

// Time defenition
#define sec_T0  *(SYS_GetFpclk()/TIMER_GetPrescaler(TIMER0))
#define msec_T0 *(SYS_GetFpclk()/(TIMER_GetPrescaler(TIMER0)*1000))
#define usec_T0 *(SYS_GetFpclk()/(TIMER_GetPrescaler(TIMER0)*1000000))

#define sec_T1  *(SYS_GetFpclk()/TIMER_GetPrescaler(TIMER1))
#define msec_T1 *(SYS_GetFpclk()/(TIMER_GetPrescaler(TIMER1)*1000))
#define usec_T1 *(SYS_GetFpclk()/(TIMER_GetPrescaler(TIMER1)*1000000))

#endif //__LPC_Timer_H

⌨️ 快捷键说明

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