1 #include "hardware/clocks.h"
2 #include "hardware/gpio.h"
3 #include "SoftwareSerial/pio_uart_tx.h"
4 #include "SoftwareSerial/pio_uart_rx.h"
5 #include "PicoStreamPrintf.h"
21 this->sm_rx = stateMachineRxIndex;
22 this->sm_tx = stateMachineTxIndex;
25 void begin(uint baud=9800,
int rxPin=-1,
int txPin=-1 ){
42 virtual int available() {
43 return pio_sm_get_rx_fifo_level (pio, sm_rx);
48 int result = peekValue;
53 io_rw_8 *rxfifo_shift = (io_rw_8*)&pio->rxf[sm_rx] + 3;
54 if (pio_sm_is_rx_fifo_empty(pio, sm_rx))
57 tight_loop_contents();
58 return (
char)*rxfifo_shift;
61 virtual size_t write(uint8_t c) {
62 pio_sm_put_blocking(pio, sm_tx, (uint32_t)c);
79 void setupRx(uint pin) {
80 pio_sm_set_consecutive_pindirs(pio, sm_rx, pin, 1,
false);
81 pio_gpio_init(pio, pin);
84 int offset = pio_add_program(pio, &pio_uart_rx_program);
85 pio_sm_config c = pio_uart_rx_program_get_default_config(offset);
86 sm_config_set_in_pins(&c, pin);
87 sm_config_set_jmp_pin(&c, pin);
89 sm_config_set_in_shift(&c,
true,
false, 32);
91 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
93 float div = (float)clock_get_hz(clk_sys) / (8 * baud);
94 sm_config_set_clkdiv(&c, div);
96 pio_sm_init(pio, sm_rx, offset, &c);
97 pio_sm_set_enabled(pio, sm_rx,
true);
100 void setupTx(uint pin_tx) {
103 pio_sm_set_pins_with_mask(pio, sm_tx, 1u << pin_tx, 1u << pin_tx);
104 pio_sm_set_pindirs_with_mask(pio, sm_tx, 1u << pin_tx, 1u << pin_tx);
105 pio_gpio_init(pio, pin_tx);
107 int offset = pio_add_program(pio, &pio_uart_tx_program);
108 pio_sm_config c = pio_uart_tx_program_get_default_config(offset);
111 sm_config_set_out_shift(&c,
true,
false, 32);
116 sm_config_set_out_pins(&c, pin_tx, 1);
117 sm_config_set_sideset_pins(&c, pin_tx);
120 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
123 float div = (float)clock_get_hz(clk_sys) / (8 * baud);
124 sm_config_set_clkdiv(&c, div);
126 pio_sm_init(pio, sm_tx, offset, &c);
127 pio_sm_set_enabled(pio, sm_tx,
true);
Software Serial Arduino Stream which uses the Pico PIO.
Definition: PicoSoftwareSerial.h:17
Support for Serial.printf. The maximum printable length is defined by PRINTF_BUFFER_SIZE which is set...
Definition: PicoStreamPrintf.h:16
Pico Arduino Framework.
Definition: Arduino.cpp:26