22#include "hardware/gpio.h"
23#include "hardware/sync.h"
24#include "hardware/timer.h"
26#include "pico/types.h"
36#define BAUD_STALE_US 50000U
38#define BAUD_TIMER_MS 20
40#define BAUD_EMA_ALPHA 0.2F
56 uint64_t now_us = time_us_64();
75 uint64_t now_us = time_us_64();
83 uint32_t save = save_and_disable_interrupts();
86 restore_interrupts(save);
87 if (last_us > first_us)
89 uint64_t elapsed_us = last_us - first_us;
90 float inst_hz = ((float)(edges - 1) * (float)
US_PER_SECOND) / (float)elapsed_us;
121 static bool initialized =
false;
124 gpio_set_irq_enabled_with_callback(pin, GPIO_IRQ_EDGE_RISE,
true, &
rxc_edge_isr);
130 gpio_set_irq_enabled(pin, GPIO_IRQ_EDGE_RISE,
true);
static void rxc_edge_isr(uint gpio, uint32_t events)
static volatile bool baud_ready[PIN_COUNT]
static bool baud_timer_cb(repeating_timer_t *timer)
static volatile float baud_hz[PIN_COUNT]
static repeating_timer_t baud_timer
static volatile uint64_t last_edge_time_us[PIN_COUNT]
void baudrate_estimator_init(V24_PIN_T pin)
Initialize baudrate estimator on a specific RX clock pin.
float baudrate_estimator_get_current_estimation(V24_PIN_T pin)
Get latest baudrate estimate.
static volatile uint8_t monitored_pin[PIN_COUNT]
static size_t current_pin_count
static volatile uint64_t first_edge_time_us[PIN_COUNT]
static volatile uint32_t edge_count[PIN_COUNT]
#define US_PER_SECOND
The number of microseconds per second.
V24_PIN_T
Typed aliases for V.24 GPIO assignments.