From 6b6b76b212a5d80a345604dd9f9a14d0b46d1558 Mon Sep 17 00:00:00 2001 From: giomba Date: Thu, 13 Oct 2022 22:05:49 +0200 Subject: [PATCH] Fix autopull on PIO0 using SDK setup functions. --- src/main.c | 30 ++++++++++++++---------------- src/vga.pio | 3 ++- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main.c b/src/main.c index a8a2bdf..0baa93e 100644 --- a/src/main.c +++ b/src/main.c @@ -35,21 +35,17 @@ static Frame frames[FRAMES] = {0}; static void vga_pixel_program_init(PIO pio, uint sm, uint offset) { // magic definition of the called function? - pio_sm_config c = vga_free_run_program_get_default_config(offset); + pio_sm_config config = vga_free_run_program_get_default_config(offset); // destination pins for OUT instructions - sm_config_set_out_pins(&c, 22, 1); + sm_config_set_out_pins(&config, 22, 1); + sm_config_set_out_shift(&config, true, true, 0); pio_gpio_init(pio, 22); pio_sm_set_consecutive_pindirs(pio, sm, 22, 1, true); - pio_sm_init(pio, sm, offset, &c); + pio_sm_init(pio, sm, offset, &config); pio_sm_set_clkdiv_int_frac(pio, sm, 1, 0); - pio->sm->shiftctrl = (1 << PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB) | - (1 << PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB) | - (1 << PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB) | - (1 << PIO_SM0_SHIFTCTRL_AUTOPULL_LSB); - pio_sm_set_enabled(pio, sm, true); } @@ -109,12 +105,6 @@ int main() sleep_ms(5000); - // VGA pixel program - uint offset0 = pio_add_program(pio, &vga_free_run_program); - uint sm0 = pio_claim_unused_sm(pio, true); - printf("Starting VGA pixel machine on %u...\n", sm0); - vga_pixel_program_init(pio, sm0, offset0); - // VGA HSYNC program uint offset1 = pio_add_program(pio, &vga_hsync_program); uint sm1 = pio_claim_unused_sm(pio, true); @@ -135,6 +125,12 @@ int main() pio_sm_put_blocking(pio, sm2, 3 - 1); pio_sm_put_blocking(pio, sm2, 500 - 3 - 1); + // VGA pixel program + uint offset0 = pio_add_program(pio, &vga_free_run_program); + uint sm0 = pio_claim_unused_sm(pio, true); + printf("Starting VGA pixel machine on %u...\n", sm0); + vga_pixel_program_init(pio, sm0, offset0); + printf("Start!\n"); while (true) @@ -142,8 +138,10 @@ int main() for (size_t i = 0; i < sizeof(frames[0].data);) { // feed pixel machine - if (!pio_sm_is_tx_fifo_full(pio, sm0)) - pio_sm_put_blocking(pio, sm0, frames[0].data[i++]); + pio_sm_put_blocking(pio, sm0, frames[0].data[i++]); + // printf("%d.", i); } + // sleep_ms(1000); + // printf("."); } } diff --git a/src/vga.pio b/src/vga.pio index bc6b580..12633b1 100644 --- a/src/vga.pio +++ b/src/vga.pio @@ -1,9 +1,10 @@ .program vga_free_run entrypoint_vga_free_run: - pull loop: out pins, 1 [2] + nop + nop jmp loop .program vga_hsync