dma + pio working at 40hz
This commit is contained in:
20
src/main.c
20
src/main.c
@@ -20,10 +20,10 @@ const struct tft_config lcd_config = {
|
|||||||
|
|
||||||
int main()
|
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);
|
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);
|
int dma_chan = dma_claim_unused_channel(true);
|
||||||
dma_channel_config c = dma_channel_get_default_config(dma_chan);
|
dma_channel_config c = dma_channel_get_default_config(dma_chan);
|
||||||
@@ -35,15 +35,23 @@ int main()
|
|||||||
&c,
|
&c,
|
||||||
&pio0->txf[lcd_config.sm],
|
&pio0->txf[lcd_config.sm],
|
||||||
NULL,
|
NULL,
|
||||||
320*480/12,
|
320*480/4,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
dled_start(25);
|
dled_start(25);
|
||||||
tft_init(&lcd_config, dma_chan);
|
tft_init(&lcd_config, dma_chan);
|
||||||
sleep_ms(100);
|
sleep_ms(100);
|
||||||
tft_fill(16000);
|
tft_start_pixels(lcd_config.pio, lcd_config.sm);
|
||||||
dma_channel_wait_for_finish_blocking(dma_chan);
|
while (true){
|
||||||
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;
|
return 0;
|
||||||
}
|
}
|
||||||
void dled_start(uint pin){
|
void dled_start(uint pin){
|
||||||
|
|||||||
@@ -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_cs, 1);
|
||||||
gpio_put(tft_cfg.gpio_rst, 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);
|
gpio_put(tft_cfg.gpio_bl, 1);
|
||||||
}
|
}
|
||||||
void tft_fill(uint16_t color) {
|
void tft_fill(uint16_t color) {
|
||||||
@@ -64,10 +64,8 @@ void tft_fill(uint16_t color) {
|
|||||||
uint32_t two = 0;
|
uint32_t two = 0;
|
||||||
two |= color_left;
|
two |= color_left;
|
||||||
two |= color;
|
two |= color;
|
||||||
//tft_start_pixels(tft_cfg.pio, tft_cfg.sm);
|
uint32_t pix_buf[320*480/4];
|
||||||
uint32_t pix_buf[320*480/12];
|
for(size_t i = 0; i < 320*480/4; i++) {
|
||||||
size_t i;
|
|
||||||
for(i = 0; i < 320*480/12; i++) {
|
|
||||||
pix_buf[i] = two;
|
pix_buf[i] = two;
|
||||||
}
|
}
|
||||||
dma_channel_set_read_addr(dma_chan, pix_buf, true);
|
dma_channel_set_read_addr(dma_chan, pix_buf, true);
|
||||||
|
|||||||
@@ -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_out_pins(&c, data_pin, 1);
|
||||||
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
|
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
|
||||||
sm_config_set_clkdiv(&c, clk_div);
|
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_init(pio, sm, offset, &c);
|
||||||
pio_sm_set_enabled(pio, sm, true);
|
pio_sm_set_enabled(pio, sm, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user