X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Favr%2Fdrv%2Fkdebug_avr.c;h=11d983d0cba55a1d1ab89c1c20209e22be21fbae;hb=4ceddcf7d53f4ddf8c4bfa78a6183ed256a1d0a5;hp=35d0645d6867a61485ca708f3f5a3ce333a5fde1;hpb=345f93de1963f49bdb194d2b06c8c5d7ba0a3e5f;p=bertos.git diff --git a/bertos/cpu/avr/drv/kdebug_avr.c b/bertos/cpu/avr/drv/kdebug_avr.c index 35d0645d..11d983d0 100644 --- a/bertos/cpu/avr/drv/kdebug_avr.c +++ b/bertos/cpu/avr/drv/kdebug_avr.c @@ -27,24 +27,26 @@ * the GNU General Public License. * * Copyright 2003, 2004, 2005, 2006, 2007 Develer S.r.l. (http://www.develer.com/) - * Copyright 2000, 2001, 2002 Bernardo Innocenti + * Copyright 2000, 2001, 2002 Bernie Innocenti * * --> * * \brief AVR debug support (implementation). * * \version $Id$ - * \author Bernardo Innocenti + * \author Bernie Innocenti * \author Stefano Fedrigo * \author Francesco Sacchi */ +#include "hw/hw_cpu.h" /* for CLOCK_FREQ */ +#include "hw/hw_ser.h" /* Required for bus macros overrides */ + +#include "cfg/cfg_debug.h" +#include /* for BV(), DIV_ROUND */ + #include #include -#include /* for BV(), DIV_ROUND */ -#include -#include /* for CLOCK_FREQ */ -#include /* Required for bus macros overrides */ #include @@ -52,7 +54,7 @@ /* * Support for special bus policies or external transceivers - * on UART0 (to be overridden in "hw_ser.h"). + * on UART0 (to be overridden in "hw/hw_ser.h"). * * HACK: if we don't set TXEN, kdbg disables the transmitter * after each output statement until the serial driver @@ -61,7 +63,7 @@ */ #ifndef KDBG_UART0_BUS_INIT #define KDBG_UART0_BUS_INIT do { \ - UCSR0B = BV(TXEN0); \ + UCR = BV(TXEN0); \ } while (0) #endif #ifndef KDBG_UART0_BUS_RX @@ -71,13 +73,18 @@ #define KDBG_UART0_BUS_TX do {} while (0) #endif - #if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA168 + #if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA1281 || CPU_AVR_ATMEGA168 #define UCR UCSR0B #define UDR UDR0 #define USR UCSR0A - #elif CPU_AVR_ATMEGA8 - #define UCR UCSRB - #define USR UCSRA + #elif CPU_AVR_ATMEGA8 || CPU_AVR_ATMEGA32 + #define UCR UCSRB + #define USR UCSRA + #define TXEN0 TXEN + #define UDRE0 UDRE + #define TXC0 TXC + #define TXCIE0 TXCIE + #define UDRIE0 UDRIE #else #error Unknown CPU #endif @@ -115,7 +122,7 @@ /* * Support for special bus policies or external transceivers - * on UART1 (to be overridden in "hw_ser.h"). + * on UART1 (to be overridden in "hw/hw_ser.h"). * * HACK: if we don't set TXEN, kdbg disables the transmitter * after each output statement until the serial driver @@ -157,12 +164,12 @@ * Special debug port for BitBanged Serial see below for details... */ #elif CONFIG_KDEBUG_PORT == 666 - #include "hw_ser.h" + #include "hw/hw_ser.h" #define KDBG_WAIT_READY() do { /*nop*/ } while(0) #define KDBG_WRITE_CHAR(c) _kdebug_bitbang_putchar((c)) #define KDBG_MASK_IRQ(old) do { IRQ_SAVE_DISABLE((old)); } while(0) #define KDBG_RESTORE_IRQ(old) do { IRQ_RESTORE((old)); } while(0) - typedef cpuflags_t kdbg_irqsave_t; + typedef cpu_flags_t kdbg_irqsave_t; #define KDBG_DELAY (((CLOCK_FREQ + CONFIG_KDEBUG_BAUDRATE / 2) / CONFIG_KDEBUG_BAUDRATE) + 7) / 14 @@ -225,7 +232,7 @@ INLINE void kdbg_hw_init(void) /* Compute the baud rate */ uint16_t period = DIV_ROUND(CLOCK_FREQ / 16UL, CONFIG_KDEBUG_BAUDRATE) - 1; - #if (CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128) + #if (CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA1281) #if CONFIG_KDEBUG_PORT == 0 UBRR0H = (uint8_t)(period>>8); UBRR0L = (uint8_t)period; @@ -242,9 +249,10 @@ INLINE void kdbg_hw_init(void) UBRR0H = (uint8_t)(period>>8); UBRR0L = (uint8_t)period; KDBG_UART0_BUS_INIT; - #elif CPU_AVR_ATMEGA8 + #elif CPU_AVR_ATMEGA8 || CPU_AVR_ATMEGA32 UBRRH = (uint8_t)(period>>8); UBRRL = (uint8_t)period; + KDBG_UART0_BUS_INIT; #elif CPU_AVR_ATMEGA103 UBRR = (uint8_t)period; KDBG_UART0_BUS_INIT; @@ -253,3 +261,4 @@ INLINE void kdbg_hw_init(void) #endif #endif /* CONFIG_KDEBUG_PORT == 666 */ } +