1 | void __attribute__ ((interrupt("IRQ"))) cam_hsync()
|
2 | {
|
3 | asm(
|
4 | "LDR R0,=0x3FFFC014\n" //Adresse von FIO0PIN
|
5 | "MOV R1,#88 \n"//i=88
|
6 | "LDR R4,=pixelpointer \n"//adresse von pixelpointer
|
7 | "LDR R2,[r4]\n" //r2=pixelpointer
|
8 |
|
9 | //warte bis FIO0PIN.15==1
|
10 | "for_schleife:\n"
|
11 | "LDR r3,[r0]\n" //r3=FIO0PIN
|
12 | "ANDS R3,#0x8000\n" //AND r3,(1<<15)
|
13 | "BEQ for_schleife\n" //if(FIO0PIN.15==0) goto for_schleife
|
14 |
|
15 | //*(pixelpointer++)=FIO1PINU
|
16 | "LDRB R3,[R0,#0x22]\n"//r3=FIO1PIN2
|
17 | "STRB R3,[r2],#1\n" //*pixelpointer++=r3
|
18 |
|
19 | //warte bis FIO0PIN.15==0
|
20 | "w_u_c0:\n"
|
21 | "LDR r3,[r0]\n" //r3=FIO0PIN
|
22 | "ANDS r3,#0x8000\n" //and r3,(1<<15)
|
23 | "BNE w_u_c0\n" //if(FIO0PIN.15==1) goto w_u_c0
|
24 |
|
25 | //warte bis FIO0PIN.15==1
|
26 | "w_u_s1:\n"
|
27 | "LDR r3,[r0]\n" //r3=FIO0PIN
|
28 | "ANDS r3,#0x8000\n" //and r3,(1<<15)
|
29 | "BEQ w_u_s1\n" //if(FIO0PIN.15==0) goto w_u_s1
|
30 |
|
31 | //warte bis FIO0PIN.15==0
|
32 | "w_u_c1:"
|
33 | "LDR r3,[r0]\n" //r3=FIO0PIN
|
34 | "ANDS r3,#0x8000\n" //and r3,(1<<15)
|
35 | "BNE w_u_c1\n" //if(FIO0PIN.15==1) goto w_u_c1
|
36 |
|
37 | //for(i=88;i>0;i--)
|
38 | "SUBS r1,#1\n" //i--
|
39 | "BNE for_schleife\n"//if(i!=0)goto for_schleife
|
40 | "STR R2,[r4]\n"//speichere pixelpointer
|
41 |
|
42 | );
|
43 |
|
44 | if(hsynccount)
|
45 | {
|
46 | pixelpointer-=88;
|
47 | hsynccount=0;
|
48 | }
|
49 | else hsynccount=1;
|
50 |
|
51 | vsync=0;
|
52 | EXTINT=(1<<3);
|
53 | VICVectAddr = 0; // Interrupt im VIC bestätigen
|
54 | }
|