@web-font-path: "roboto-debian.css";
v2.2.0 (RP2040)
Loading...
Searching...
No Matches
pio.h File Reference
`#include "pico.h"`
`#include "hardware/address_mapped.h"`
`#include "hardware/structs/pio.h"`
`#include "hardware/gpio.h"`
`#include "hardware/regs/dreq.h"`
`#include "hardware/pio_instructions.h"`
Include dependency graph for pio.h:

Go to the source code of this file.

## Data Structures

struct | pio_sm_config
| PIO Configuration structure. More...
struct | pio_program

## Macros

#define | PARAM_ASSERTIONS_ENABLED_HARDWARE_PIO 0
#define | PICO_PIO_VERSION 0
#define | PICO_PIO_CLKDIV_ROUND_NEAREST PICO_CLKDIV_ROUND_NEAREST
#define | pio0 pio0_hw
#define | pio1 pio1_hw
#define | PIO_NUM(pio)
| Returns the PIO number for a PIO instance.
#define | PIO_INSTANCE(instance)
| Returns the PIO instance with the given PIO number.
#define | PIO_FUNCSEL_NUM(pio, gpio)
| Returns gpio_function_t needed to select the PIO function for the given PIO instance on the given GPIO.
#define | PIO_DREQ_NUM(pio, sm, is_tx)
| Returns the dreq_num_t used for pacing DMA transfers to or from a given state machine's FIFOs on this PIO instance. If is_tx is true, then it is for transfers to the PIO state machine TX FIFO else for transfers from the PIO state machine RX FIFO.
#define | PIO_IRQ_NUM(pio, irqn)
| Returns the irq_num_t for processor interrupts from the given PIO instance.

## Typedefs

typedef pio_hw_t * | PIO
typedef struct pio_program | pio_program_t
typedef enum pio_interrupt_source | pio_interrupt_source_t
| PIO interrupt source numbers for pio related IRQs.

## Enumerations

enum | pio_fifo_join { PIO_FIFO_JOIN_NONE = 0 , PIO_FIFO_JOIN_TX = 1 , PIO_FIFO_JOIN_RX = 2 }
| FIFO join states. More...
enum | pio_mov_status_type { STATUS_TX_LESSTHAN = 0 , STATUS_RX_LESSTHAN = 1 }
| MOV status types.

enum

pio_interrupt_source {
pis_interrupt0 = PIO_INTR_SM0_LSB , pis_interrupt1 = PIO_INTR_SM1_LSB , pis_interrupt2 = PIO_INTR_SM2_LSB , pis_interrupt3 = PIO_INTR_SM3_LSB ,
pis_sm0_tx_fifo_not_full = PIO_INTR_SM0_TXNFULL_LSB , pis_sm1_tx_fifo_not_full = PIO_INTR_SM1_TXNFULL_LSB , pis_sm2_tx_fifo_not_full = PIO_INTR_SM2_TXNFULL_LSB , pis_sm3_tx_fifo_not_full = PIO_INTR_SM3_TXNFULL_LSB ,
pis_sm0_rx_fifo_not_empty = PIO_INTR_SM0_RXNEMPTY_LSB , pis_sm1_rx_fifo_not_empty = PIO_INTR_SM1_RXNEMPTY_LSB , pis_sm2_rx_fifo_not_empty = PIO_INTR_SM2_RXNEMPTY_LSB , pis_sm3_rx_fifo_not_empty = PIO_INTR_SM3_RXNEMPTY_LSB
}

| PIO interrupt source numbers for pio related IRQs. More...

## Functions

