Merge branch "preempt" in "trunk".
[bertos.git] / bertos / cpu / avr / drv / ser_avr.c
index 066444822abd40d669fc62ebf41de772ea207af3..d6de8243dbb27056be9a71158b2d97090bd97da2 100644 (file)
  */
 
 #include "hw/hw_ser.h"  /* Required for bus macros overrides */
-#include "hw/hw_cpu.h"  /* CLOCK_FREQ */
+#include <hw/hw_cpufreq.h>  /* CPU_FREQ */
 
 #include "cfg/cfg_ser.h"
 
 #include <cfg/macros.h> /* DIV_ROUND */
 #include <cfg/debug.h>
+#include <cfg/cfg_arch.h> // ARCH_NIGHTTEST
 
 #include <drv/ser.h>
 #include <drv/ser_p.h>
 #endif
 
 
-/**
- * \def CONFIG_SER_STROBE
- *
- * This is a debug facility that can be used to
- * monitor SER interrupt activity on an external pin.
- *
- * To use strobes, redefine the macros SER_STROBE_ON,
- * SER_STROBE_OFF and SER_STROBE_INIT and set
- * CONFIG_SER_STROBE to 1.
- */
-#if !defined(CONFIG_SER_STROBE) || !CONFIG_SER_STROBE
-       #define SER_STROBE_ON    do {/*nop*/} while(0)
-       #define SER_STROBE_OFF   do {/*nop*/} while(0)
-       #define SER_STROBE_INIT  do {/*nop*/} while(0)
-#endif
-
-
 /* From the high-level serial driver */
 extern struct Serial *ser_handles[SER_CNT];
 
@@ -377,7 +361,7 @@ static void uart0_enabletxirq(struct SerialHardware *_hw)
 static void uart0_setbaudrate(UNUSED_ARG(struct SerialHardware *, _hw), unsigned long rate)
 {
        /* Compute baud-rate period */
-       uint16_t period = DIV_ROUND(CLOCK_FREQ / 16UL, rate) - 1;
+       uint16_t period = DIV_ROUND(CPU_FREQ / 16UL, rate) - 1;
 
 #if !CPU_AVR_ATMEGA103
        UBRR0H = (period) >> 8;
@@ -430,7 +414,7 @@ static void uart1_enabletxirq(struct SerialHardware *_hw)
 static void uart1_setbaudrate(UNUSED_ARG(struct SerialHardware *, _hw), unsigned long rate)
 {
        /* Compute baud-rate period */
-       uint16_t period = DIV_ROUND(CLOCK_FREQ / 16UL, rate) - 1;
+       uint16_t period = DIV_ROUND(CPU_FREQ / 16UL, rate) - 1;
 
        UBRR1H = (period) >> 8;
        UBRR1L = (period);
@@ -470,7 +454,7 @@ static void spi_init(UNUSED_ARG(struct SerialHardware *, _hw), UNUSED_ARG(struct
         * - as input but tied high forever!
         * This driver set the pin as output.
         */
-       #warning SPI SS pin set as output for proper operation, check schematics for possible conflicts.
+       #warning FIXME:SPI SS pin set as output for proper operation, check schematics for possible conflicts.
        ATOMIC(SPI_DDR |= BV(SPI_SS_BIT));
 
        ATOMIC(SPI_DDR &= ~BV(SPI_MISO_BIT));
@@ -661,7 +645,7 @@ struct SerialHardware *ser_hw_getdesc(int unit)
 #if CONFIG_SER_HWHANDSHAKE
 
 /// This interrupt is triggered when the CTS line goes high
-SIGNAL(SIG_CTS)
+DECLARE_ISR(SIG_CTS)
 {
        // Re-enable UDR empty interrupt and TX, then disable CTS interrupt
        UCSR0B = BV(BIT_RXCIE0) | BV(BIT_UDRIE0) | BV(BIT_RXEN0) | BV(BIT_TXEN0);
@@ -674,7 +658,7 @@ SIGNAL(SIG_CTS)
 /**
  * Serial 0 TX interrupt handler
  */
-SIGNAL(USART0_UDRE_vect)
+DECLARE_ISR(USART0_UDRE_vect)
 {
        SER_STROBE_ON;
 
@@ -722,7 +706,7 @@ SIGNAL(USART0_UDRE_vect)
  * otherwise we'd stop the serial port with some data
  * still pending in the buffer.
  */
-SIGNAL(SIG_UART0_TRANS)
+DECLARE_ISR(SIG_UART0_TRANS)
 {
        SER_STROBE_ON;
 
@@ -745,7 +729,7 @@ SIGNAL(SIG_UART0_TRANS)
 /**
  * Serial 1 TX interrupt handler
  */
-SIGNAL(USART1_UDRE_vect)
+DECLARE_ISR(USART1_UDRE_vect)
 {
        SER_STROBE_ON;
 
@@ -783,7 +767,7 @@ SIGNAL(USART1_UDRE_vect)
  *
  * \sa port 0 TX complete handler.
  */
-SIGNAL(USART1_TX_vect)
+DECLARE_ISR(USART1_TX_vect)
 {
        SER_STROBE_ON;
 
@@ -818,7 +802,7 @@ SIGNAL(USART1_TX_vect)
  *       RXCIE is cleared.  Unfortunately the RXC flag is read-only
  *       and can't be cleared by code.
  */
-SIGNAL(USART0_RX_vect)
+DECLARE_ISR(USART0_RX_vect)
 {
        SER_STROBE_ON;
 
@@ -866,9 +850,9 @@ SIGNAL(USART0_RX_vect)
  * is heavily loaded, because an interrupt could be retriggered
  * when executing the handler prologue before RXCIE is disabled.
  *
- * \see SIGNAL(USART1_RX_vect)
+ * \see DECLARE_ISR(USART1_RX_vect)
  */
-SIGNAL(USART1_RX_vect)
+DECLARE_ISR(USART1_RX_vect)
 {
        SER_STROBE_ON;
 
@@ -909,7 +893,7 @@ SIGNAL(USART1_RX_vect)
 /**
  * SPI interrupt handler
  */
-SIGNAL(SIG_SPI)
+DECLARE_ISR(SIG_SPI)
 {
        SER_STROBE_ON;