5 #include <hw/dvisampler.h>
9 static void calibrate_delays(void)
11 CSR_DVISAMPLER0_D0_DELAY_CTL
= DVISAMPLER_DELAY_CAL
;
12 CSR_DVISAMPLER0_D1_DELAY_CTL
= DVISAMPLER_DELAY_CAL
;
13 CSR_DVISAMPLER0_D2_DELAY_CTL
= DVISAMPLER_DELAY_CAL
;
14 while(CSR_DVISAMPLER0_D0_DELAY_BUSY
|| CSR_DVISAMPLER0_D1_DELAY_BUSY
|| CSR_DVISAMPLER0_D2_DELAY_BUSY
);
15 CSR_DVISAMPLER0_D0_DELAY_CTL
= DVISAMPLER_DELAY_RST
;
16 CSR_DVISAMPLER0_D1_DELAY_CTL
= DVISAMPLER_DELAY_RST
;
17 CSR_DVISAMPLER0_D2_DELAY_CTL
= DVISAMPLER_DELAY_RST
;
18 CSR_DVISAMPLER0_D0_PHASE_RESET
= 1;
19 CSR_DVISAMPLER0_D1_PHASE_RESET
= 1;
20 CSR_DVISAMPLER0_D2_PHASE_RESET
= 1;
22 printf("Delays calibrated\n");
25 static void adjust_phase(void)
27 switch(CSR_DVISAMPLER0_D0_PHASE
) {
28 case DVISAMPLER_TOO_LATE
:
29 CSR_DVISAMPLER0_D0_DELAY_CTL
= DVISAMPLER_DELAY_DEC
;
31 CSR_DVISAMPLER0_D0_PHASE_RESET
= 1;
33 case DVISAMPLER_TOO_EARLY
:
34 CSR_DVISAMPLER0_D0_DELAY_CTL
= DVISAMPLER_DELAY_INC
;
36 CSR_DVISAMPLER0_D0_PHASE_RESET
= 1;
39 switch(CSR_DVISAMPLER0_D1_PHASE
) {
40 case DVISAMPLER_TOO_LATE
:
41 CSR_DVISAMPLER0_D1_DELAY_CTL
= DVISAMPLER_DELAY_DEC
;
43 CSR_DVISAMPLER0_D1_PHASE_RESET
= 1;
45 case DVISAMPLER_TOO_EARLY
:
46 CSR_DVISAMPLER0_D1_DELAY_CTL
= DVISAMPLER_DELAY_INC
;
48 CSR_DVISAMPLER0_D1_PHASE_RESET
= 1;
51 switch(CSR_DVISAMPLER0_D2_PHASE
) {
52 case DVISAMPLER_TOO_LATE
:
53 CSR_DVISAMPLER0_D2_DELAY_CTL
= DVISAMPLER_DELAY_DEC
;
55 CSR_DVISAMPLER0_D2_PHASE_RESET
= 1;
57 case DVISAMPLER_TOO_EARLY
:
58 CSR_DVISAMPLER0_D2_DELAY_CTL
= DVISAMPLER_DELAY_INC
;
60 CSR_DVISAMPLER0_D2_PHASE_RESET
= 1;
63 printf("Ph: %4d %4d %4d // %d%d%d\n", d0
, d1
, d2
,
64 CSR_DVISAMPLER0_D0_CHAR_SYNCED
,
65 CSR_DVISAMPLER0_D1_CHAR_SYNCED
,
66 CSR_DVISAMPLER0_D2_CHAR_SYNCED
);
69 static void vmix(void)
74 while(!CSR_DVISAMPLER0_PLL_LOCKED
);
75 printf("PLL locked\n");
80 while(CSR_DVISAMPLER0_PLL_LOCKED
) {
82 if(counter
== 200000) {
87 printf("PLL unlocked\n");
97 puts("Minimal video mixer software built "__DATE__
" "__TIME__
"\n");