Datasheet

Table Of Contents
60 ;
61 ; The IN mapping and the JMP pin select must both be mapped to the GPIO used for
62 ; RX data. Autopush must be enabled.
63
64 public start:
65 initial_high: ; Find rising edge at start of bit period
66 wait 1 pin, 0 [11] ; Delay to eye of second half-period (i.e 3/4 of way
67 jmp pin high_0 ; through bit) and branch on RX pin high/low.
68 high_1:
69 in x, 1 ; Second transition detected (a `1` data symbol)
70 jmp initial_high
71 high_0:
72 in y, 1 [1] ; Line still high, no centre transition (data is `0`)
73 ; Fall-through
74
75 .wrap_target
76 initial_low: ; Find falling edge at start of bit period
77 wait 0 pin, 0 [11] ; Delay to eye of second half-period
78 jmp pin low_1
79 low_0:
80 in y, 1 ; Line still low, no centre transition (data is `0`)
81 jmp initial_high
82 low_1: ; Second transition detected (data is `1`)
83 in x, 1 [1]
84 .wrap
This code assumes that X and Y have the values 1 and 0, respectively. This is arranged for by the included C helper
function:
Pico Examples: https://github.com/raspberrypi/pico-examples/tree/master/pio/differential_manchester/differential_manchester.pio Lines 87 - 103
Ê87 static inline void differential_manchester_rx_program_init(PIO pio, uint sm, uint offset,
Ê uint pin, float div) {
Ê88 pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false);
Ê89 pio_gpio_init(pio, pin);
Ê90
Ê91 pio_sm_config c = differential_manchester_rx_program_get_default_config(offset);
Ê92 sm_config_set_in_pins(&c, pin); // for WAIT
Ê93 sm_config_set_jmp_pin(&c, pin); // for JMP
Ê94 sm_config_set_in_shift(&c, true, true, 32);
Ê95 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
Ê96 sm_config_set_clkdiv(&c, div);
Ê97 pio_sm_init(pio, sm, offset, &c);
Ê98
Ê99 // X and Y are set to 0 and 1, to conveniently emit these to ISR/FIFO.
100 pio_sm_exec(pio, sm, pio_encode_set(pio_x, 1));
101 pio_sm_exec(pio, sm, pio_encode_set(pio_y, 0));
102 pio_sm_set_enabled(pio, sm, true);
103 }
All the pieces now exist to loopback some serial data over a wire between two GPIOs.
Pico Examples: https://github.com/raspberrypi/pico-examples/tree/master/pio/differential_manchester/differential_manchester.c Lines 1 - 43
Ê1 /**
Ê2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
Ê3 *
Ê4 * SPDX-License-Identifier: BSD-3-Clause
Ê5 */
Ê6
RP2040 Datasheet
3.6. Examples 378