Move avr.h functions to avr.c
To avoid multiple definitions of the ISR.
This commit is contained in:
parent
2c7466e2de
commit
55498b4999
3 changed files with 62 additions and 26 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -38,3 +38,4 @@ config.status
|
|||
auto
|
||||
autom4te.cache
|
||||
!/lib/c/*.h
|
||||
!/lib/c/*.c
|
||||
|
|
57
lib/c/avr.c
Normal file
57
lib/c/avr.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
/***********************************************************************/
|
||||
/* */
|
||||
/* 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 <http://www.gnu.org/licenses/> */
|
||||
/* */
|
||||
/***********************************************************************/
|
||||
|
||||
#include <util/atomic.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include "avr.h"
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
void atomic_memcpy(void *dest, const void *src, size_t size) {
|
||||
ATOMIC_BLOCK(ATOMIC_FORCEON) {
|
||||
memcpy(dest, src, size);
|
||||
}
|
||||
}
|
||||
|
30
lib/c/avr.h
30
lib/c/avr.h
|
@ -27,14 +27,11 @@
|
|||
/* */
|
||||
/***********************************************************************/
|
||||
|
||||
/* Pervasives module for the Heptagon compiler */
|
||||
|
||||
#ifndef DECADES_AVR_H
|
||||
#define DECADES_AVR_H
|
||||
#ifdef __AVR__
|
||||
#include <util/atomic.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef F_CPU
|
||||
#error "F_CPU must be defined"
|
||||
|
@ -42,28 +39,9 @@
|
|||
|
||||
void run_timers();
|
||||
|
||||
ISR(TIMER0_OVF_vect) {
|
||||
run_timers();
|
||||
}
|
||||
void init_timer1();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
void atomic_memcpy(void *dest, const void *src, size_t size);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue