diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/libboard/common/include/uart_console.h | 1 | ||||
-rw-r--r-- | firmware/libboard/common/source/board_cstartup_gnu.c | 2 | ||||
-rw-r--r-- | firmware/libboard/common/source/uart_console.c | 16 |
3 files changed, 19 insertions, 0 deletions
diff --git a/firmware/libboard/common/include/uart_console.h b/firmware/libboard/common/include/uart_console.h index c48c2c1..0e49bfd 100644 --- a/firmware/libboard/common/include/uart_console.h +++ b/firmware/libboard/common/include/uart_console.h @@ -34,6 +34,7 @@ #include <stdint.h> extern void UART_Configure( uint32_t dwBaudrate, uint32_t dwMasterClock ) ; +extern void UART_Exit(void) ; extern void UART_PutChar( uint8_t uc ) ; extern uint32_t UART_GetChar( void ) ; extern uint32_t UART_IsRxReady( void ) ; diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c index 4b561ec..42231fb 100644 --- a/firmware/libboard/common/source/board_cstartup_gnu.c +++ b/firmware/libboard/common/source/board_cstartup_gnu.c @@ -173,6 +173,8 @@ void ResetException( void ) * the second entry in the vector table is the reset address, corresponding to the application start
*/
if (((*((uint32_t*)(IFLASH_ADDR+BOARD_DFU_BOOT_SIZE)))&0xFFFF0000)==0x20000000) {
+ UART_Exit();
+ __disable_irq();
BootIntoApp();
/* Infinite loop */
while ( 1 ) ;
diff --git a/firmware/libboard/common/source/uart_console.c b/firmware/libboard/common/source/uart_console.c index a47ba0c..fe64922 100644 --- a/firmware/libboard/common/source/uart_console.c +++ b/firmware/libboard/common/source/uart_console.c @@ -103,6 +103,22 @@ extern void UART_Configure( uint32_t baudrate, uint32_t masterClock) _ucIsConsoleInitialized=1 ;
}
+/**
+ * \brief Disables the USART peripheral and related IRQ
+ */
+void UART_Exit(void)
+{
+ if (!_ucIsConsoleInitialized) {
+ return;
+ }
+
+ Uart *pUart = CONSOLE_UART;
+ pUart->UART_IDR = UART_IDR_TXRDY;
+ pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS | UART_CR_RSTSTA;
+ PMC->PMC_PCDR0 = 1 << CONSOLE_ID;
+ NVIC_DisableIRQ(CONSOLE_IRQ);
+}
+
/** Interrupt Service routine to transmit queued data */
void CONSOLE_ISR(void)
{
|