From ea1fc9bf71819acf931dbfa9b131f74fd854a680 Mon Sep 17 00:00:00 2001 From: matthias wagner Date: Sun, 30 Jul 2023 17:11:00 +0200 Subject: [PATCH] dma + pio working at 40hz --- src/main.c | 20 ++++++++++++++------ src/tft.c | 8 +++----- src/tft.pio | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main.c b/src/main.c index 70fa9ff..b98541c 100644 --- a/src/main.c +++ b/src/main.c @@ -20,10 +20,10 @@ const struct tft_config lcd_config = { int main() { - set_sys_clock_khz(100 * 1000, true); + set_sys_clock_khz(200 * 1000, true); uint offset = pio_add_program(lcd_config.pio, &tft_program); - tft_program_init(lcd_config.pio, lcd_config.sm, offset, lcd_config.gpio_din, lcd_config.gpio_clk, 10.f); + tft_program_init(lcd_config.pio, lcd_config.sm, offset, lcd_config.gpio_din, lcd_config.gpio_clk, 1.f); int dma_chan = dma_claim_unused_channel(true); dma_channel_config c = dma_channel_get_default_config(dma_chan); @@ -35,15 +35,23 @@ int main() &c, &pio0->txf[lcd_config.sm], NULL, - 320*480/12, + 320*480/4, false ); dled_start(25); tft_init(&lcd_config, dma_chan); sleep_ms(100); - tft_fill(16000); - dma_channel_wait_for_finish_blocking(dma_chan); - while (true); + tft_start_pixels(lcd_config.pio, lcd_config.sm); + while (true){ + for(size_t i = 0; i < 8; i++) { + tft_fill(0); + dma_channel_wait_for_finish_blocking(dma_chan); + } + for(size_t i = 0; i < 8; i++) { + tft_fill(31807); + dma_channel_wait_for_finish_blocking(dma_chan); + } + } return 0; } void dled_start(uint pin){ diff --git a/src/tft.c b/src/tft.c index be9b10a..c6a66cc 100644 --- a/src/tft.c +++ b/src/tft.c @@ -56,7 +56,7 @@ void tft_init(const struct tft_config* config, int dma_channel) { gpio_put(tft_cfg.gpio_cs, 1); gpio_put(tft_cfg.gpio_rst, 1); - //lcd_init(tft_cfg.pio, tft_cfg.sm, st7789_init_seq); + lcd_init(tft_cfg.pio, tft_cfg.sm, st7789_init_seq); gpio_put(tft_cfg.gpio_bl, 1); } void tft_fill(uint16_t color) { @@ -64,10 +64,8 @@ void tft_fill(uint16_t color) { uint32_t two = 0; two |= color_left; two |= color; - //tft_start_pixels(tft_cfg.pio, tft_cfg.sm); - uint32_t pix_buf[320*480/12]; - size_t i; - for(i = 0; i < 320*480/12; i++) { + uint32_t pix_buf[320*480/4]; + for(size_t i = 0; i < 320*480/4; i++) { pix_buf[i] = two; } dma_channel_set_read_addr(dma_chan, pix_buf, true); diff --git a/src/tft.pio b/src/tft.pio index 6a8a534..c9e7df1 100644 --- a/src/tft.pio +++ b/src/tft.pio @@ -34,7 +34,7 @@ static inline void tft_program_init(PIO pio, uint sm, uint offset, uint data_pin sm_config_set_out_pins(&c, data_pin, 1); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); sm_config_set_clkdiv(&c, clk_div); - sm_config_set_out_shift(&c, false, true, 32); + sm_config_set_out_shift(&c, false, true, 8); pio_sm_init(pio, sm, offset, &c); pio_sm_set_enabled(pio, sm, true); }