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

📄 rfid_timers.c

📁 找的一个用U2270B开发的射频卡项目文件
💻 C
字号:
// $Id: rfid_Timers.c,v 1.5 2006/10/20 15:26:44 tprescott Exp $
/*****************************************************
Project : rfid_Timers.c
Date    : 9/08/2006
Author  : Toby Prescott                   
Company : Atmel                           
Comments: AVR Studio GCC

Revisions: 
	v1.0 - Started for CodeVision 
	v2.2 - 3/8/06 Changed the I/O processing to interrupt based
	v2.6 - 9/8/06 Clean for WinAVR
*****************************************************/

#include "rfid_Timers.h"

unsigned volatile int RdTime = 0;			//Global var used for edgetiming
unsigned volatile char RFIDTimerFlag = 0;		//Global flag 
unsigned volatile char GenericTimerFlag = 0;		//Global flag 

unsigned char RFIDTimerValH = 0;      			//Local timer vars
unsigned char RFIDTimerValL = 0;
unsigned char LCDTimerVal = 150; 

volatile unsigned char RFIDTimerEdgeFlag = 1;				//Local flag

unsigned char brightCount = 0;    			//Local timer var used for backlighting 

/*********** Timer Function Description ****************/
// Timer 0 is used for the Real Time Clock(atml_Rtc.c) //
// Timer 1 is used for the RFID Read and Write timing  //
// Timer 2 is used for the LCD backlighting opperation //
// Timer 3 is used for a general timer                 //
/*******************************************************/

// *******************************************************************************
// *   Set RFIDTimer Count Value
// *******************************************************************************
void RFIDTimer_Set(unsigned char cValH, unsigned char cValL)
{
	RFIDTimerValH = 0xFF - cValH;
	RFIDTimerValL = 0xFF - cValL;
	
    // Same for mega128 and usb1287
	TCNT1H = RFIDTimerValH;
	TCNT1L = RFIDTimerValL;
} 

// *******************************************************************************
// *   RFIDTimer Initialization of for Write Routine
// *******************************************************************************
void RFIDTimer_WR_Init(void)
{ 
    #if defined (__AVR_ATmega128__)//mega128 
	TIMSK &= ~0x3C;     		//Disable TC1 interrupts
	TCNT1H = RFIDTimerValH;		//Load TC1 count value
	TCNT1L = RFIDTimerValL;
	TCCR1A = 0x00;				//Normal mode               	
	TCCR1B = 0x02; 				//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR1C = 0x00;				//Normal mode               	

	TIFR |= 0x3C;				//clear interrupt flags for TC1
	TIMSK |= 0x04;        		//set Timer/Counter1 Overflow Interrupt Enable                             
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK1 &= ~0x2F;     		//Disable TC1 interrupts
	TCNT1H = RFIDTimerValH;		//Load TC1 count value
	TCNT1L = RFIDTimerValL;
	TCCR1A = 0x00;				//Normal mode               	
	TCCR1B = 0x02; 				//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR1C = 0x00;				//Normal mode               	

	TIFR1 |= 0x2F;				//clear interrupt flags for TC1
	TIMSK1 |= 0x01;        		//set Timer/Counter1 Overflow Interrupt Enable                             
    #endif
}

// *******************************************************************************
// *   RFIDTimer Initialization of for Read Routine
// *******************************************************************************
void RFIDTimer_RD_Init(void)
{       
    #if defined (__AVR_ATmega128__)//mega128 
	TIMSK &= ~0x3C;     		//Disable TC1 interrupts
	TCNT1H = RFIDTimerValH;		//Load TC1 count value
	TCNT1L = RFIDTimerValL;
	TCCR1A = 0x00; 				//Normal mode              	
	TCCR1B &= ~ICP1;            //Look for Falling Edge on ICP1
	TCCR1B |= 0x02; 			//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR1C = 0x00;				//Normal mode               	

	TIFR |= 0x3C;				//clear interrupt flags for TC1
	TIMSK |= 0x24;        		//set Timer/Counter1 Input Capture & Interrupt Enable                             
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK1 &= ~0x2F;     		//Disable TC1 interrupts
	TCNT1H = RFIDTimerValH;		//Load TC1 count value
	TCNT1L = RFIDTimerValL;
	TCCR1A = 0x00; 				//Normal mode              	
	TCCR1B &= ~ICP1;            //Look for Falling Edge on ICP1
	TCCR1B |= 0x02; 			//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR1C = 0x00;				//Normal mode               	

	TIFR1 |= 0x2F;				//clear interrupt flags for TC1
	TIMSK1 |= 0x21;        		//set Timer/Counter1 Input Capture & Interrupt Enable                             
    #endif
} 

