From 49148e76706e5e24c2ba7f6ccc1d7ec4736ab2f3 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 3 Mar 2021 15:24:13 +0000 Subject: support cheap chinese blue pill boards, make usb dfu compatible with dfuse --- app/vuart.c | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'app/vuart.c') diff --git a/app/vuart.c b/app/vuart.c index 5aaf2d3..3c4ab79 100644 --- a/app/vuart.c +++ b/app/vuart.c @@ -82,25 +82,18 @@ static void vuart_xmit (uint8_t c) led1 = 100; ring_write_byte (&usart_tx_ring, c); usart_kick(); -#ifdef USB ring_write_byte (&cdcacm_tx_ring, c); -#endif } static int vuart_recv_empty (void) { - if (!ring_empty (&usart_rx_ring)) { + if (!ring_empty (&usart_rx_ring)) return 0; - } - -#ifdef USB - if (!ring_empty (&cdcacm_rx_ring)) { + if (!ring_empty (&cdcacm_rx_ring)) return 0; - } -#endif return 1; } @@ -114,25 +107,22 @@ static int vuart_recv (uint8_t *c) return 0; } -#ifdef USB - if (!ring_read_byte (&cdcacm_rx_ring, c)) { led2 = 100; return 0; } -#endif return -1; } static void update_lsr (void) { - if (vuart_recv_empty()) { + if (vuart_recv_empty()) lsr &= ~LSR_DA; - } else { + + else lsr |= LSR_DA; - } } uint8_t vuart_read (unsigned reg) @@ -147,28 +137,33 @@ uint8_t vuart_read (unsigned reg) vuart_recv (&val); update_lsr(); return val; - } else { + } else return dllr; - } case IER: //case DLLH: return (lcr & LCR_DLAB) ? dlhr : ier; + case IIR: return iir; + case LCR: return lcr; + case MCR: return mcr; + case LSR: update_lsr(); val = lsr; lsr &= 0xe1; return val; + case MSR: val = msr; msr &= 0xf0; return val; + case SR: return sr; } @@ -183,29 +178,33 @@ void vuart_write (unsigned reg, uint8_t val) case RXR: //case DLLR: - if (! (lcr & LCR_DLAB)) { + if (! (lcr & LCR_DLAB)) vuart_xmit (val); - } else { + + else dllr = val; - } break; + case IER: //case DLHR: - if (! (lcr & LCR_DLAB)) { + if (! (lcr & LCR_DLAB)) ier = val & 0xf; - } else { + + else dlhr = val; - } break; + case LCR: lcr = val; break; + case MCR: mcr = val & 0x1f; break; + case SR: sr = val; break; -- cgit v1.2.3