@@ -364,30 +364,30 @@ static int rp1dpi_pio_csync_ilace(struct rp1_dpi *dpi,
364364 unsigned short instructions [] = { /* This is mutable */
365365 0x90a0 , // 0: pull block side 1
366366 0x7040 , // 1: out y, 32 side 1
367- // .wrap_target
368- 0x3083 , // 2: wait 1 gpio, 3 side 1
369- 0xa422 , // 3: mov x, y side 0 [4]
370- 0x2003 , // 4: wait 0 gpio, 3 side 0
371- 0x12c2 , // 5: jmp pin, 2 side 1 [2]
372- 0x3083 , // 6: wait 1 gpio, 3 side 1
373- 0xc442 , // 7: irq clear 2 side 0 [4]
374- 0x2003 , // 8: wait 0 gpio, 3 side 0
375- 0x30c2 , // 9: wait 1 irq, 2 side 1
376- 0x10d4 , // 10: jmp pin, 20 side 1
377- 0x3083 , // 11: wait 1 gpio, 3 side 1
378- 0xa442 , // 12: nop side 0 [4]
379- 0x2003 , // 13: wait 0 gpio, 3 side 0
380- 0xd042 , // 14: irq clear 2 side 1
381- 0xd043 , // 15: irq clear 3 side 1
382- 0x30c2 , // 16: wait 1 irq, 2 side 1
383- 0x20c3 , // 17: wait 1 irq, 3 side 0
384- 0x1054 , // 18: jmp x--, 20 side 1
385- 0x1002 , // 19: jmp 2 side 1
386- 0xd041 , // 20: irq clear 1 side 1
387- 0x3083 , // 21: wait 1 gpio, 3 side 1
388- 0x20c1 , // 22: wait 1 irq, 1 side 0
389- 0x104e , // 23: jmp x--, 14 side 1
390- // .wrap
367+ // .wrap_target ; while (true) {
368+ 0x3083 , // 2: wait 1 gpio, 3 side 1 ; do { @HSync
369+ 0xa422 , // 3: mov x, y side 0 [4] ; CSYNC: x = VSW - 1
370+ 0x2003 , // 4: wait 0 gpio, 3 side 0 ; CSYNC: HSync->CSync
371+ 0x12c2 , // 5: jmp pin, 2 side 1 [2] ; } while (VSync)
372+ 0x3083 , // 6: wait 1 gpio, 3 side 1 ; @HSync
373+ 0xc442 , // 7: irq clear 2 side 0 [4] ; CSYNC: flush IRQ
374+ 0x2003 , // 8: wait 0 gpio, 3 side 0 ; CSYNC: Hsync->CSync
375+ 0x30c2 , // 9: wait 1 irq, 2 side 1 ; @midline
376+ 0x10d4 , // 10: jmp pin, 20 side 1 ; if (!VSync) goto sync_left;
377+ 0x3083 , // 11: wait 1 gpio, 3 side 1 ; @HSync
378+ 0xa442 , // 12: nop side 0 [4] ; CSYNC: delay
379+ 0x2003 , // 13: wait 0 gpio, 3 side 0 ; CSYNC: Hsync->CSync
380+ 0xd042 , // 14: irq clear 2 side 1 ; do { flush IRQ
381+ 0xd043 , // 15: irq clear 3 side 1 ; flush IRQ
382+ 0x30c2 , // 16: wait 1 irq, 2 side 1 ; @midline
383+ 0x20c3 , // 17: wait 1 irq, 3 side 0 ; CSYNC: @BroadRight
384+ 0x1054 , // 18: jmp x--, 20 side 1 ; if (x-- == 0)
385+ 0x1002 , // 19: jmp 2 side 1 ; break;
386+ 0xd041 , // 20: irq clear 1 side 1 ; sync_left: flush IRQ
387+ 0x3083 , // 21: wait 1 gpio, 3 side 1 ; @HSync
388+ 0x20c1 , // 22: wait 1 irq, 1 side 0 ; CSYNC: @BroadLeft
389+ 0x104e , // 23: jmp x--, 14 side 1 ; } while (x--);
390+ // .wrap ; }
391391 };
392392 struct pio_program prog = {
393393 .instructions = instructions ,
@@ -519,7 +519,7 @@ static int rp1dpi_pio_csync_tv(struct rp1_dpi *dpi,
519519 /* Load parameters (Vsync pattern; EQ pulse width) into ISR and Y */
520520 i = (mode -> vsync_end - mode -> vsync_start <= 5 );
521521 pio_sm_put (dpi -> pio , 0 , i ? 0x02ABFFAA : 0xAABFFEAA );
522- pio_sm_put (dpi -> pio , 0 , clock_get_hz (clk_sys ) / (i ? 425532 : 434782 ));
522+ pio_sm_put (dpi -> pio , 0 , clock_get_hz (clk_sys ) / (i ? 425531 : 434782 ) - 3 );
523523 pio_sm_exec (dpi -> pio , 0 , pio_encode_pull (false, false));
524524 pio_sm_exec (dpi -> pio , 0 , pio_encode_out (pio_y , 32 ));
525525 pio_sm_exec (dpi -> pio , 0 , pio_encode_in (pio_y , 32 ));
0 commit comments