// *******************************************************************************
// *   Shutdown RFIDTimer
// *******************************************************************************
void RFIDTimer_Stop(void)
{
    #if defined (__AVR_ATmega128__)//mega128 
	TIMSK &= ~0x3C;     		//Disable TC1 interrupts
                                	// 
	TCCR1A = 0x00;               	
	TCCR1B = 0x00; 			//No clock source / Timer Stopped
	TCCR1C = 0x00;               	

	TIFR |= 0x3C;			//clear interrupt flags for TC1
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK1 &= ~0x2F;     		//Disable TC1 interrupts
                                	// 
	TCCR1A = 0x00;               	
	TCCR1B = 0x00; 			//No clock source / Timer Stopped
	TCCR1C = 0x00;               	

	TIFR1 |= 0x2F;			//clear interrupt flags for TC1
    #endif
}


// *******************************************************************************
// *   RFIDTimer Overflow Interrupt Routine
// *******************************************************************************
#if defined (__AVR_ATmega128__)//mega128 
ISR(TIMER1_OVF_vect)
#elif defined (__AVR_AT90USB1287__)//usb1287 
ISR(TIMER1_OVF_vect)
#endif
{   
	//Same for mega128 and usb1287
    TCNT1H = RFIDTimerValH; 		//Reset TC1 Count value
	TCNT1L = RFIDTimerValL;
	
	RFIDTimerFlag = 2; 		//Set Flag = 2 (overflow)
}

// *******************************************************************************
// *   RFIDTimer Input Capture Interrupt Routine
// *******************************************************************************
#if defined (__AVR_ATmega128__)//mega128 
ISR(TIMER1_CAPT_vect)
#elif defined (__AVR_AT90USB1287__)//usb1287 
ISR(TIMER1_CAPT_vect)
#endif
{   
	//Same for mega128 and usb1287
	TCNT1H = RFIDTimerValH;			//Reset TC1 Count value
	TCNT1L = RFIDTimerValL;
	
	RdTime = ICR1L;				//Store counter value for edge timing
	RdTime += ((unsigned int)ICR1H<<8);
	
	if(RFIDTimerEdgeFlag == 1)			//Check current Read flag bit state
	{
		TCCR1B |= ICP1;               	//Look for rising edge on ICP1
		RFIDTimerEdgeFlag = 0;               //Change Read flag state
	}
	else
	{
		TCCR1B &= ~ICP1;               	//Look for falling edge on ICP1
		RFIDTimerEdgeFlag = 1;		//Change Read flag state
	}
	RFIDTimerFlag = 1;				//Set TC1 Flag = 1 (edge)
}   

// *******************************************************************************
// *   Set LCDTimer Count Value
// *******************************************************************************
void LCDTimer_Set(unsigned char cVal){LCDTimerVal = 0xFF - cVal;} 

// *******************************************************************************
// *   LCD Timer Initialization Routine
// *******************************************************************************
void LCDTimer_Init(void)
{ 
    #if defined (__AVR_ATmega128__)//mega128 
	TIMSK &= ~0xC0;     			//Disable TC2 interrupts
	TCNT2 = 0xFF-LCDTimerVal;			//Load TC2 with count value
	TCCR2 = 0x02;               	//prescale the timer to be clock source / 8 to make it
                                	//exactly 1 us for every timer step        
	TIFR |= 0xC0;					//clear interrupt flags for TC2
	TIMSK |= 0x40;        			//set 8-bit Timer/Counter2 Overflow Interrupt Enable                             	
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK0 &= ~0x07;     			//Disable TC0 interrupts
	TCNT0 = 0xFF-LCDTimerVal;			//Load TC0 with count value
	TCCR0A = 0x00;               	//
	TCCR0B = 0x02;               	//prescale the timer to be clock source / 8 to make it
                                	//exactly 1 us for every timer step        
	TIFR0 |= 0x07;					//clear interrupt flags for TC0
	TIMSK0 |= 0x01;        			//set 8-bit Timer/Counter0 Overflow Interrupt Enable                             	
    #endif
}

// *******************************************************************************
// *   Shutdown LCDTimer
// *******************************************************************************
void LCDTimer_Stop(void)
{
    #if defined (__AVR_ATmega128__)//mega128 
	TIMSK &= ~0xC0;     		    //Disable TC2 interrupts
	TCCR2 = 0x00;               	//No clock source / Timer Stopped
	TIFR |= 0xC0;			        //clear interrupt flags for TC2
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK0 &= ~0xC0;     		    //Disable TC0 interrupts
	TCCR0A = 0x00;               	//No clock source / Timer Stopped
	TCCR0B = 0x00;               	//No clock source / Timer Stopped
	TIFR0 |= 0xC0;			        //clear interrupt flags for TC0
    #endif
}

