mirror of
https://github.com/Noltari/pico-uart-bridge.git
synced 2025-01-01 12:05:59 +00:00
Add line control (DTR/DSR)
DSR doesn't do anything yet.
This commit is contained in:
parent
e729db5942
commit
feac173c52
|
@ -25,4 +25,8 @@ if(FLOW_CONTROL)
|
||||||
target_compile_definitions(uart_bridge PUBLIC FLOW_CONTROL=1)
|
target_compile_definitions(uart_bridge PUBLIC FLOW_CONTROL=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(LINE_CONTROL)
|
||||||
|
target_compile_definitions(uart_bridge PUBLIC LINE_CONTROL=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
pico_add_extra_outputs(uart_bridge)
|
pico_add_extra_outputs(uart_bridge)
|
||||||
|
|
42
README.md
42
README.md
|
@ -11,23 +11,45 @@ This software is provided without warranty, according to the MIT License, and sh
|
||||||
Raspberry Pi Pico Pinout
|
Raspberry Pi Pico Pinout
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
UART0:
|
||||||
| Raspberry Pi Pico GPIO | Function |
|
| Raspberry Pi Pico GPIO | Function |
|
||||||
|:----------------------:|:---------:|
|
|:----------------------:|:---------:|
|
||||||
| GPIO0 (Pin 1) | UART0 TX |
|
| GPIO0 (Pin 1) | TX |
|
||||||
| GPIO1 (Pin 2) | UART0 RX |
|
| GPIO1 (Pin 2) | RX |
|
||||||
| GPIO2 (Pin 4) | UART0 CTS |
|
| GPIO2 (Pin 4) | CTS |
|
||||||
| GPIO3 (Pin 5) | UART0 RTS |
|
| GPIO3 (Pin 5) | RTS |
|
||||||
| GPIO4 (Pin 6) | UART1 TX |
|
| GPIO4 (Pin 6) | DTR |
|
||||||
| GPIO5 (Pin 7) | UART1 RX |
|
| GPIO5 (Pin 7) | DSR |
|
||||||
| GPIO6 (Pin 9) | UART1 CTS |
|
|
||||||
| GPIO7 (Pin 10) | UART1 RTS |
|
|
||||||
|
|
||||||
Optional Hardware Flow-control
|
UART1:
|
||||||
|
| Raspberry Pi Pico GPIO | Function |
|
||||||
|
|:----------------------:|:---------:|
|
||||||
|
| GPIO8 (Pin 11) | TX |
|
||||||
|
| GPIO9 (Pin 12) | RX |
|
||||||
|
| GPIO10 (Pin 14) | CTS |
|
||||||
|
| GPIO11 (Pin 15) | RTS |
|
||||||
|
| GPIO12 (Pin 16) | DTR |
|
||||||
|
| GPIO13 (Pin 17) | DSR |
|
||||||
|
|
||||||
|
Optional Hardware Flow and Line control
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Hardware Flow-control is disabled by default, but can be compiled in by running:
|
Hardware Flow-control (RTS/CTS) is disabled by default, but can be compiled in by running:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
cmake -DFLOW_CONTROL .
|
cmake -DFLOW_CONTROL .
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Line control (DTR/DSR) is disabled by default, but can be compiled in by running:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cmake -DLINE_CONTROL .
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
To enable both:
|
||||||
|
``` bash
|
||||||
|
cmake -DLINE_CONTROL -DFLOW_CONTROL .
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
|
@ -32,6 +32,10 @@ typedef struct {
|
||||||
uint8_t rts_pin;
|
uint8_t rts_pin;
|
||||||
uint8_t cts_pin;
|
uint8_t cts_pin;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef LINE_CONTROL
|
||||||
|
uint8_t dtr_pin;
|
||||||
|
uint8_t dsr_pin;
|
||||||
|
#endif
|
||||||
} uart_id_t;
|
} uart_id_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -54,14 +58,22 @@ const uart_id_t UART_ID[CFG_TUD_CDC] = {
|
||||||
#ifdef FLOW_CONTROL
|
#ifdef FLOW_CONTROL
|
||||||
.cts_pin = 2,
|
.cts_pin = 2,
|
||||||
.rts_pin = 3,
|
.rts_pin = 3,
|
||||||
|
#endif
|
||||||
|
#ifdef LINE_CONTROL
|
||||||
|
.dtr_pin = 4,
|
||||||
|
.dsr_pin = 5,
|
||||||
#endif
|
#endif
|
||||||
}, {
|
}, {
|
||||||
.inst = uart1,
|
.inst = uart1,
|
||||||
.tx_pin = 4,
|
.tx_pin = 8,
|
||||||
.rx_pin = 5,
|
.rx_pin = 9,
|
||||||
#ifdef FLOW_CONTROL
|
#ifdef FLOW_CONTROL
|
||||||
.cts_pin = 6,
|
.cts_pin = 10,
|
||||||
.rts_pin = 7,
|
.rts_pin = 11,
|
||||||
|
#endif
|
||||||
|
#ifdef LINE_CONTROL
|
||||||
|
.dtr_pin = 12,
|
||||||
|
.dsr_pin = 13,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -250,6 +262,13 @@ void init_uart_data(uint8_t itf) {
|
||||||
gpio_set_function(ui->cts_pin, GPIO_FUNC_UART);
|
gpio_set_function(ui->cts_pin, GPIO_FUNC_UART);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef LINE_CONTROL
|
||||||
|
gpio_init(ui->dtr_pin);
|
||||||
|
gpio_set_dir(ui->dtr_pin, GPIO_OUT);
|
||||||
|
gpio_init(ui->dsr_pin);
|
||||||
|
gpio_set_dir(ui->dsr_pin, GPIO_IN);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* USB CDC LC */
|
/* USB CDC LC */
|
||||||
ud->usb_lc.bit_rate = DEF_BIT_RATE;
|
ud->usb_lc.bit_rate = DEF_BIT_RATE;
|
||||||
ud->usb_lc.data_bits = DEF_DATA_BITS;
|
ud->usb_lc.data_bits = DEF_DATA_BITS;
|
||||||
|
@ -283,6 +302,16 @@ void init_uart_data(uint8_t itf) {
|
||||||
parity_usb2uart(ud->usb_lc.parity));
|
parity_usb2uart(ud->usb_lc.parity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LINE_CONTROL
|
||||||
|
/* Invoked when line state has changed */
|
||||||
|
void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
|
||||||
|
{
|
||||||
|
const uart_id_t *ui = &UART_ID[itf];
|
||||||
|
|
||||||
|
gpio_put(ui->dtr_pin, dtr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int itf;
|
int itf;
|
||||||
|
|
Loading…
Reference in a new issue