📄 serial.c
字号:
#include <hardware.h>#include <stdarg.h>#include <io.h>#include <serial.h>#if defined(USE_FFUART)static const unsigned long base = 0x40100000;#elif defined(USE_BTUART)static const unsigned long base = 0x40200000;#elif defined(USE_STUART)static const unsigned long base = 0x40700000;#endif#define uart_put(v, p) writeb(v, base + (p))#define uart_get(p) readb(base + (p))extern bool uart_init(void){ int i; if (uart_get(UART_IER) & IER_UUE) while (!(uart_get(UART_LSR) & LSR_TEMT));#if defined(USE_FFUART) pxa_gpio_mode(GPIO34_FFRXD_MD); pxa_gpio_mode(GPIO39_FFTXD_MD);#elif defined(USE_BTUART) pxa_gpio_mode(GPIO42_BTRXD_MD); pxa_gpio_mode(GPIO43_BTTXD_MD);#elif defined(USE_STUART) pxa_gpio_mode(GPIO46_STRXD_MD); pxa_gpio_mode(GPIO47_STTXD_MD);#endif uart_put(~IER_UUE, UART_IER); uart_put(0x03, UART_LCR); // 8bit data, 1 stop bit, no parity uart_put(0x07, UART_FCR); uart_put(0x03 | LCR_DLAB, UART_LCR); uart_put(BaudToDLV(UART_BAUDRATE) >> 8, UART_DLH); uart_put(BaudToDLV(UART_BAUDRATE) & 0xFF, UART_DLL); uart_put(0x03, UART_LCR); uart_put(IER_UUE, UART_IER); // uart enable i=20; do { uart_put('\r', UART_THR); } while (--i); return true;}extern int uart_putc(int ch){ if (ch == '\n') uart_putc('\r'); while (!(uart_get(UART_LSR) & LSR_TDRQ)); uart_put(ch, UART_THR); return ch;}extern int uart_getc(void){ int ch = -1; if (uart_get(UART_LSR) & LSR_DR) ch = uart_get(UART_RBR); if (ch == '\r') ch = '\n'; return ch;}extern int uart_puts(const char *s){ const char *t = s; while (*t) uart_putc(*t++); return t - s;}extern int uart_putb(int ch){ while (!(uart_get(UART_LSR) & LSR_TDRQ)); uart_put(ch, UART_THR); return ch;}extern int uart_getb(void){ int ch = -1; if (uart_get(UART_LSR) & LSR_DR) ch = uart_get(UART_RBR); return ch;}extern int uart_write(const void *buff, int count){ const char *s = buff; while (count-- > 0){ while (!(uart_get(UART_LSR) & LSR_TDRQ)); uart_put(*s++, UART_THR); } return count;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -