dma + pio working at 40hz

This commit is contained in:
matthias wagner
2023-07-30 17:11:00 +02:00
parent c01e73aa75
commit ea1fc9bf71
3 changed files with 18 additions and 12 deletions

View File

@@ -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);
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);
while (true);
}
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){

View File

@@ -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);

View File

@@ -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);
}