// *******************************************************************************
// *   LCDTimer Overflow Interrupt Routine 
// *******************************************************************************
#if defined (__AVR_ATmega128__)//mega128 
ISR(TIMER2_OVF_vect)
{   
	TCNT2 = 0xFF-LCDTimerVal;			//Reload TC0 Count Value
#elif defined (__AVR_AT90USB1287__)//usb1287 
ISR(TIMER0_OVF_vect)
{   
	TCNT0 = 0xFF-LCDTimerVal;			//Reload TC0 Count Value
#endif

	if(brightPercent == 0){PORTC &= ~0x40;}	//Check for backlight off
	else if(brightCount == 10)		//Check for counter upper limit
	{
		brightCount = 0;			//Reset Backlighting counter to zero
		PORTC |= 0x40;				//Backlighting turned ON
	}
	else if(brightCount == brightPercent)	//When counter reaches specified percentage
	{
		PORTC &= ~0x40;				//Backlighting turned OFF for remaining counts
	}
	brightCount++; 					//Increment the backlighing counter
    
    if(ioActive==1)
    {
        #if defined (__AVR_ATmega128__)//mega128 
    	if((PINE & PWRDETECT128) == 0)			//Check that PWR switch is on		
        #elif defined (__AVR_AT90USB1287__)//usb1287 
    	if((PINC & PWRDETECT1287) == 0)			//Check that PWR switch is on		
        #endif
    	{
    		slp_EnterSleep();   			//If PWR switch is off, got to sleep
    	} 
    	else{;} 								//else continue startup
    }
}  

// *******************************************************************************
// *   GenericTimer  Initialization of for General Use
// *******************************************************************************
void GenericTimer_Init(void)
{ 
    #if defined (__AVR_ATmega128__)//mega128 
	ETIMSK &= ~0x37;     		//Disable TC3 interrupts
	TCCR3A = 0x00;				//Normal mode               	
	TCCR3B = 0x02; 				//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR3C = 0x00;				//Normal mode               	

	ETIFR |= 0x37;				//clear interrupt flags for TC3
	ETIMSK |= 0x04;        		//set Timer/Counter3 Overflow Interrupt Enable                             
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK3 &= ~0x2F;     		//Disable TC3 interrupts
	TCCR3A = 0x00;				//Normal mode               	
	TCCR3B = 0x02; 				//prescale the timer to be clock source / 8 to make it
                                //exactly 1 us for every timer step
	TCCR3C = 0x00;				//Normal mode               	

	TIFR3 |= 0x2F;				//clear interrupt flags for TC3
	TIMSK3 |= 0x01;        		//set Timer/Counter3 Overflow Interrupt Enable                             
    #endif
}

// *******************************************************************************
// *   Shutdown GenericTimer 
// *******************************************************************************
void GenericTimer_Stop(void)
{
    #if defined (__AVR_ATmega128__)//mega128 
	ETIMSK &= ~0x37;     		//Disable TC3 interrupts

	TCCR3A = 0x00;               	
	TCCR3B = 0x00; 				//No clock source / Timer Stopped
	TCCR3C = 0x00;               	

	ETIFR |= 0x37;				//clear interrupt flags for TC3
    #elif defined (__AVR_AT90USB1287__)//usb1287 
	TIMSK3 &= ~0x2F;     		//Disable TC3 interrupts

	TCCR3A = 0x00;               	
	TCCR3B = 0x00; 				//No clock source / Timer Stopped
	TCCR3C = 0x00;               	

	TIFR3 |= 0x2F;				//clear interrupt flags for TC3
    #endif
}

// *******************************************************************************
// *   GenericTimer Overflow Interrupt Routine
// *******************************************************************************
#if defined (__AVR_ATmega128__)//mega128 
ISR(TIMER3_OVF_vect)
#elif defined (__AVR_AT90USB1287__)//usb1287 
ISR(TIMER3_OVF_vect)
#endif
{   
	GenericTimerFlag = 2; 		//Set TC3 Flag = 2 (overflow)
}

void Timer_delay_us(unsigned int iDelay)
{
	//PORTF &= ~0x02;
	TCNT3 = 0xFFFF- iDelay;
	GenericTimer_Init();
	GenericTimerFlag = 0;            	// Clear Timer Flag
	while(!GenericTimerFlag); 		// Wait for overflow
	GenericTimer_Stop();
	//PORTF |= 0x02;	
}

void Timer_delay_ms(unsigned int iDelay)
{
	unsigned int i;

	for(i=0; i<iDelay;i++){Timer_delay_us(1000);}
}

⌨️ 快捷键说明

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