You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
	
	
		
			32 lines
		
	
	
		
			619 B
		
	
	
	
		
			C
		
	
			
		
		
	
	
			32 lines
		
	
	
		
			619 B
		
	
	
	
		
			C
		
	
| #include <avr/io.h>
 | |
| #include <avr/interrupt.h>
 | |
| #include "millis.h"
 | |
| 
 | |
| volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
 | |
| 
 | |
| // Timer0
 | |
| // 1ms IRQ
 | |
| // Used for millis() timing
 | |
| void timer0_init()
 | |
| {
 | |
|     TCCR0A = (1<<WGM01); //TIMER0 SET-UP: CTC MODE
 | |
|     TCCR0B = (1<<CS01)|(1<<CS00); // PS 1:64
 | |
|     OCR0A = 249; // 1ms reach for clear (16mz:64=>250kHz:250-=>1kHz)
 | |
|     TIMSK0 |= 1<<OCIE0A;	 //IRQ on TIMER0 output compareA
 | |
| }
 | |
| 
 | |
| ISR (TIMER0_COMPA_vect)
 | |
| {
 | |
| 	_millis++; // INC millis tick
 | |
| }
 | |
| 
 | |
| unsigned long millis(void)
 | |
| {
 | |
| 	unsigned long i;
 | |
| 	cli();
 | |
| 	// Atomic tick reading
 | |
| 	i = _millis;
 | |
| 	sei();
 | |
| 	return i;
 | |
| }
 |