forked from mfulz_github/qmk_firmware

Remove use of avr-libc specific ATOMIC_BLOCK, replace with a new per-architecture set of inline functions to retrieve and manipulate the global interrupt enable bit for each architecture. Add in documentation for the USB controller common interrupt routine which must be linked to the interrupt controller in the user application on the AVR32 UC3 architecture.
39 lines
614 B
C
39 lines
614 B
C
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <avr/interrupt.h>
|
|
#include <avr/io.h>
|
|
#include <avr/sfr_defs.h>
|
|
|
|
#include "clock.h"
|
|
|
|
//Counted time
|
|
volatile clock_time_t clock_datetime = 0;
|
|
|
|
//Overflow interrupt
|
|
ISR(TIMER1_COMPA_vect, ISR_BLOCK)
|
|
{
|
|
clock_datetime += 1;
|
|
}
|
|
|
|
//Initialise the clock
|
|
void clock_init()
|
|
{
|
|
OCR1A = (((F_CPU / 1024) / 100) - 1);
|
|
TCCR1B = ((1 << WGM12) | (1 << CS12) | (1 << CS10));
|
|
TIMSK1 = (1 << OCIE1A);
|
|
}
|
|
|
|
//Return time
|
|
clock_time_t clock_time()
|
|
{
|
|
clock_time_t time;
|
|
|
|
USB_INT_GlobalDisable();
|
|
time = clock_datetime;
|
|
USB_INT_GlobalEnable();
|
|
|
|
return time;
|
|
}
|
|
|