static void | check_sm_param (__unused uint sm)
static void | check_sm_mask (__unused uint mask)
static void | check_pio_param (__unused PIO pio)
static void | check_pio_pin_param (__unused uint pin)
static void | sm_config_set_out_pin_base (pio_sm_config *c, uint out_base)
| Set the base of the 'out' pins in a state machine configuration.
static void | sm_config_set_out_pin_count (pio_sm_config *c, uint out_count)
| Set the number of 'out' pins in a state machine configuration.
static void | sm_config_set_out_pins (pio_sm_config *c, uint out_base, uint out_count)
| Set the 'out' pins in a state machine configuration.
static void | sm_config_set_set_pin_base (pio_sm_config *c, uint set_base)
| Set the base of the 'set' pins in a state machine configuration.
static void | sm_config_set_set_pin_count (pio_sm_config *c, uint set_count)
| Set the count of 'set' pins in a state machine configuration.
static void | sm_config_set_set_pins (pio_sm_config *c, uint set_base, uint set_count)
| Set the 'set' pins in a state machine configuration.
static void | sm_config_set_in_pin_base (pio_sm_config *c, uint in_base)
| Set the base of the 'in' pins in a state machine configuration.
static void | sm_config_set_in_pins (pio_sm_config *c, uint in_base)
| Set the base for the 'in' pins in a state machine configuration.
static void | sm_config_set_in_pin_count (pio_sm_config *c, uint in_count)
| Set the count of 'in' pins in a state machine configuration.
static void | sm_config_set_sideset_pin_base (pio_sm_config *c, uint sideset_base)
| Set the base of the 'sideset' pins in a state machine configuration.
static void | sm_config_set_sideset_pins (pio_sm_config *c, uint sideset_base)
| Set the 'sideset' pins in a state machine configuration.
static void | sm_config_set_sideset (pio_sm_config *c, uint bit_count, bool optional, bool pindirs)
| Set the 'sideset' options in a state machine configuration.
static void | sm_config_set_clkdiv_int_frac8 (pio_sm_config *c, uint32_t div_int, uint8_t div_frac8)
| Set the state machine clock divider (from integer and fractional parts - 16:8) in a state machine configuration.
static void | sm_config_set_clkdiv_int_frac (pio_sm_config *c, uint16_t div_int, uint8_t div_frac8)
static void | pio_calculate_clkdiv8_from_float (float div, uint32_t *div_int, uint8_t *div_frac8)
static void | pio_calculate_clkdiv_from_float (float div, uint16_t *div_int16, uint8_t *div_frac8)
static void | sm_config_set_clkdiv (pio_sm_config *c, float div)
| Set the state machine clock divider (from a floating point value) in a state machine configuration.
static void | sm_config_set_wrap (pio_sm_config *c, uint wrap_target, uint wrap)
| Set the wrap addresses in a state machine configuration.
static void | sm_config_set_jmp_pin (pio_sm_config *c, uint pin)
| Set the 'jmp' pin in a state machine configuration.
static void | sm_config_set_in_shift (pio_sm_config *c, bool shift_right, bool autopush, uint push_threshold)
| Setup 'in' shifting parameters in a state machine configuration.
static void | sm_config_set_out_shift (pio_sm_config *c, bool shift_right, bool autopull, uint pull_threshold)
| Setup 'out' shifting parameters in a state machine configuration.
static void | sm_config_set_fifo_join (pio_sm_config *c, enum pio_fifo_join join)
| Setup the FIFO joining in a state machine configuration.
static void | sm_config_set_out_special (pio_sm_config *c, bool sticky, bool has_enable_pin, uint enable_bit_index)
| Set special 'out' operations in a state machine configuration.
static void | sm_config_set_mov_status (pio_sm_config *c, enum pio_mov_status_type status_sel, uint status_n)
| Set source for 'mov status' in a state machine configuration.
static pio_sm_config | pio_get_default_sm_config (void)
| Get the default state machine configuration.
static uint | pio_get_gpio_base (PIO pio)
| Return the base GPIO base for the PIO instance.
static void | check_pio_pin_mask64 (__unused PIO pio, __unused uint sm, __unused uint64_t pinmask)
static int | pio_sm_set_config (PIO pio, uint sm, const pio_sm_config *config)
| Apply a state machine configuration to a state machine.
static uint | pio_get_index (PIO pio)
| Return the instance number of a PIO instance.
static uint | pio_get_funcsel (PIO pio)
| Return the funcsel number of a PIO instance.
static PIO | pio_get_instance (uint instance)
| Convert PIO instance to hardware instance.
static void | pio_gpio_init (PIO pio, uint pin)
| Setup the function select for a GPIO to use output from the given PIO instance.
static uint | pio_get_dreq (PIO pio, uint sm, bool is_tx)
| Return the DREQ to use for pacing transfers to/from a particular state machine FIFO.
int | pio_set_gpio_base (PIO pio, uint gpio_base)
| Set the base GPIO base for the PIO instance.
bool | pio_can_add_program (PIO pio, const pio_program_t *program)
| Determine whether the given program can (at the time of the call) be loaded onto the PIO instance.
bool | pio_can_add_program_at_offset (PIO pio, const pio_program_t *program, uint offset)
| Determine whether the given program can (at the time of the call) be loaded onto the PIO instance starting at a particular location.
int | pio_add_program (PIO pio, const pio_program_t *program)
| Attempt to load the program.
int | pio_add_program_at_offset (PIO pio, const pio_program_t *program, uint offset)
| Attempt to load the program at the specified instruction memory offset.
void | pio_remove_program (PIO pio, const pio_program_t *program, uint loaded_offset)
| Remove a program from a PIO instance's instruction memory.
void | pio_clear_instruction_memory (PIO pio)
| Clears all of a PIO instance's instruction memory.
int | pio_sm_init (PIO pio, uint sm, uint initial_pc, const pio_sm_config *config)
| Resets the state machine to a consistent state, and configures it.
static void | pio_sm_set_enabled (PIO pio, uint sm, bool enabled)
| Enable or disable a PIO state machine.
static void | pio_set_sm_mask_enabled (PIO pio, uint32_t mask, bool enabled)
| Enable or disable multiple PIO state machines.
static void | pio_sm_restart (PIO pio, uint sm)
| Restart a state machine with a known state.
static void | pio_restart_sm_mask (PIO pio, uint32_t mask)
| Restart multiple state machine with a known state.
static void | pio_sm_clkdiv_restart (PIO pio, uint sm)
| Restart a state machine's clock divider from a phase of 0.
static void | pio_clkdiv_restart_sm_mask (PIO pio, uint32_t mask)
| Restart multiple state machines' clock dividers from a phase of 0.
static void | pio_enable_sm_mask_in_sync (PIO pio, uint32_t mask)
| Enable multiple PIO state machines synchronizing their clock dividers.
static void | pio_set_irq0_source_enabled (PIO pio, pio_interrupt_source_t source, bool enabled)
| Enable/Disable a single source on a PIO's IRQ 0.
static void | pio_set_irq1_source_enabled (PIO pio, pio_interrupt_source_t source, bool enabled)
| Enable/Disable a single source on a PIO's IRQ 1.
static void | pio_set_irq0_source_mask_enabled (PIO pio, uint32_t source_mask, bool enabled)
| Enable/Disable multiple sources on a PIO's IRQ 0.
static void | pio_set_irq1_source_mask_enabled (PIO pio, uint32_t source_mask, bool enabled)
| Enable/Disable multiple sources on a PIO's IRQ 1.
static void | pio_set_irqn_source_enabled (PIO pio, uint irq_index, pio_interrupt_source_t source, bool enabled)
| Enable/Disable a single source on a PIO's specified (0/1) IRQ index.
static void | pio_set_irqn_source_mask_enabled (PIO pio, uint irq_index, uint32_t source_mask, bool enabled)
| Enable/Disable multiple sources on a PIO's specified (0/1) IRQ index.
static bool | pio_interrupt_get (PIO pio, uint pio_interrupt_num)
| Determine if a particular PIO interrupt is set.
static void | pio_interrupt_clear (PIO pio, uint pio_interrupt_num)
| Clear a particular PIO interrupt.
static uint8_t | pio_sm_get_pc (PIO pio, uint sm)
| Return the current program counter for a state machine.
static void | pio_sm_exec (PIO pio, uint sm, uint instr)
| Immediately execute an instruction on a state machine.
static bool | pio_sm_is_exec_stalled (PIO pio, uint sm)
| Determine if an instruction set by pio_sm_exec() is stalled executing.
static void | pio_sm_exec_wait_blocking (PIO pio, uint sm, uint instr)
| Immediately execute an instruction on a state machine and wait for it to complete.
static void | pio_sm_set_wrap (PIO pio, uint sm, uint wrap_target, uint wrap)
| Set the current wrap configuration for a state machine.
static void | pio_sm_set_out_pins (PIO pio, uint sm, uint out_base, uint out_count)
| Set the current 'out' pins for a state machine.
static void | pio_sm_set_set_pins (PIO pio, uint sm, uint set_base, uint set_count)
| Set the current 'set' pins for a state machine.
static void | pio_sm_set_in_pins (PIO pio, uint sm, uint in_base)
| Set the current 'in' pins for a state machine.
static void | pio_sm_set_sideset_pins (PIO pio, uint sm, uint sideset_base)
| Set the current 'sideset' pins for a state machine.
static void | pio_sm_set_jmp_pin (PIO pio, uint sm, uint pin)
| Set the 'jmp' pin for a state machine.
static void | pio_sm_put (PIO pio, uint sm, uint32_t data)
| Write a word of data to a state machine's TX FIFO.
static uint32_t | pio_sm_get (PIO pio, uint sm)
| Read a word of data from a state machine's RX FIFO.
static bool | pio_sm_is_rx_fifo_full (PIO pio, uint sm)
| Determine if a state machine's RX FIFO is full.
static bool | pio_sm_is_rx_fifo_empty (PIO pio, uint sm)
| Determine if a state machine's RX FIFO is empty.
static uint | pio_sm_get_rx_fifo_level (PIO pio, uint sm)
| Return the number of elements currently in a state machine's RX FIFO.
static bool | pio_sm_is_tx_fifo_full (PIO pio, uint sm)
| Determine if a state machine's TX FIFO is full.
static bool | pio_sm_is_tx_fifo_empty (PIO pio, uint sm)
| Determine if a state machine's TX FIFO is empty.
static uint | pio_sm_get_tx_fifo_level (PIO pio, uint sm)
| Return the number of elements currently in a state machine's TX FIFO.
static void | pio_sm_put_blocking (PIO pio, uint sm, uint32_t data)
| Write a word of data to a state machine's TX FIFO, blocking if the FIFO is full.
static uint32_t | pio_sm_get_blocking (PIO pio, uint sm)
| Read a word of data from a state machine's RX FIFO, blocking if the FIFO is empty.
void | pio_sm_drain_tx_fifo (PIO pio, uint sm)
| Empty out a state machine's TX FIFO.
static void | pio_sm_set_clkdiv_int_frac8 (PIO pio, uint sm, uint32_t div_int, uint8_t div_frac8)
| set the current clock divider for a state machine using a 16:8 fraction
static void | pio_sm_set_clkdiv_int_frac (PIO pio, uint sm, uint16_t div_int, uint8_t div_frac8)
static void | pio_sm_set_clkdiv (PIO pio, uint sm, float div)
| set the current clock divider for a state machine
static void | pio_sm_clear_fifos (PIO pio, uint sm)
| Clear a state machine's TX and RX FIFOs.
void | pio_sm_set_pins (PIO pio, uint sm, uint32_t pin_values)
| Use a state machine to set a value on all pins for the PIO instance.
void | pio_sm_set_pins64 (PIO pio, uint sm, uint64_t pin_values)
| Use a state machine to set a value on all pins for the PIO instance.
void | pio_sm_set_pins_with_mask (PIO pio, uint sm, uint32_t pin_values, uint32_t pin_mask)
| Use a state machine to set a value on multiple pins for the PIO instance.
void | pio_sm_set_pins_with_mask64 (PIO pio, uint sm, uint64_t pin_values, uint64_t pin_mask)
| Use a state machine to set a value on multiple pins for the PIO instance.
void | pio_sm_set_pindirs_with_mask (PIO pio, uint sm, uint32_t pin_dirs, uint32_t pin_mask)
| Use a state machine to set the pin directions for multiple pins for the PIO instance.
void | pio_sm_set_pindirs_with_mask64 (PIO pio, uint sm, uint64_t pin_dirs, uint64_t pin_mask)
| Use a state machine to set the pin directions for multiple pins for the PIO instance.
int | pio_sm_set_consecutive_pindirs (PIO pio, uint sm, uint pins_base, uint pin_count, bool is_out)
| Use a state machine to set the same pin direction for multiple consecutive pins for the PIO instance.
void | pio_sm_claim (PIO pio, uint sm)
| Mark a state machine as used.
void | pio_claim_sm_mask (PIO pio, uint sm_mask)
| Mark multiple state machines as used.
void | pio_sm_unclaim (PIO pio, uint sm)
| Mark a state machine as no longer used.
int | pio_claim_unused_sm (PIO pio, bool required)
| Claim a free state machine on a PIO instance.
bool | pio_sm_is_claimed (PIO pio, uint sm)
| Determine if a PIO state machine is claimed.
bool | pio_claim_free_sm_and_add_program (const pio_program_t *program, PIO *pio, uint *sm, uint *offset)
| Finds a PIO and statemachine and adds a program into PIO memory.
bool | pio_claim_free_sm_and_add_program_for_gpio_range (const pio_program_t *program, PIO *pio, uint *sm, uint *offset, uint gpio_base, uint gpio_count, bool set_gpio_base)
| Finds a PIO and statemachine and adds a program into PIO memory.
void | pio_remove_program_and_unclaim_sm (const pio_program_t *program, PIO pio, uint sm, uint offset)
| Removes a program from PIO memory and unclaims the state machine.
static int | pio_get_irq_num (PIO pio, uint irqn)
| Return an IRQ for a PIO hardware instance.
static pio_interrupt_source_t | pio_get_tx_fifo_not_full_interrupt_source (uint sm)
| Return the interrupt source for a state machines TX FIFO not full interrupt.
static pio_interrupt_source_t | pio_get_rx_fifo_not_empty_interrupt_source (uint sm)
| Return the interrupt source for a state machines RX FIFO not empty interrupt.