der portb.2 vom atmega hat 3 (normal/int2/ain0)funktionen. wie wird da der int2 aktiviert? mffg
Was auch nicht zu verachten ist: Bei Atmel gibt es ein umfangreiches Datenblätt zum Mega32. Da steht das alles drinnen. Verblüffend, gelle? Ein Hersteller, der seinen Chip dokumentiert!
Mit dem Datenblatt ist das manchmal so eine Sache... Ich z.B. hatte gestern das Datenblatt zum Attiny2313 in den Fingern und richtig lange versucht genau das Thema Mehrfachbelegung nachzuschlagen. (Ging um den Thread Beitrag "Interrupt beim AVR" und ich hatte AT90S2313 überlesen) Ich habe es schäm nicht geschafft. Auch im AVR-GCC-Tutorial springt mir dazu ehrlich gesagt nichts ins Auge.
Das schäm kann ich jetzt streichen ;-) Die Einstellerei geht beim Atmega32 über die Special Function Register (SFR) MCUCSR und GICR. Hier das Beispiel für Oilaf aus obigem Thread angepasst an den Atmega32:
1 | ; ################ |
2 | ; ### Includes ### |
3 | ; ################ |
4 | .include "m32def.inc" |
5 | ; TARGET ATMEGA8 |
6 | |
7 | ; #################### |
8 | ; ### Definitionen ### |
9 | ; #################### |
10 | .def temp =r16 |
11 | .def temp2 =r17 |
12 | |
13 | ; ##################### |
14 | ; ### Vektortabelle ### |
15 | ; ##################### |
16 | ; Hier verkürzt für Demozwecke. |
17 | ; Komplette Vektortabelle ist sicher! |
18 | .org 0x0000 |
19 | rjmp Reset |
20 | .org INT2addr |
21 | rjmp INT2_Handler |
22 | |
23 | ; ##################### |
24 | ; ### Hauptprogramm ### |
25 | ; ##################### |
26 | Reset: |
27 | ; ######################## |
28 | ; ### Stack einrichten ### |
29 | ; ######################## |
30 | ldi temp, high(RAMEND) |
31 | out SPH, temp |
32 | ldi temp, low(RAMEND) |
33 | out SPL, temp |
34 | |
35 | ; ############################################ |
36 | ; ### LOW ACTIVE LED an PB0 initialisieren ### |
37 | ; ############################################ |
38 | ; Toggelt später in INT2_Handler |
39 | ldi temp, 0b00000000 ; PB0 LOW (LED_AN) |
40 | out PORTB, temp |
41 | ldi temp, 0b00000001 ; PB0 Ausgang |
42 | out DDRB, temp |
43 | |
44 | ; ############################# |
45 | ; ### Interrupts einstellen ### |
46 | ; ############################# |
47 | ; FALLENDE Flanke von INT2 soll Interrupt erzeugen |
48 | in temp, MCUCSR |
49 | andi temp, 0b10111111 ; ISC2 löschen => fallende Flanke |
50 | out MCUCSR, temp |
51 | |
52 | in temp, GICR |
53 | ori temp, 0b00100000 ; INT2 external interrupt request 2 enable |
54 | out GICR, temp |
55 | |
56 | sei ; Interrupts allgemein aktivieren |
57 | |
58 | ; ####################### |
59 | ; ### Arbeitsschleife ### |
60 | ; ####################### |
61 | loop: |
62 | rjmp loop ; loop forever |
63 | |
64 | ; ######################## |
65 | ; ### Interrupthandler ### |
66 | ; ######################## |
67 | ; ############ |
68 | ; ### Int2 ### |
69 | ; ############ |
70 | INT2_Handler: |
71 | push temp |
72 | in temp,sreg |
73 | ; Anfang Nutzcode |
74 | ; => PB0 toggeln |
75 | push temp |
76 | push temp2 |
77 | ldi temp2, 0b00000001 |
78 | in temp, PORTB |
79 | eor temp, temp2 |
80 | out PORTB, temp |
81 | pop temp2 |
82 | pop temp |
83 | ; Ende Nutzcode |
84 | out sreg,temp |
85 | pop temp |
86 | reti |
87 | |
88 | ; Simulation in AVR Studio |
89 | ; |
90 | ; !/ Keine Breakpoints |
91 | ; 2/ Step (F11) |
92 | ; 3/ PINB2 manipulieren und PORTB0 beobachten |
93 | ; PORTB0 toggelt, wenn PINB2 von HIGH => LOW wechselt |
94 | ;. |
95 | ; ENDE |
Der komische Abschnitt Overriding Signals for Alternate Functions hat mich verwirrt, weil die dortigen Signale sonst im Datenblatt nicht vorkommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.