Kinda works
This commit is contained in:
parent
f0b4a6d081
commit
9b2dd8f3d2
3 changed files with 42 additions and 8 deletions
|
@ -7,6 +7,7 @@
|
||||||
#include <esp_err.h>
|
#include <esp_err.h>
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
|
#include "esp_heap_caps.h"
|
||||||
|
|
||||||
// #include <Arduino.h>
|
// #include <Arduino.h>
|
||||||
#include "platforms/platform_detect.hpp"
|
#include "platforms/platform_detect.hpp"
|
||||||
|
|
|
@ -4,6 +4,34 @@
|
||||||
|
|
||||||
//First implementation might have a lot of bugs, especially on deleting and reloading
|
//First implementation might have a lot of bugs, especially on deleting and reloading
|
||||||
|
|
||||||
|
//major test setup:
|
||||||
|
// ESP32-C6 4MB Flash (USB disabled)
|
||||||
|
// 64x32 matrix (2 scanlines) P5
|
||||||
|
// esp32c6_default_pins.hpp
|
||||||
|
// double_buffer = sometimes active, sometimes not - not much difference
|
||||||
|
// clkphase = false, latch_blanking = 1, i2sspeed = 10Mhz, colordepth = 5
|
||||||
|
// brightness = 15
|
||||||
|
// I use my custom GFX library, so neither GFX Class nor AdafruitGFX, during testing I forced it to 50hz. more would case ghosting and artifacts
|
||||||
|
// I'm to lazy to make a proper voltage supply, so lets just say - powersupply might be an issue
|
||||||
|
// I sodered the pins to the esp32c6 devkit, but used jumer wired to conned to a HUB75 Data cable
|
||||||
|
// which is plug into the hub
|
||||||
|
// I'm using custom arduino build, quite close to the 3.0.1 release, based on idf-5.1 - there might be problems when updating to idf 5.2
|
||||||
|
|
||||||
|
//known bugs of this first implementation:
|
||||||
|
// - doublebuffer might shift the first view colums
|
||||||
|
// - when wriring to littlefs (maybe flash in general) flashing of the first lines, because the
|
||||||
|
// restart is sceduled - seems like reading ha sno effect
|
||||||
|
// maybe the problem is the webserver which reveives the data
|
||||||
|
// - there seems to be glowing of the fist line - might be power supply issue on my side
|
||||||
|
// - BIG PROBLEM on 64x32 matrix (2 scanlines) the first 13x16 block flickers. Not the bottom half,
|
||||||
|
// just the top half, maybe pin related? - increases by higher gfx action, never goes to zero
|
||||||
|
// sometimer randomly stops fur multiple minutes
|
||||||
|
// - due to a single core everything (I expierienced just a view, very little artifacts with all of
|
||||||
|
// them active at the same time: WiFi, AsyncWeserver, AsyncTCP, Filesystem, Serial, dns, mdns, sntp, custom GFX Task @ 50hz, berry-lang interpreter)
|
||||||
|
// can cause artifacts and flashing - the problem is that the 'dma-loop' has to be retriggered
|
||||||
|
// see gdma_on_trans_eof_callback, it may be a isr action, but still needs to reserve the core
|
||||||
|
// for a view clocks
|
||||||
|
|
||||||
|
|
||||||
#pragma message "Compiling for ESP32-C6"
|
#pragma message "Compiling for ESP32-C6"
|
||||||
|
|
||||||
|
@ -36,6 +64,17 @@ IRAM_ATTR bool gdma_on_trans_eof_callback(gdma_channel_handle_t dma_chan,
|
||||||
|
|
||||||
previousBufferFree = true;
|
previousBufferFree = true;
|
||||||
|
|
||||||
|
|
||||||
|
//parlio_ll_tx_reset_fifo(&PARL_IO);
|
||||||
|
parlio_ll_tx_reset_clock(&PARL_IO);
|
||||||
|
|
||||||
|
//gdma_start(dma_chan, (intptr_t)&_dmadesc_a[0]);
|
||||||
|
|
||||||
|
//while (parlio_ll_tx_is_ready(&PARL_IO) == false);
|
||||||
|
|
||||||
|
//parlio_ll_tx_start(&PARL_IO, true);
|
||||||
|
//parlio_ll_tx_enable_clock(&PARL_IO, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +96,6 @@ bool Bus_Parallel16::init(void)
|
||||||
parlio_ll_tx_reset_fifo(&PARL_IO);
|
parlio_ll_tx_reset_fifo(&PARL_IO);
|
||||||
esp_rom_delay_us(1000);
|
esp_rom_delay_us(1000);
|
||||||
|
|
||||||
|
|
||||||
parlio_ll_clock_source_t clk_src = (parlio_ll_clock_source_t)PARLIO_CLK_SRC_DEFAULT;
|
parlio_ll_clock_source_t clk_src = (parlio_ll_clock_source_t)PARLIO_CLK_SRC_DEFAULT;
|
||||||
uint32_t periph_src_clk_hz = 0;
|
uint32_t periph_src_clk_hz = 0;
|
||||||
esp_clk_tree_src_get_freq_hz((soc_module_clk_t)clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &periph_src_clk_hz);
|
esp_clk_tree_src_get_freq_hz((soc_module_clk_t)clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &periph_src_clk_hz);
|
||||||
|
@ -139,7 +177,7 @@ bool Bus_Parallel16::init(void)
|
||||||
gpio_set_drive_capability((gpio_num_t)_cfg.pin_wr, (gpio_drive_cap_t)3);
|
gpio_set_drive_capability((gpio_num_t)_cfg.pin_wr, (gpio_drive_cap_t)3);
|
||||||
|
|
||||||
parlio_ll_tx_set_idle_data_value(&PARL_IO, 0);
|
parlio_ll_tx_set_idle_data_value(&PARL_IO, 0);
|
||||||
parlio_ll_tx_set_trans_bit_len(&PARL_IO, ((1<<16) -1) * 8);
|
parlio_ll_tx_set_trans_bit_len(&PARL_IO, 0);//((1<<16) -1) * 8);
|
||||||
|
|
||||||
return true; // no return val = illegal instruction
|
return true; // no return val = illegal instruction
|
||||||
}
|
}
|
||||||
|
@ -296,13 +334,9 @@ void Bus_Parallel16::flip_dma_output_buffer(int back_buffer_id)
|
||||||
_dmadesc_a[_dmadesc_count - 1].next = (dma_descriptor_t *)&_dmadesc_a[0];
|
_dmadesc_a[_dmadesc_count - 1].next = (dma_descriptor_t *)&_dmadesc_a[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// current_back_buffer_id ^= 1;
|
|
||||||
|
|
||||||
previousBufferFree = false;
|
previousBufferFree = false;
|
||||||
|
|
||||||
// while (i2s_parallel_is_previous_buffer_free() == false) {}
|
while (!previousBufferFree) ;
|
||||||
while (!previousBufferFree)
|
|
||||||
;
|
|
||||||
|
|
||||||
} // end flip
|
} // end flip
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,6 @@ class Bus_Parallel16
|
||||||
|
|
||||||
config_t _cfg;
|
config_t _cfg;
|
||||||
|
|
||||||
|
|
||||||
gdma_channel_handle_t dma_chan;
|
gdma_channel_handle_t dma_chan;
|
||||||
|
|
||||||
uint32_t _dmadesc_count = 0; // number of dma decriptors
|
uint32_t _dmadesc_count = 0; // number of dma decriptors
|
||||||
|
|
Loading…
Reference in a new issue