external interrupt on general input pin.
93 static int Xint1_in_use=0;
94 static int Xint2_in_use=0;
95 static int Xint3_in_use=0;
96 static int Xint4_in_use=0;
97 static int Xint5_in_use=0;
98 static int Xint6_in_use=0;
99 static int Xint7_in_use=0;
103 case 0 ... 31: EALLOW;
105 case 0 ... 7: TMC_BASE_PIO->CTL[0].QSEL1 &= ~(0x3 << (pin*2));
106 TMC_BASE_PIO->CTL[0].CTRL &= ~(0x3);
108 case 8 ... 15: TMC_BASE_PIO->CTL[0].QSEL1 &= ~(0x3 << (pin*2));
109 TMC_BASE_PIO->CTL[0].CTRL &= ~(0x3 << 8);
111 case 16 ... 23: TMC_BASE_PIO->CTL[0].QSEL2 &= ~(0x3 << (pin*2));
112 TMC_BASE_PIO->CTL[0].CTRL &= ~((
Uint32)0x3 << 16);
114 case 24 ... 31: TMC_BASE_PIO->CTL[0].QSEL2 &= ~(0x3 << (pin*2));
115 TMC_BASE_PIO->CTL[0].CTRL &= ~((
Uint32)0x3 << 24);
121 TMC_BASE_INT_REGS->XINT1 = (
Uint32)isr;
122 TMC_BASE_PIE->CTRL |= 0x01;
123 TMC_BASE_PIE->GROUP[0].IER |= 0x8;
127 TMC_BASE_PIO->XINT1SEL = pin;
130 case 0: TMC_BASE_XINT->XINT1CR &= ~(0x3 << 2);
132 case 1: TMC_BASE_XINT->XINT1CR |= (0x1 << 2);
134 case 2: TMC_BASE_XINT->XINT1CR |= (0x3 << 2);
140 TMC_BASE_XINT->XINT1CR |= 0x1;
144 else if(Xint1_in_use && (!Xint2_in_use)){
145 TMC_BASE_INT_REGS->XINT2 = (
Uint32)isr;
146 TMC_BASE_PIE->CTRL |= 0x01;
147 TMC_BASE_PIE->GROUP[0].IER |= 0x10;
151 TMC_BASE_PIO->XINT2SEL = pin;
154 case 0: TMC_BASE_XINT->XINT2CR &= ~(0x3 << 2);
156 case 1: TMC_BASE_XINT->XINT2CR |= (0x1 << 2);
158 case 2: TMC_BASE_XINT->XINT2CR |= (0x3 << 2);
164 TMC_BASE_XINT->XINT2CR |= 0x1;
173 case 32 ... 63: pin -= 32;
176 case 0 ... 7: TMC_BASE_PIO->CTL[1].QSEL1 &= ~(0x3 << (pin*2));
177 TMC_BASE_PIO->CTL[1].CTRL &= ~(0x3);
179 case 8 ... 15: TMC_BASE_PIO->CTL[1].QSEL1 &= ~(0x3 << (pin*2));
180 TMC_BASE_PIO->CTL[1].CTRL &= ~(0x3 << 8);
182 case 16 ... 23: TMC_BASE_PIO->CTL[1].QSEL2 &= ~(0x3 << (pin*2));
183 TMC_BASE_PIO->CTL[1].CTRL &= ~((
Uint32)0x3 << 16);
185 case 24 ... 31: TMC_BASE_PIO->CTL[1].QSEL2 &= ~(0x3 << (pin*2));
186 TMC_BASE_PIO->CTL[1].CTRL &= ~((
Uint32)0x3 << 24);
194 TMC_BASE_INT_REGS->XINT3 = (
Uint32)isr;
195 TMC_BASE_PIE->CTRL |= 0x01;
196 TMC_BASE_PIE->GROUP[11].IER |= 0x1;
200 TMC_BASE_PIO->XINT3SEL = pin;
203 case 0: TMC_BASE_XINT->XINT3CR &= ~(0x3 << 2);
205 case 1: TMC_BASE_XINT->XINT3CR |= (0x1 << 2);
207 case 2: TMC_BASE_XINT->XINT3CR |= (0x3 << 2);
213 TMC_BASE_XINT->XINT3CR |= 0x1;
217 else if(Xint3_in_use && (!Xint4_in_use)){
218 TMC_BASE_INT_REGS->XINT4 = (
Uint32)isr;
219 TMC_BASE_PIE->CTRL |= 0x01;
220 TMC_BASE_PIE->GROUP[11].IER |= 0x2;
224 TMC_BASE_PIO->XINT4SEL = pin;
227 case 0: TMC_BASE_XINT->XINT4CR &= ~(0x3 << 2);
229 case 1: TMC_BASE_XINT->XINT4CR |= (0x1 << 2);
231 case 2: TMC_BASE_XINT->XINT4CR |= (0x3 << 2);
237 TMC_BASE_XINT->XINT4CR |= 0x1;
241 else if(Xint3_in_use && Xint4_in_use && (!Xint5_in_use)){
242 TMC_BASE_INT_REGS->XINT5 = (
Uint32)isr;
243 TMC_BASE_PIE->CTRL |= 0x01;
244 TMC_BASE_PIE->GROUP[11].IER |= 0x4;
248 TMC_BASE_PIO->XINT5SEL = pin;
251 case 0: TMC_BASE_XINT->XINT5CR &= ~(0x3 << 2);
253 case 1: TMC_BASE_XINT->XINT5CR |= (0x1 << 2);
255 case 2: TMC_BASE_XINT->XINT5CR |= (0x3 << 2);
261 TMC_BASE_XINT->XINT5CR |= 0x1;
265 else if(Xint3_in_use && Xint4_in_use && Xint5_in_use && (!Xint6_in_use)){
266 TMC_BASE_INT_REGS->XINT6 = (
Uint32)isr;
267 TMC_BASE_PIE->CTRL |= 0x01;
268 TMC_BASE_PIE->GROUP[11].IER |= 0x8;
272 TMC_BASE_PIO->XINT6SEL = pin;
275 case 0: TMC_BASE_XINT->XINT6CR &= ~(0x3 << 2);
277 case 1: TMC_BASE_XINT->XINT6CR |= (0x1 << 2);
279 case 2: TMC_BASE_XINT->XINT6CR |= (0x3 << 2);
285 TMC_BASE_XINT->XINT6CR |= 0x1;
289 else if(Xint3_in_use && Xint4_in_use && Xint5_in_use && Xint6_in_use && (!Xint7_in_use)){
290 TMC_BASE_INT_REGS->XINT7 = (
Uint32)isr;
291 TMC_BASE_PIE->CTRL |= 0x01;
292 TMC_BASE_PIE->GROUP[11].IER |= 0x10;
296 TMC_BASE_PIO->XINT7SEL = pin;
299 case 0: TMC_BASE_XINT->XINT7CR &= ~(0x3 << 2);
301 case 1: TMC_BASE_XINT->XINT7CR |= (0x1 << 2);
303 case 2: TMC_BASE_XINT->XINT7CR |= (0x3 << 2);
309 TMC_BASE_XINT->XINT7CR |= 0x1;