@web-font-path: "roboto-debian.css";
#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"
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. | |