1 | /***********************/
|
2 | /******* Defines *******/
|
3 | /***********************/
|
4 |
|
5 | /* Interruptsteuerung */
|
6 |
|
7 | #define ENAB_GLOBAL_INT asm("sei") // Set I-Bit in SREG
|
8 | #define DISAB_GLOBAL_INT asm("cli") // Reset I-Bit in SREG
|
9 |
|
10 | #define ENAB_INT_0 EIMSK |= (1<<INT0) // External Interrupt 3 enable
|
11 | #define DISAB_INT_0 EIMSK &= ~(1<<INT0) // External Interrupt 3 disable
|
12 | #define CLEAR_INT_0_FLAG EIFR |= (1<<INTF0) // Reset Interrupt 3 Flag (durch schreiben einer 1)
|
13 |
|
14 | #define ENAB_INT_1 EIMSK |= (1<<INT1) // External Interrupt 3 enable
|
15 | #define DISAB_INT_1 EIMSK &= ~(1<<INT1) // External Interrupt 3 disable
|
16 | #define CLEAR_INT_1_FLAG EIFR |= (1<<INTF1) // Reset Interrupt 3 Flag (durch schreiben einer 1)
|
17 |
|
18 | #define ENAB_INT_2 EIMSK |= (1<<INT2) // External Interrupt 3 enable
|
19 | #define DISAB_INT_2 EIMSK &= ~(1<<INT2) // External Interrupt 3 disable
|
20 | #define CLEAR_INT_2_FLAG EIFR |= (1<<INTF2) // Reset Interrupt 3 Flag (durch schreiben einer 1)
|
21 |
|
22 | #define ENAB_INT_3 EIMSK |= (1<<INT3) // External Interrupt 3 enable
|
23 | #define DISAB_INT_3 EIMSK &= ~(1<<INT3) // External Interrupt 3 disable
|
24 | #define CLEAR_INT_3_FLAG EIFR |= (1<<INTF3) // Reset Interrupt 3 Flag (durch schreiben einer 1)
|
25 |
|
26 | #define ENAB_INT_4 EIMSK |= (1<<INT4) // External Interrupt 4 enable
|
27 | #define DISAB_INT_4 EIMSK &= ~(1<<INT4) // External Interrupt 4 disable
|
28 | #define CLEAR_INT_4_FLAG EIFR |= (1<<INTF4) // Reset Interrupt 4 Flag (durch schreiben einer 1)
|
29 |
|
30 | #define ENAB_INT_5 EIMSK |= (1<<INT5) // External Interrupt 5 enable
|
31 | #define DISAB_INT_5 EIMSK &= ~(1<<INT5) // External Interrupt 5 disable
|
32 | #define CLEAR_INT_5_FLAG EIFR |= (1<<INTF5) // Reset Interrupt 5 Flag (durch schreiben einer 1)
|
33 |
|
34 | #define ENAB_INT_6 EIMSK |= (1<<INT6) // External Interrupt 5 enable
|
35 | #define DISAB_INT_6 EIMSK &= ~(1<<INT6) // External Interrupt 5 disable
|
36 | #define CLEAR_INT_6_FLAG EIFR |= (1<<INTF6) // Reset Interrupt 5 Flag (durch schreiben einer 1)
|
37 |
|
38 | #define ENAB_INT_7 EIMSK |= (1<<INT7) // External Interrupt 5 enable
|
39 | #define DISAB_INT_7 EIMSK &= ~(1<<INT7) // External Interrupt 5 disable
|
40 | #define CLEAR_INT_7_FLAG EIFR |= (1<<INTF7) // Reset Interrupt 5 Flag (durch schreiben einer 1)
|
41 |
|
42 |
|
43 | /* Pin- und Portdefinitionen */
|
44 |
|
45 | /********************************* Arduino-LED (Testpunkt) **********************************************************************************/
|
46 | #define L_ARD_PIN DDRB |= (1<<DDB7);PORTB &= ~(1<<PORTK7) // Port B, Bit 7 => LED Arduino-Board (Atmel -> LED) -> OUTPUT, OFF //
|
47 | #define L_ARD_ON PORTB |= (1<<PORTB7) // LED Arduino-Board ein //
|
48 | #define L_ARD_OFF PORTB &= ~(1<<PORTB7) // LED Arduino-Arduino aus //
|
49 | #define L_ARD_TOGGLE PINB |= (1<<PINB7) // LED Arduino-Arduino toggel //
|
50 | /********************************************************************************************************************************************/
|
51 |
|
52 | /********************************************************************************************************************************************/
|
53 | #define INT_0_PIN DDRD &= ~(1<<DDD0);PORTD &= ~(1<<PORTD0) // Port D, Bit 0 => Interrupt 0 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
54 | #define INT_0 (PIND & (1<<PIND0)) // Kanal A In //
|
55 | /********************************************************************************************************************************************/
|
56 | #define INT_1_PIN DDRD &= ~(1<<DDD1);PORTD &= ~(1<<PORTD1) // Port D, Bit 1 => Interrupt 1 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
57 | #define INT_1 (PIND & (1<<PIND1)) // Kanal A In //
|
58 | /********************************************************************************************************************************************/
|
59 | #define INT_2_PIN DDRD &= ~(1<<DDD2);PORTD &= ~(1<<PORTD2) // Port D, Bit 2 => Interrupt 2 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
60 | #define INT_2 (PIND & (1<<PIND2)) // Kanal A In //
|
61 | /********************************************************************************************************************************************/
|
62 | #define INT_3_PIN DDRD &= ~(1<<DDD3);PORTD &= ~(1<<PORTD3) // Port D, Bit 3 => Interrupt 3 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
63 | #define INT_3 (PIND & (1<<PIND3)) // Kanal A In //
|
64 | /********************************************************************************************************************************************/
|
65 | #define INT_4_PIN DDRE &= ~(1<<DDE4);PORTE &= ~(1<<PORTE4) // Port E, Bit 4 => Interrupt 4 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
66 | #define INT_4 (PINE & (1<<PINE4)) // Kanal A In //
|
67 | /********************************************************************************************************************************************/
|
68 | #define INT_5_PIN DDRE &= ~(1<<DDE5);PORTE &= ~(1<<PORTE5) // Port E, Bit 5 => Interrupt 5 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
69 | #define INT_5 (PINE & (1<<PINE5)) // Kanal A In //
|
70 | /********************************************************************************************************************************************/
|
71 | #define INT_6_PIN DDRE &= ~(1<<DDE6);PORTE &= ~(1<<PORTE6) // Port E, Bit 6 => Interrupt 6 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
72 | #define INT_6 (PINE & (1<<PINE6)) // Kanal A In //
|
73 | /********************************************************************************************************************************************/
|
74 | #define INT_7_PIN DDRE &= ~(1<<DDE7);PORTE &= ~(1<<PORTE7) // Port E, Bit 7 => Interrupt 7 (Atmel <- Encoder) -> INPUT, TRISTATE //
|
75 | #define INT_7 (PINE & (1<<PINE7)) // Kanal A In //
|
76 | /********************************************************************************************************************************************/
|
77 |
|
78 |
|
79 |
|
80 | /*************************/
|
81 | /******* Variables *******/
|
82 | /*************************/
|
83 | volatile unsigned char i;
|
84 | volatile unsigned int j;
|
85 |
|
86 |
|
87 | /*************************/
|
88 | /******* Functions *******/
|
89 | /*************************/
|
90 | void Test_Init (void);
|
91 | void EXT_ISR_Init (void);
|
92 |
|
93 |
|
94 | void Test_Init (void)
|
95 | {
|
96 | L_ARD_PIN; // Port B, Bit 7 => LED Arduino-Board (Atmel -> LED) -> OUTPUT, OFF
|
97 | }
|
98 |
|
99 | void EXT_ISR_Init (void)
|
100 | {
|
101 | INT_0_PIN;
|
102 | INT_1_PIN;
|
103 | INT_2_PIN;
|
104 | INT_3_PIN;
|
105 | INT_4_PIN;
|
106 | INT_5_PIN;
|
107 | INT_6_PIN;
|
108 | INT_7_PIN;
|
109 |
|
110 |
|
111 | EICRA = 0xAA;
|
112 | //EICRA = 0x55;
|
113 | //EICRA = 0xFF;
|
114 | EICRB = 0xFF;
|
115 |
|
116 | //EICRA |= ((1<<ISC31) | (1<<ISC30)); // INT 3 (Kanal A SM1): positive Flanke
|
117 |
|
118 | //EICRB |= ((1<<ISC41) | (1<<ISC40)); // INT 4 (Kanal A SM2): positive Flanke
|
119 | //EICRB |= ((1<<ISC51) | (1<<ISC50)); // INT 5 (Kanal A SM3): positive Flanke
|
120 |
|
121 |
|
122 | //EICRA &= ~((1<<ISC31) | (1<<ISC30)); // INT 3 (Kanal A SM1): low level
|
123 |
|
124 | //EICRA |= (1<<ISC30); // INT 3 (Kanal A SM1): beide Flanken
|
125 | //EICRA &= ~(1<<ISC31);
|
126 |
|
127 | //EICRB |= (1<<ISC40); // INT 4 (Kanal A SM2): beide Flanken
|
128 | //EICRB &= ~(1<<ISC41);
|
129 |
|
130 | //EICRB |= (1<<ISC50); // INT 5 (Kanal A SM3): beide Flanken
|
131 | //EICRB &= ~(1<<ISC51);
|
132 | }
|
133 |
|
134 |
|
135 | /*********************************/
|
136 | /******* Arduino functions *******/
|
137 | /*********************************/
|
138 |
|
139 | void setup (void)
|
140 | {
|
141 | DISAB_GLOBAL_INT;
|
142 | DISAB_INT_0;
|
143 | DISAB_INT_1;
|
144 | DISAB_INT_2;
|
145 | DISAB_INT_3;
|
146 | DISAB_INT_4;
|
147 | DISAB_INT_5;
|
148 | DISAB_INT_6;
|
149 | DISAB_INT_7;
|
150 |
|
151 | Test_Init ();
|
152 | EXT_ISR_Init ();
|
153 |
|
154 | Serial.begin (9600); // ARDUINO function
|
155 |
|
156 | i = 0;
|
157 | j = 0;
|
158 |
|
159 |
|
160 | ENAB_INT_0;
|
161 | //ENAB_INT_1;
|
162 | //ENAB_INT_2;
|
163 | //ENAB_INT_3;
|
164 | //ENAB_INT_4;
|
165 | //ENAB_INT_5;
|
166 | //ENAB_INT_6;
|
167 | //ENAB_INT_7;
|
168 | ENAB_GLOBAL_INT; // enable interrupts
|
169 | }
|
170 |
|
171 |
|
172 | void loop (void)
|
173 | {
|
174 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
175 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
176 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
177 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
178 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
179 | L_ARD_ON;
|
180 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
181 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
182 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
183 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
184 | for ( j = 0; j < 0xFFFF; j++ ) {;}
|
185 | L_ARD_OFF;
|
186 |
|
187 | Serial.println (i, HEX);
|
188 | while ( 1 ) {;}
|
189 | }
|
190 |
|
191 |
|
192 | /**********************************/
|
193 | /******* Interrupt routines *******/
|
194 | /**********************************/
|
195 | ISR (INT0_vect)
|
196 | {
|
197 | i++;
|
198 | }
|
199 |
|
200 | ISR (INT1_vect)
|
201 | {
|
202 | i++;
|
203 | }
|
204 |
|
205 | ISR (INT2_vect)
|
206 | {
|
207 | i++;
|
208 | }
|
209 |
|
210 | ISR (INT3_vect)
|
211 | {
|
212 | i++;
|
213 | }
|
214 |
|
215 | ISR (INT4_vect)
|
216 | {
|
217 | i++;
|
218 | }
|
219 |
|
220 | ISR (INT5_vect)
|
221 | {
|
222 | i++;
|
223 | }
|
224 |
|
225 | ISR (INT6_vect)
|
226 | {
|
227 | i++;
|
228 | }
|
229 |
|
230 | ISR (INT7_vect)
|
231 | {
|
232 | i++;
|
233 | }
|