kdebug_sam3.c
Go to the documentation of this file.00001
00038 #include <cfg/cfg_debug.h>
00039 #include <cfg/macros.h>
00040
00041 #include <cpu/types.h>
00042
00043 #include <io/sam3.h>
00044
00045
00046 #if (CONFIG_KDEBUG_PORT == 0)
00047 #define UART_BASE UART0_BASE
00048 #define UART_ID UART0_ID
00049 #define UART_PIO_BASE UART0_PORT
00050 #define UART_PERIPH UART0_PERIPH
00051 #define UART_PINS (BV(URXD0) | BV(UTXD0))
00052 #elif (CONFIG_KDEBUG_PORT == 1) && UART_PORTS > 1
00053 #define UART_BASE UART1_BASE
00054 #define UART_ID UART1_ID
00055 #define UART_PIO_BASE UART1_PORT
00056 #define UART_PERIPH UART1_PERIPH
00057 #define UART_PINS (BV(URXD1) | BV(UTXD1))
00058 #else
00059 #error "UART port not supported in this board"
00060 #endif
00061
00062
00063 #define KDBG_WAIT_READY() while (!(HWREG(UART_BASE + UART_SR_OFF) & BV(UART_SR_TXRDY))) {}
00064 #define KDBG_WAIT_TXDONE() while (!(HWREG(UART_BASE + UART_SR_OFF) & BV(UART_SR_TXEMPTY))) {}
00065
00066 #define KDBG_WRITE_CHAR(c) do { HWREG(UART_BASE + UART_THR_OFF) = (c); } while(0)
00067
00068
00069 #define KDBG_MASK_IRQ(old) do { (void)old; } while(0)
00070
00071
00072 #define KDBG_RESTORE_IRQ(old) do { (void)old; } while(0)
00073
00074 typedef uint32_t kdbg_irqsave_t;
00075
00076
00077 INLINE void kdbg_hw_init(void)
00078 {
00079
00080
00081
00082
00083 HWREG(UART_PIO_BASE + PIO_PDR_OFF) = UART_PINS;
00084 PIO_PERIPH_SEL(UART_PIO_BASE, UART_PINS, UART_PERIPH);
00085
00086
00087 pmc_periphEnable(UART_ID);
00088
00089
00090 HWREG(UART_BASE + UART_CR_OFF) = BV(UART_CR_RSTRX) | BV(UART_CR_RSTTX) | BV(UART_CR_RXDIS) | BV(UART_CR_TXDIS);
00091
00092
00093 HWREG(UART_BASE + UART_MR_OFF) = UART_MR_PAR_NO;
00094
00095
00096 HWREG(UART_BASE + UART_BRGR_OFF) = CPU_FREQ / CONFIG_KDEBUG_BAUDRATE / 16;
00097
00098
00099 HWREG(UART_BASE + UART_CR_OFF) = BV(UART_CR_RXEN) | BV(UART_CR_TXEN);
00100 }