source: trunk/software/firmware/my_serial.h

Last change on this file was 11, checked in by bouyer, 5 years ago

Firmware for V2 boards

File size: 1.8 KB
Line 
1
2char getchar(void);
3
4/* #define UART_BUFSIZE 16 */
5/* #define UART_BUFSIZE_MASK 0x0f */
6#define UART_BUFSIZE 128
7#define UART_BUFSIZE_MASK 0x7f
8
9extern char uart_txbuf[UART_BUFSIZE];
10extern unsigned char uart_txbuf_prod;
11extern volatile unsigned char uart_txbuf_cons;
12
13extern char uart_rxbuf[UART_BUFSIZE];
14extern volatile unsigned char uart_rxbuf_prod;
15extern unsigned char uart_rxbuf_cons;
16
17char uart_getchar(void);
18void uart_putchar_raw(char);
19#if 0
20#define UART_PUTCHAR_HARD(c) { \
21        while (PIR1bits.TX1IF == 0) \
22                ; \
23        TXREG1 = c; \
24}
25#endif
26void uart_putchar_hard(char) __wparam;
27
28#define UART_FLUSH() { \
29        while (PIE1bits.TX1IE) \
30                ; \
31}
32       
33
34#define USART_INIT { \
35                uart_txbuf_prod = uart_txbuf_cons = 0; \
36                uart_rxbuf_prod = uart_rxbuf_cons = 0; \
37                (void)RCREG1; \
38                PIE1bits.RC1IE = 1; \
39        }
40
41#define USART_INTR {\
42        if (PIE1bits.TX1IE && PIR1bits.TX1IF) { \
43                if (uart_txbuf_prod == uart_txbuf_cons) { \
44                        PIE1bits.TX1IE = 0; /* buffer empty */ \
45                } else { \
46                        /* Place char in TXREG - this starts transmition */ \
47                        TXREG1 = uart_txbuf[uart_txbuf_cons]; \
48                        uart_txbuf_cons = (uart_txbuf_cons + 1) & UART_BUFSIZE_MASK;\
49                } \
50        } \
51        if (PIE1bits.RC1IE && PIR1bits.RC1IF) { \
52                register char c = RCREG1; \
53                if (RCSTA1bits.OERR) { \
54                        RCSTA1bits.CREN = 0; \
55                        RCSTA1bits.CREN = 1; \
56                } \
57                if (status & STAT_CONSOLE) { \
58                        uart_rxbuf_prod = (uart_rxbuf_prod + 1) & UART_BUFSIZE_MASK;\
59                        uart_rxbuf[uart_rxbuf_prod] = c; \
60                } else { \
61                        if (c == '\r') c = '\n';\
62                        if (c != '\n' || uart_rxbuf[uart_rxbuf_prod] != '\n') { \
63                                uart_rxbuf_prod = (uart_rxbuf_prod + 1) & UART_BUFSIZE_MASK;\
64                                uart_rxbuf[uart_rxbuf_prod] = c; \
65                                if (c == '\n') { \
66                                        if (softintrs & INT_RX1) \
67                                                softintrs |= INT_RX1OF; \
68                                        softintrs |= INT_RX1; \
69                                } \
70                        } \
71                } \
72        }\
73    }
Note: See TracBrowser for help on using the repository browser.