@@ -23,6 +23,7 @@ typedef void (*interruptCB)(void);
23
23
static interruptCB callbacksPioA [32 ];
24
24
static interruptCB callbacksPioB [32 ];
25
25
static interruptCB callbacksPioC [32 ];
26
+ static interruptCB callbacksPioD [32 ];
26
27
27
28
/* Configure PIO interrupt sources */
28
29
static void __initialize () {
@@ -31,6 +32,7 @@ static void __initialize() {
31
32
callbacksPioA [i ] = NULL ;
32
33
callbacksPioB [i ] = NULL ;
33
34
callbacksPioC [i ] = NULL ;
35
+ callbacksPioD [i ] = NULL ;
34
36
}
35
37
36
38
pmc_enable_periph_clk (ID_PIOA );
@@ -50,6 +52,12 @@ static void __initialize() {
50
52
NVIC_ClearPendingIRQ (PIOC_IRQn );
51
53
NVIC_SetPriority (PIOC_IRQn , 0 );
52
54
NVIC_EnableIRQ (PIOC_IRQn );
55
+
56
+ pmc_enable_periph_clk (ID_PIOD );
57
+ NVIC_DisableIRQ (PIOD_IRQn );
58
+ NVIC_ClearPendingIRQ (PIOD_IRQn );
59
+ NVIC_SetPriority (PIOD_IRQn , 0 );
60
+ NVIC_EnableIRQ (PIOD_IRQn );
53
61
}
54
62
55
63
@@ -77,6 +85,8 @@ void attachInterrupt(uint32_t pin, void (*callback)(void), uint32_t mode)
77
85
callbacksPioB [pos ] = callback ;
78
86
if (pio == PIOC )
79
87
callbacksPioC [pos ] = callback ;
88
+ if (pio == PIOD )
89
+ callbacksPioD [pos ] = callback ;
80
90
81
91
// Configure the interrupt mode
82
92
if (mode == CHANGE ) {
@@ -156,6 +166,17 @@ void PIOC_Handler(void) {
156
166
}
157
167
}
158
168
169
+ void PIOD_Handler (void ) {
170
+ uint32_t isr = PIOD -> PIO_ISR ;
171
+ uint32_t i ;
172
+ for (i = 0 ; i < 32 ; i ++ , isr >>=1 ) {
173
+ if ((isr & 0x1 ) == 0 )
174
+ continue ;
175
+ if (callbacksPioD [i ])
176
+ callbacksPioD [i ]();
177
+ }
178
+ }
179
+
159
180
#ifdef __cplusplus
160
181
}
161
182
#endif
0 commit comments