summaryrefslogtreecommitdiff
path: root/digital/avr
diff options
context:
space:
mode:
Diffstat (limited to 'digital/avr')
-rw-r--r--digital/avr/common/io.h19
-rw-r--r--digital/avr/modules/math/geometry/distance.c4
-rw-r--r--digital/avr/modules/math/geometry/distance.h4
-rw-r--r--digital/avr/modules/twi/twi_hard.avr.c6
-rw-r--r--digital/avr/modules/uart/uart.avr.c16
-rw-r--r--digital/avr/modules/utils/utils.avr.h1
6 files changed, 37 insertions, 13 deletions
diff --git a/digital/avr/common/io.h b/digital/avr/common/io.h
index 7f94f4e6..9690a55b 100644
--- a/digital/avr/common/io.h
+++ b/digital/avr/common/io.h
@@ -36,6 +36,10 @@
/* SIGNAL is now ISR. */
# define ISR SIGNAL
#endif
+/* Some AVR includes define HOST! */
+#ifdef HOST
+# undef HOST
+#endif
/** Saved interrupts state. */
typedef uint8_t intr_flags_t;
@@ -106,10 +110,15 @@ intr_restore (intr_flags_t flags) { }
#define IO_N(io) IO_N_ (io)
#define IO_N_(p, n) (n)
-#define IO_GET(io) (IO_PIN_ (io) & IO_BV_ (io))
-#define IO_SET(io) IO_PORT_ (io) |= IO_BV_ (io)
-#define IO_CLR(io) IO_PORT_ (io) &= ~IO_BV_ (io)
-#define IO_OUTPUT(io) IO_DDR_ (io) |= IO_BV_ (io)
-#define IO_INPUT(io) IO_DDR_ (io) &= ~IO_BV_ (io)
+#define IO_GET(io) IO_GET_ (io)
+#define IO_GET_(p, n) (IO_PIN_ (p, n) & IO_BV_ (p, n))
+#define IO_SET(io) IO_SET_ (io)
+#define IO_SET_(p, n) IO_PORT_ (p, n) |= IO_BV_ (p, n)
+#define IO_CLR(io) IO_CLR_ (io)
+#define IO_CLR_(p, n) IO_PORT_ (p, n) &= ~IO_BV_ (p, n)
+#define IO_OUTPUT(io) IO_OUTPUT_ (io)
+#define IO_OUTPUT_(p, n) IO_DDR_ (p, n) |= IO_BV_ (p, n)
+#define IO_INPUT(io) IO_INPUT_ (io)
+#define IO_INPUT_(p, n) IO_DDR_ (p, n) &= ~IO_BV_ (p, n)
#endif /* io_h */
diff --git a/digital/avr/modules/math/geometry/distance.c b/digital/avr/modules/math/geometry/distance.c
index f8bb7c1f..38a5350c 100644
--- a/digital/avr/modules/math/geometry/distance.c
+++ b/digital/avr/modules/math/geometry/distance.c
@@ -29,7 +29,7 @@
#include "modules/math/fixed/fixed.h"
int16_t
-distance_point_point (vect_t *a, vect_t *b)
+distance_point_point (const vect_t *a, const vect_t *b)
{
int32_t dx = b->x - a->x;
int32_t dy = b->y - a->y;
@@ -37,7 +37,7 @@ distance_point_point (vect_t *a, vect_t *b)
}
int16_t
-distance_segment_point (vect_t *a, vect_t *b, vect_t *p)
+distance_segment_point (const vect_t *a, const vect_t *b, const vect_t *p)
{
int16_t proj;
/* The space is split in three regions delimited by the two parallel lines
diff --git a/digital/avr/modules/math/geometry/distance.h b/digital/avr/modules/math/geometry/distance.h
index c48c2226..049b84ce 100644
--- a/digital/avr/modules/math/geometry/distance.h
+++ b/digital/avr/modules/math/geometry/distance.h
@@ -29,13 +29,13 @@
/** Compute distance between two points.
* - a, b: points. */
int16_t
-distance_point_point (vect_t *a, vect_t *b);
+distance_point_point (const vect_t *a, const vect_t *b);
/** Compute distance between a segment and a point.
* - a: segment first vertice.
* - b: segment second vertice.
* - p: point. */
int16_t
-distance_segment_point (vect_t *a, vect_t *b, vect_t *p);
+distance_segment_point (const vect_t *a, const vect_t *b, const vect_t *p);
#endif /* distance_h */
diff --git a/digital/avr/modules/twi/twi_hard.avr.c b/digital/avr/modules/twi/twi_hard.avr.c
index ff65d31e..8bd18d34 100644
--- a/digital/avr/modules/twi/twi_hard.avr.c
+++ b/digital/avr/modules/twi/twi_hard.avr.c
@@ -56,6 +56,10 @@
# if defined (__AVR_ATmega32__)
# elif defined (__AVR_ATmega64__)
# elif defined (__AVR_ATmega128__)
+# elif defined (__AVR_AT90USB646__)
+# elif defined (__AVR_AT90USB647__)
+# elif defined (__AVR_AT90USB1286__)
+# elif defined (__AVR_AT90USB1287__)
# else
# error "twi: not tested on this chip"
# endif
@@ -201,7 +205,7 @@ twi_master_wait (void)
# endif /* AC_TWI_MASTER_ENABLE */
-SIGNAL (SIG_2WIRE_SERIAL)
+SIGNAL (TWI_vect)
{
# if AC_TWI_SLAVE_ENABLE
/** Slave work buffer. */
diff --git a/digital/avr/modules/uart/uart.avr.c b/digital/avr/modules/uart/uart.avr.c
index e3ffb18c..689866ae 100644
--- a/digital/avr/modules/uart/uart.avr.c
+++ b/digital/avr/modules/uart/uart.avr.c
@@ -39,6 +39,10 @@
#elif defined (__AVR_ATmega64__)
#elif defined (__AVR_ATmega128__)
#elif defined (__AVR_AT90USB162__)
+#elif defined (__AVR_AT90USB646__)
+#elif defined (__AVR_AT90USB647__)
+#elif defined (__AVR_AT90USB1286__)
+#elif defined (__AVR_AT90USB1287__)
#else
# warning "uart: not tested on this chip"
#endif
@@ -149,12 +153,18 @@
/* Baud rate error check. */
#define UBRR_VAL (AC_FREQ / 16 / AC_UART (BAUDRATE) - 1)
#define BAUDRATE_VAL (AC_FREQ / 16 / (UBRR_VAL + 1))
+#define BAUDRATE_ERROR (BAUDRATE_VAL - AC_UART (BAUDRATE))
+#define BAUDRATE_ERROR_PCT (BAUDRATE_ERROR * 100 / AC_UART (BAUDRATE))
-#if BAUDRATE_VAL - AC_UART (BAUDRATE) > 2
+#if BAUDRATE_ERROR_PCT >= 2
+#warning "uart: baud rate error > 2 %"
+#elif BAUDRATE_ERROR_PCT >= 1
+#warning "uart: baud rate error > 1 %"
+#elif BAUDRATE_ERROR > 2
#warning "uart: baud rate error > 2"
-#elif BAUDRATE_VAL - AC_UART (BAUDRATE) > 1
+#elif BAUDRATE_ERROR > 1
#warning "uart: baud rate error > 1"
-#elif BAUDRATE_VAL - AC_UART (BAUDRATE) > 0
+#elif BAUDRATE_ERROR > 0
#warning "uart: baud rate error > 0"
#endif
diff --git a/digital/avr/modules/utils/utils.avr.h b/digital/avr/modules/utils/utils.avr.h
index efe9eaa1..aa7421d2 100644
--- a/digital/avr/modules/utils/utils.avr.h
+++ b/digital/avr/modules/utils/utils.avr.h
@@ -25,6 +25,7 @@
*
* }}} */
+#include "io.h"
#include <avr/wdt.h>
/** Helper macro to build register value. Call it like this::