/***********************************************************************/ /* */ /* Heptagon */ /* */ /* Gwenael Delaval, LIG/INRIA, UJF */ /* Leonard Gerard, Parkas, ENS */ /* Adrien Guatto, Parkas, ENS */ /* Cedric Pasteur, Parkas, ENS */ /* Marc Pouzet, Parkas, ENS */ /* */ /* Copyright 2012 ENS, INRIA, UJF */ /* */ /* This file is part of the Heptagon compiler. */ /* */ /* Heptagon is free software: you can redistribute it and/or modify it */ /* under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* Heptagon is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with Heptagon. If not, see */ /* */ /***********************************************************************/ /* Pervasives module for the Heptagon compiler */ #ifndef DECADES_AVR_H #define DECADES_AVR_H #ifdef __AVR__ #include #include #include #ifndef F_CPU #error "F_CPU must be defined" #endif void run_timers(); ISR(TIMER0_OVF_vect) { run_timers(); } static inline void set_ocr1a(uint16_t value) { OCR1AH = value >> 8; OCR1AL = value; } /* Source: https://adnbr.co.uk/articles/counting-milliseconds */ void init_timer1() { TCCR1B |= _BV(WGM12) | _BV(CS11); set_ocr1a((F_CPU / 1000) / 8); TIMSK1 |= _BV(OCIE1A); sei(); } static inline void atomic_memcpy(void *dest, const void *src, size_t size) { ATOMIC_BLOCK(ATOMIC_FORCEON) { memcpy(dest, src, size); } } #endif #endif