Skip to content

Commit b373096

Browse files
committed
Fix bit order, edge sampling and deinterleaving, First working version, validated on RP2350 with 3 ADCs
1 parent 4aa83b6 commit b373096

File tree

3 files changed

+10
-13
lines changed

3 files changed

+10
-13
lines changed

src/current/rp2350/RP2350PIOCurrentSense.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
pio_sm_set_consecutive_pindirs(pio, sm, this->pinD0, 3, false); // D0..D2 in
6565

6666
// Shift config: right, autopush every 32 bits (two pushes per conversion)
67-
sm_config_set_in_shift(&c, true, true, 32);
67+
sm_config_set_in_shift(&c, false, true, 32);
6868

6969
// SCK ≈ clk_sys / (2 * clkdiv) because each SCK period = 2 instructions
7070
float div = (float)clock_get_hz(clk_sys) / (2.0f * sck_hz);
@@ -121,7 +121,7 @@
121121
*c = 0;
122122
*d = 0;
123123
for (int i = 0; i < 64; i += 4) {
124-
uint32_t w = (i < 32) ? w1 : w0;
124+
uint32_t w = (i < 32) ? w0 : w1;
125125
int shift = 28 - (i % 32); // 28, 24, ..., 0 for each group of 4 bits
126126

127127
uint32_t group = (w >> shift) & 0xF; // extract aN bN cN dN

src/current/rp2350/bu79100g_parallel3.pio

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@ dummy_loop:
1717
nop side 0 ; SCK=0
1818
jmp x--, dummy_loop side 1 ; SCK=1
1919
set pins, 1 side 1 ; CSB=0, keep SCK=HIGH at CSB falling (datasheet rec.)
20-
set x, 15 side 1
20+
set x, 15 side 1
2121
set pins, 0
22-
; -------- 16 real clocks, sample on SCK rising edge -----------
22+
; -------- 16 real clocks, sample on SCK falling edge -----------
2323
read_loop:
24-
;nop side 1 ;DEBUG so we don't have to wait for autopush.
25-
in pins, 4 side 1 ; SCK=1, sample D2..D0 on rising edge ;Note, Here I had to read 4 pins instead of 3. It seems that with 3, a bit is lost after the first push. Need to read the doc again
26-
jmp x--, read_loop side 0 ; SCK=0
24+
in pins, 4 side 0 ; SCK=0, sample D2..D0 on falling edge ;Note, Here I had to read 4 pins instead of 3. It seems that with 3, a bit is lost after the first push. Need to read the doc again
25+
jmp x--, read_loop side 1 ; SCK=1
2726
; -------- finish conversion -----------------------------------
2827
set pins, 1 side 1 ; CSB=1, SCK=1
2928
; -------- Pad with 0 ------------------------------------------

src/current/rp2350/bu79100g_parallel3.pio.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// ------------------ //
1414

1515
#define bu79100g_parallel3_wrap_target 0
16-
#define bu79100g_parallel3_wrap 14
16+
#define bu79100g_parallel3_wrap 12
1717
#define bu79100g_parallel3_pio_version 1
1818

1919
static const uint16_t bu79100g_parallel3_program_instructions[] = {
@@ -28,18 +28,16 @@ static const uint16_t bu79100g_parallel3_program_instructions[] = {
2828
0xf801, // 7: set pins, 1 side 1
2929
0xf82f, // 8: set x, 15 side 1
3030
0xe000, // 9: set pins, 0
31-
0x5804, // 10: in pins, 4 side 1
32-
0x104a, // 11: jmp x--, 10 side 0
31+
0x5004, // 10: in pins, 4 side 0
32+
0x184a, // 11: jmp x--, 10 side 1
3333
0xf801, // 12: set pins, 1 side 1
34-
0xe020, // 13: set x, 0
35-
0xa029, // 14: mov x, ~x
3634
// .wrap
3735
};
3836

3937
#if !PICO_NO_HARDWARE
4038
static const struct pio_program bu79100g_parallel3_program = {
4139
.instructions = bu79100g_parallel3_program_instructions,
42-
.length = 15,
40+
.length = 13,
4341
.origin = -1,
4442
.pio_version = bu79100g_parallel3_pio_version,
4543
#if PICO_PIO_VERSION > 0

0 commit comments

Comments
 (0)