diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-10-31 14:06:59 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-10-31 14:06:59 +0000 |
commit | 5592312904f37b7b08aa9e7be0bf19be4fc93d07 (patch) | |
tree | 95bc61d07cd4354a37bddd906567e5527cd5ea13 /nuttx/arch/avr | |
parent | 5e22aa583909d282dd67883a435500ae3c7a5953 (diff) | |
download | px4-nuttx-5592312904f37b7b08aa9e7be0bf19be4fc93d07.tar.gz px4-nuttx-5592312904f37b7b08aa9e7be0bf19be4fc93d07.tar.bz2 px4-nuttx-5592312904f37b7b08aa9e7be0bf19be4fc93d07.zip |
Basic serial console now works
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3064 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/avr')
-rw-r--r-- | nuttx/arch/avr/src/at32uc3/at32uc3_internal.h | 2 | ||||
-rw-r--r-- | nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c | 39 |
2 files changed, 30 insertions, 11 deletions
diff --git a/nuttx/arch/avr/src/at32uc3/at32uc3_internal.h b/nuttx/arch/avr/src/at32uc3/at32uc3_internal.h index 07a2e9136..4e038589d 100644 --- a/nuttx/arch/avr/src/at32uc3/at32uc3_internal.h +++ b/nuttx/arch/avr/src/at32uc3/at32uc3_internal.h @@ -93,7 +93,7 @@ #define GPIO_PULLUP (1 << 11) /* Bit 11: Pull-up enable */ /* Output value (Valid only if GPIO_ENABLE and GPIO_OUTPUT) - * .... .V... .... .... + * .... .V.. .... .... */ #define GPIO_VALUE (1 << 10) /* Bit 10: Output value */ diff --git a/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c b/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c index 641d7bffe..cbf1140c6 100644 --- a/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c +++ b/nuttx/arch/avr/src/at32uc3/at32uc3_lowconsole.c @@ -49,6 +49,7 @@ #include "up_arch.h" #include "up_internal.h" #include "at32uc3_internal.h" +#include "at32uc3_pm.h" #include "at32uc3_usart.h" #include "at32uc3_pinmux.h" @@ -240,10 +241,6 @@ void usart_configure(uintptr_t usart_base, uint32_t baud, unsigned int parity, usart_reset(usart_base); - /* Set the baud rate generation register */ - - usart_setbaudrate(usart_base, baud); - /* Configure STOP bits */ regval = USART_MR_MODE_NORMAL|USART_MR_CHMODE_NORMAL; /* Normal RS-232 mode */ @@ -281,6 +278,10 @@ void usart_configure(uintptr_t usart_base, uint32_t baud, unsigned int parity, usart_putreg(usart_base, AVR32_USART_MR_OFFSET, regval); + /* Set the baud rate generation register */ + + usart_setbaudrate(usart_base, baud); + /* Enable RX and TX */ regval = usart_getreg(usart_base, AVR32_USART_CR_OFFSET); @@ -302,12 +303,10 @@ void usart_configure(uintptr_t usart_base, uint32_t baud, unsigned int parity, #ifndef CONFIG_USE_EARLYSERIALINIT void up_consoleinit(void) { - /* Enable clocking for the enabled USART modules. Hmmm... It looks like the - * default state for CLK_USART0, USART1 CLK_USART1, and USART2 CLK_USART2 is - * "enabled" in the PM's PBAMASK register. - */ + uint32_t pbamask = 0; + uint32_t regval; - /* Setup GPIO pins for each configured USART/UART */ + /* Setup GPIO pins fand enable module clocking or each configured USART/UART */ #ifdef CONFIG_AVR32_USART0_RS232 /* PINMUX_USART0_RXD and PINMUX_USART0_TXD must be defined in board.h. It @@ -318,6 +317,10 @@ void up_consoleinit(void) at32uc3_configgpio(PINMUX_USART0_RXD); at32uc3_configgpio(PINMUX_USART0_TXD); + /* Enable clocking to USART0 (This should be the default state after reset) */ + + pbamask |= PM_PBAMASK_USART0; + #endif #ifdef CONFIG_AVR32_USART1_RS232 /* PINMUX_USART1_RXD and PINMUX_USART1_TXD must be defined in board.h. It @@ -329,6 +332,10 @@ void up_consoleinit(void) at32uc3_configgpio(PINMUX_USART1_RXD); at32uc3_configgpio(PINMUX_USART1_TXD); + /* Enable clocking to USART1 (This should be the default state after reset) */ + + pbamask |= PM_PBAMASK_USART1; + #endif #ifdef CONFIG_AVR32_USART2_RS232 /* PINMUX_USART2_RXD and PINMUX_USART2_TXD must be defined in board.h. It @@ -338,8 +345,20 @@ void up_consoleinit(void) at32uc3_configgpio(PINMUX_USART2_RXD); at32uc3_configgpio(PINMUX_USART2_TXD); + + /* Enable clocking to USART2 (This should be the default state after reset) */ + + pbamask |= PM_PBAMASK_USART2; + #endif + /* Enable selected clocks (and disabled unselected clocks) */ + + regval = getreg32(AVR32_PM_PBAMASK); + regval &= ~(PM_PBAMASK_USART0|PM_PBAMASK_USART1|PM_PBAMASK_USART2); + regval |= pbamask; + putreg32(regval, AVR32_PM_PBAMASK); + /* Then configure the console here (if it is not going to be configured * by up_earlyserialinit()). */ @@ -364,7 +383,7 @@ void up_lowputc(char ch) #ifdef HAVE_SERIAL_CONSOLE /* Wait until the TX to become ready */ - while (usart_getreg(AVR32_CONSOLE_BASE, USART_CSR_TXRDY) == 0); + while ((usart_getreg(AVR32_CONSOLE_BASE, AVR32_USART_CSR_OFFSET) & USART_CSR_TXRDY) == 0); /* Then send the character */ |