From ef3bdfab11801d390f05e0cf52dd57fcab8b22cc Mon Sep 17 00:00:00 2001 From: graham sanderson Date: Sat, 13 Feb 2021 13:54:50 -0600 Subject: [PATCH] default scanvideo to support 125mhz system clock for 640x480 - also means better compatibility as 25Mhz is better than 24Mhz when compared to 25.175Mhz --- README.md | 3 +-- apps/popcorn/CMakeLists.txt | 2 ++ apps/popcorn/popcorn.c | 4 ++++ scanvideo/demo1/CMakeLists.txt | 1 + scanvideo/demo1/demo1.c | 13 ++----------- scanvideo/flash_stream/flash_stream.c | 2 +- scanvideo/flash_stream/img/pack.sh | 2 +- scanvideo/hscroll_dma_tiles/hscroll_dma_tiles.c | 2 ++ scanvideo/mandelbrot/mandelbrot.c | 13 +++++++++---- scanvideo/mario_tiles/mario_tiles.c | 2 ++ scanvideo/scanvideo_minimal/scanvideo_minimal.c | 2 ++ scanvideo/sprite_demo/sprite_demo.c | 4 ++++ scanvideo/test_pattern/test_pattern.c | 1 - scanvideo/textmode/textmode.c | 11 +++++++---- 14 files changed, 38 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 643b0c0..fc89883 100644 --- a/README.md +++ b/README.md @@ -67,5 +67,4 @@ Name|Description ## Networking Name|Description ---|--- -[usb_host_webserver](net/usb_host_webserver)| A simple web server implemented as - +[usb_host_webserver](net/usb_host_webserver)| A simple web server diff --git a/apps/popcorn/CMakeLists.txt b/apps/popcorn/CMakeLists.txt index 0314dc6..2b615e4 100644 --- a/apps/popcorn/CMakeLists.txt +++ b/apps/popcorn/CMakeLists.txt @@ -24,6 +24,8 @@ if (PICO_ON_DEVICE) VIDEO_DBI PICO_SCANVIDEO_LINKED_SCANLINE_BUFFERS=1 # we do two rows at a time + + #PICO_SCANVIDEO_48MHZ # still uses this for now ) target_link_libraries(popcorn diff --git a/apps/popcorn/popcorn.c b/apps/popcorn/popcorn.c index 8579dee..4f5f8f8 100644 --- a/apps/popcorn/popcorn.c +++ b/apps/popcorn/popcorn.c @@ -1617,7 +1617,11 @@ void setup_audio() { } int main(void) { +#if PICO_SCANVIDEO_48MHZ set_sys_clock_48mhz(); +#else + set_sys_clock_khz(50000, true); +#endif #if USE_RGB_LOW_FOR_DEBUG_PINS gpio_dir_out_mask(0x421); diff --git a/scanvideo/demo1/CMakeLists.txt b/scanvideo/demo1/CMakeLists.txt index 3c888d9..9baa843 100644 --- a/scanvideo/demo1/CMakeLists.txt +++ b/scanvideo/demo1/CMakeLists.txt @@ -7,6 +7,7 @@ if (TARGET pico_scanvideo_dpi) target_compile_definitions(demo1 PRIVATE + #PICO_SCANVIDEO_48MHZ # video overlay is distracting # PICO_SCANVIDEO_PLANE_COUNT=3 ) diff --git a/scanvideo/demo1/demo1.c b/scanvideo/demo1/demo1.c index e4b4691..61add5f 100644 --- a/scanvideo/demo1/demo1.c +++ b/scanvideo/demo1/demo1.c @@ -43,17 +43,6 @@ bool render_scanline_test_pattern(struct scanvideo_scanline_buffer *dest, int co bool render_scanline_pi(struct scanvideo_scanline_buffer *dest, int core); extern const struct scanvideo_pio_program video_24mhz_composable; -const struct scanvideo_mode vga_mode_320x256_60 = - { - .default_timing = &vga_timing_640x480_60_default, - .pio_program = &video_24mhz_composable, - .width = 320, - .height = 256, - .xscale = 2, - .yscale = 480, - .yscale_denominator = 256 - }; - //#define vga_mode vga_mode_1080p //#define vga_mode vga_mode_720p @@ -612,7 +601,9 @@ int main(void) { gpio_put(27, 0); #if PICO_ON_DEVICE && !PICO_ON_FPGA +#if PICO_SCANVIDEO_48MHz set_sys_clock_khz(96000, true); +#endif // set_sys_clock_48(); #endif diff --git a/scanvideo/flash_stream/flash_stream.c b/scanvideo/flash_stream/flash_stream.c index b566618..7d09949 100644 --- a/scanvideo/flash_stream/flash_stream.c +++ b/scanvideo/flash_stream/flash_stream.c @@ -133,7 +133,7 @@ void __time_critical_func(render_scanline)(struct scanvideo_scanline_buffer *des } int main(void) { - set_sys_clock_khz(192000, true); + set_sys_clock_khz(200000, true); setup_default_uart(); #ifdef PICO_SMPS_MODE_PIN diff --git a/scanvideo/flash_stream/img/pack.sh b/scanvideo/flash_stream/img/pack.sh index 0c6cb6f..c5bbd08 100755 --- a/scanvideo/flash_stream/img/pack.sh +++ b/scanvideo/flash_stream/img/pack.sh @@ -6,4 +6,4 @@ rm -f *.bin pack.uf2 ./packtiles -sdf bgar5515 Stone_Mountain_by_Brad_Huchteman.png stone_mountain.bin ./packtiles -sdf bgar5515 Voss_by_fortuneblues.png voss.bin cat *.bin > pack.bin -uf2conv -f pico -b 0x1003c000 pack.bin -o pack.uf2 +uf2conv -f pico -b 0x1003c000 pack.bin -o pack.uf2 \ No newline at end of file diff --git a/scanvideo/hscroll_dma_tiles/hscroll_dma_tiles.c b/scanvideo/hscroll_dma_tiles/hscroll_dma_tiles.c index 2091d5e..d198217 100644 --- a/scanvideo/hscroll_dma_tiles/hscroll_dma_tiles.c +++ b/scanvideo/hscroll_dma_tiles/hscroll_dma_tiles.c @@ -572,7 +572,9 @@ void go_core1(void (*execute)()) { } int main(void) { +#if PICO_SCANVIDEO_48MHz set_sys_clock_48mhz(); +#endif setup_default_uart(); #if PICO_NO_HARDWARE diff --git a/scanvideo/mandelbrot/mandelbrot.c b/scanvideo/mandelbrot/mandelbrot.c index 2f3c9a3..073309d 100644 --- a/scanvideo/mandelbrot/mandelbrot.c +++ b/scanvideo/mandelbrot/mandelbrot.c @@ -239,19 +239,24 @@ void __time_critical_func(frame_update_logic)() { } int main(void) { + uint base_freq; +#if PICO_SCANVIDEO_48MHZ + base_freq = 48000; +#else + base_freq = 50000; +#endif #if PICO_ON_DEVICE #ifdef TURBO_BOOST hw_set_bits(&mm_vreg_and_chip_reset->vreg, VREG_AND_CHIP_RESET_VREG_VSEL_BITS); sleep_ms(10); - set_sys_clock_khz(48000*6, true); + set_sys_clock_khz(base_freq*6, true); #else - //set_sys_clock(1536*MHZ, 4, 2); - set_sys_clock_khz(48000 * 4, true); + set_sys_clock_khz(base_freq * 3, true); #endif #endif // Re init uart now that clk_peri has changed setup_default_uart(); - gpio_debug_pins_init(); +// gpio_debug_pins_init(); return vga_main(); } diff --git a/scanvideo/mario_tiles/mario_tiles.c b/scanvideo/mario_tiles/mario_tiles.c index 765d037..0bac509 100644 --- a/scanvideo/mario_tiles/mario_tiles.c +++ b/scanvideo/mario_tiles/mario_tiles.c @@ -665,7 +665,9 @@ void go_core1(void (*execute)()) { } int main(void) { +#if PICO_SCANVIDEO_48MHz set_sys_clock_48mhz(); +#endif setup_default_uart(); #if PICO_NO_HARDWARE diff --git a/scanvideo/scanvideo_minimal/scanvideo_minimal.c b/scanvideo/scanvideo_minimal/scanvideo_minimal.c index 6d95e93..1845ebc 100644 --- a/scanvideo/scanvideo_minimal/scanvideo_minimal.c +++ b/scanvideo/scanvideo_minimal/scanvideo_minimal.c @@ -104,7 +104,9 @@ void render_scanline(struct scanvideo_scanline_buffer *dest, int core) { int main(void) { +#if PICO_SCANVIDEO_48MHz set_sys_clock_48mhz(); +#endif // Re init uart now that clk_peri has changed setup_default_uart(); diff --git a/scanvideo/sprite_demo/sprite_demo.c b/scanvideo/sprite_demo/sprite_demo.c index 1de949f..968194d 100644 --- a/scanvideo/sprite_demo/sprite_demo.c +++ b/scanvideo/sprite_demo/sprite_demo.c @@ -176,6 +176,10 @@ int main(void) { sleep_ms(10); set_sys_clock(1536*MHZ, 4, 1); #else +#if PICO_SCANVIDEO_48MHz + set_sys_clock_48mhz(); +#endif + set_sys_clock_pll(1536 * MHZ, 4, 2); #endif // Re init uart now that clk_peri has changed diff --git a/scanvideo/test_pattern/test_pattern.c b/scanvideo/test_pattern/test_pattern.c index d189920..265ad7e 100644 --- a/scanvideo/test_pattern/test_pattern.c +++ b/scanvideo/test_pattern/test_pattern.c @@ -27,7 +27,6 @@ static semaphore_t video_initted; static bool invert; int main(void) { - set_sys_clock_48mhz(); stdio_init_all(); // create a semaphore to be posted when video init is complete diff --git a/scanvideo/textmode/textmode.c b/scanvideo/textmode/textmode.c index fc3b897..f040f06 100644 --- a/scanvideo/textmode/textmode.c +++ b/scanvideo/textmode/textmode.c @@ -14,6 +14,9 @@ #include "pico/sync.h" #include "font.h" +// set this to 3, 4 or 5 for smallest to biggest font +#define FRAGMENT_WORDS 4 + #if PICO_ON_DEVICE #include "hardware/structs/bus_ctrl.h" @@ -168,8 +171,6 @@ uint32_t *font_raw_pixels; #else uint32_t font_raw_pixels[16384]; #endif -#define FRAGMENT_WORDS 4 -//#define FRAGMENT_WORDS 5 #define FONT_WIDTH_WORDS FRAGMENT_WORDS #if FRAGMENT_WORDS == 5 const lv_font_t *font = &ubuntu_mono10; @@ -406,8 +407,8 @@ bool render_scanline_bg(struct scanvideo_scanline_buffer *dest, int core) { // todo for SOME REASON, 80 is the max we can do without starting to really get bus delays (even with priority)... not sure how this could be // todo actually it seems it can work, it just mostly starts incorrectly synced!? #define COUNT MIN(vga_mode.width/(FRAGMENT_WORDS*2)-1, 80)//MAX_SCANLINE_BUFFER_WORDS / 2 - 2) -#undef COUNT -#define COUNT 79 +//#undef COUNT +//#define COUNT 79 // we need to take up 5 words, since we have fixed width #if PICO_SCANVIDEO_PLANE1_FIXED_FRAGMENT_DMA dest->fragment_words = FRAGMENT_WORDS; @@ -507,7 +508,9 @@ void go_core1(void (*execute)()) { } int main(void) { +#if PICO_SCANVIDEO_48MHZ set_sys_clock_48mhz(); +#endif gpio_put(27, 0); setup_default_uart();