@@ -315,7 +315,7 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb
315
315
{
316
316
int res ;
317
317
uint8_t exti_line ;
318
- uint8_t gpio_irq ;
318
+ int8_t gpio_irq ;
319
319
320
320
/* configure pin as input */
321
321
res = gpio_init_in (dev , pullup );
@@ -444,7 +444,7 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb
444
444
#if GPIO_12_EN
445
445
case GPIO_12 :
446
446
exti_line = GPIO_12_PIN ;
447
- gpio_irq = GPIO_IRQ_12 ;
447
+ gpio_irq = GPIO_12 ;
448
448
GPIO_12_EXTI_CFG ();
449
449
NVIC_SetPriority (GPIO_12_IRQ , GPIO_IRQ_PRIO );
450
450
NVIC_EnableIRQ (GPIO_12_IRQ );
@@ -482,7 +482,9 @@ int gpio_init_int(gpio_t dev, gpio_pp_t pullup, gpio_flank_t flank, gpio_cb_t cb
482
482
}
483
483
484
484
/* set callback */
485
- config [gpio_irq ].cb = cb ;
485
+ if (gpio_irq < GPIO_NUMOF ) {
486
+ config [gpio_irq ].cb = cb ;
487
+ }
486
488
487
489
/* configure the event that triggers an interrupt */
488
490
switch (flank ) {
@@ -596,8 +598,6 @@ void gpio_irq_enable(gpio_t dev)
596
598
default :
597
599
return ;
598
600
}
599
- /* save state */
600
- // int state = (EXTI->IMR & (1 << exti_line) >> exti_line);
601
601
602
602
/* unmask the pins interrupt channel */
603
603
EXTI -> IMR |= (1 << exti_line );
@@ -693,8 +693,6 @@ void gpio_irq_disable(gpio_t dev)
693
693
default :
694
694
return ;
695
695
}
696
- // /* save state */
697
- // int state = ((EXTI->IMR & (1 << exti_line)) >> exti_line);
698
696
699
697
/* unmask the pins interrupt channel */
700
698
EXTI -> IMR &= ~(1 << exti_line );
@@ -1017,13 +1015,13 @@ void gpio_write(gpio_t dev, int value)
1017
1015
}
1018
1016
}
1019
1017
1020
- #if GPIO_IRQ_0
1018
+ #ifdef GPIO_IRQ_0
1021
1019
__attribute__((naked )) void isr_exti0 (void )
1022
1020
{
1023
1021
ISR_ENTER ();
1024
1022
if (EXTI -> PR & EXTI_PR_PR0 ) {
1025
1023
EXTI -> PR |= EXTI_PR_PR0 ; /* clear status bit by writing a 1 to it */
1026
- config [GPIO_0_PIN ].cb (config [GPIO_0_PIN ].arg );
1024
+ config [GPIO_IRQ_0 ].cb (config [GPIO_IRQ_0 ].arg );
1027
1025
}
1028
1026
1029
1027
if (sched_context_switch_request ) {
@@ -1033,13 +1031,13 @@ __attribute__((naked)) void isr_exti0(void)
1033
1031
}
1034
1032
#endif
1035
1033
1036
- #if GPIO_IRQ_1
1034
+ #ifdef GPIO_IRQ_1
1037
1035
__attribute__((naked )) void isr_exti1 (void )
1038
1036
{
1039
1037
ISR_ENTER ();
1040
1038
if (EXTI -> PR & EXTI_PR_PR1 ) {
1041
1039
EXTI -> PR |= EXTI_PR_PR1 ; /* clear status bit by writing a 1 to it */
1042
- config [GPIO_1_PIN ].cb (config [GPIO_1_PIN ].arg );
1040
+ config [GPIO_IRQ_1 ].cb (config [GPIO_IRQ_1 ].arg );
1043
1041
}
1044
1042
1045
1043
if (sched_context_switch_request ) {
@@ -1049,13 +1047,13 @@ __attribute__((naked)) void isr_exti1(void)
1049
1047
}
1050
1048
#endif
1051
1049
1052
- #if GPIO_IRQ_2
1050
+ #ifdef GPIO_IRQ_2
1053
1051
__attribute__((naked )) void isr_exti2 (void )
1054
1052
{
1055
1053
ISR_ENTER ();
1056
1054
if (EXTI -> PR & EXTI_PR_PR2 ) {
1057
1055
EXTI -> PR |= EXTI_PR_PR2 ; /* clear status bit by writing a 1 to it */
1058
- config [GPIO_2_PIN ].cb (config [GPIO_2_PIN ].arg );
1056
+ config [GPIO_IRQ_2 ].cb (config [GPIO_IRQ_2 ].arg );
1059
1057
}
1060
1058
1061
1059
if (sched_context_switch_request ) {
@@ -1065,13 +1063,13 @@ __attribute__((naked)) void isr_exti2(void)
1065
1063
}
1066
1064
#endif
1067
1065
1068
- #if GPIO_IRQ_3
1066
+ #ifdef GPIO_IRQ_3
1069
1067
__attribute__((naked )) void isr_exti3 (void )
1070
1068
{
1071
1069
ISR_ENTER ();
1072
1070
if (EXTI -> PR & EXTI_PR_PR3 ) {
1073
1071
EXTI -> PR |= EXTI_PR_PR3 ; /* clear status bit by writing a 1 to it */
1074
- config [GPIO_3_PIN ].cb (config [GPIO_3_PIN ].arg );
1072
+ config [GPIO_IRQ_3 ].cb (config [GPIO_IRQ_3 ].arg );
1075
1073
}
1076
1074
1077
1075
if (sched_context_switch_request ) {
@@ -1081,13 +1079,13 @@ __attribute__((naked)) void isr_exti3(void)
1081
1079
}
1082
1080
#endif
1083
1081
1084
- #if GPIO_IRQ_4
1082
+ #ifdef GPIO_IRQ_4
1085
1083
__attribute__((naked )) void isr_exti4 (void )
1086
1084
{
1087
1085
ISR_ENTER ();
1088
1086
if (EXTI -> PR & EXTI_PR_PR4 ) {
1089
1087
EXTI -> PR |= EXTI_PR_PR4 ; /* clear status bit by writing a 1 to it */
1090
- config [GPIO_4_PIN ].cb (config [GPIO_4_PIN ].arg );
1088
+ config [GPIO_IRQ_4 ].cb (config [GPIO_IRQ_4 ].arg );
1091
1089
}
1092
1090
1093
1091
if (sched_context_switch_request ) {
@@ -1097,88 +1095,92 @@ __attribute__((naked)) void isr_exti4(void)
1097
1095
}
1098
1096
#endif
1099
1097
1098
+ #if defined(GPIO_IRQ_5 ) || defined(GPIO_IRQ_6 ) || defined(GPIO_IRQ_7 ) || defined(GPIO_IRQ_8 ) || defined(GPIO_IRQ_9 )
1100
1099
__attribute__((naked )) void isr_exti9_5 (void )
1101
1100
{
1102
1101
ISR_ENTER ();
1103
- #if GPIO_IRQ_5
1102
+ #ifdef GPIO_IRQ_5
1104
1103
if (EXTI -> PR & EXTI_PR_PR5 ) {
1105
1104
EXTI -> PR |= EXTI_PR_PR5 ; /* clear status bit by writing a 1 to it */
1106
- config [GPIO_5_PIN ].cb (config [GPIO_5_PIN ].arg );
1105
+ config [GPIO_IRQ_5 ].cb (config [GPIO_IRQ_5 ].arg );
1107
1106
}
1108
1107
#endif
1109
- #if GPIO_IRQ_6
1108
+ #ifdef GPIO_IRQ_6
1110
1109
else if (EXTI -> PR & EXTI_PR_PR6 ) {
1111
1110
EXTI -> PR |= EXTI_PR_PR6 ; /* clear status bit by writing a 1 to it */
1112
- config [GPIO_6_PIN ].cb (config [GPIO_6_PIN ].arg );
1111
+ config [GPIO_IRQ_6 ].cb (config [GPIO_IRQ_6 ].arg );
1113
1112
}
1114
1113
#endif
1115
- #if GPIO_IRQ_7
1114
+ #ifdef GPIO_IRQ_7
1116
1115
else if (EXTI -> PR & EXTI_PR_PR7 ) {
1117
1116
EXTI -> PR |= EXTI_PR_PR7 ; /* clear status bit by writing a 1 to it */
1118
- config [GPIO_7_PIN ].cb (config [GPIO_7_PIN ].arg );
1117
+ config [GPIO_IRQ_7 ].cb (config [GPIO_IRQ_7 ].arg );
1119
1118
}
1120
1119
#endif
1121
- #if GPIO_IRQ_8
1120
+ #ifdef GPIO_IRQ_8
1122
1121
else if (EXTI -> PR & EXTI_PR_PR8 ) {
1123
1122
EXTI -> PR |= EXTI_PR_PR8 ; /* clear status bit by writing a 1 to it */
1124
- config [GPIO_8_PIN ].cb (config [GPIO_8_PIN ].arg );
1123
+ config [GPIO_IRQ_8 ].cb (config [GPIO_IRQ_8 ].arg );
1125
1124
}
1126
1125
#endif
1127
- #if GPIO_IRQ_9
1126
+ #ifdef GPIO_IRQ_9
1128
1127
else if (EXTI -> PR & EXTI_PR_PR9 ) {
1129
1128
EXTI -> PR |= EXTI_PR_PR9 ; /* clear status bit by writing a 1 to it */
1130
- config [GPIO_9_PIN ].cb (config [GPIO_9_PIN ].arg );
1129
+ config [GPIO_IRQ_9 ].cb (config [GPIO_IRQ_9 ].arg );
1131
1130
}
1132
1131
#endif
1133
1132
if (sched_context_switch_request ) {
1134
1133
thread_yield ();
1135
1134
}
1136
1135
ISR_EXIT ();
1137
1136
}
1137
+ #endif
1138
1138
1139
+ #if defined(GPIO_IRQ_10 ) || defined(GPIO_IRQ_11 ) || defined(GPIO_IRQ_12 ) || defined(GPIO_IRQ_13 ) || defined(GPIO_IRQ_14 ) || defined(GPIO_IRQ_15 )
1139
1140
__attribute__((naked )) void isr_exti15_10 (void )
1140
1141
{
1141
1142
ISR_ENTER ();
1142
- #if GPIO_IRQ_10
1143
+ #ifdef GPIO_IRQ_10
1143
1144
if (EXTI -> PR & EXTI_PR_PR10 ) {
1144
1145
EXTI -> PR |= EXTI_PR_PR10 ; /* clear status bit by writing a 1 to it */
1145
- config [GPIO_10_PIN ].cb (config [GPIO_10_PIN ].arg );
1146
+ config [GPIO_IRQ_10 ].cb (config [GPIO_IRQ_10 ].arg );
1146
1147
}
1147
1148
#endif
1148
- #if GPIO_IRQ_11
1149
+ #ifdef GPIO_IRQ_11
1149
1150
else if (EXTI -> PR & EXTI_PR_PR11 ) {
1150
1151
EXTI -> PR |= EXTI_PR_PR11 ; /* clear status bit by writing a 1 to it */
1151
- config [GPIO_11_PIN ].cb (config [GPIO_11_PIN ].arg );
1152
+ config [GPIO_IRQ_11 ].cb (config [GPIO_IRQ_11 ].arg );
1152
1153
}
1153
1154
#endif
1154
- #if GPIO_IRQ_12
1155
+ #ifdef GPIO_IRQ_12
1155
1156
else if (EXTI -> PR & EXTI_PR_PR12 ) {
1156
1157
EXTI -> PR |= EXTI_PR_PR12 ; /* clear status bit by writing a 1 to it */
1157
- config [GPIO_12_PIN ].cb (config [GPIO_12_PIN ].arg );
1158
+ config [GPIO_IRQ_12 ].cb (config [GPIO_IRQ_12 ].arg );
1158
1159
}
1159
1160
#endif
1160
- #if GPIO_IRQ_13
1161
+ #ifdef GPIO_IRQ_13
1161
1162
else if (EXTI -> PR & EXTI_PR_PR13 ) {
1162
1163
EXTI -> PR |= EXTI_PR_PR13 ; /* clear status bit by writing a 1 to it */
1163
- config [GPIO_13_PIN ].cb (config [GPIO_13_PIN ].arg );
1164
+ config [GPIO_IRQ_13 ].cb (config [GPIO_IRQ_13 ].arg );
1164
1165
}
1165
1166
#endif
1166
- #if GPIO_IRQ_14
1167
+ #ifdef GPIO_IRQ_14
1167
1168
else if (EXTI -> PR & EXTI_PR_PR14 ) {
1168
1169
EXTI -> PR |= EXTI_PR_PR14 ; /* clear status bit by writing a 1 to it */
1169
- config [GPIO_14_PIN ].cb (config [GPIO_14_PIN ].arg );
1170
+ config [GPIO_IRQ_14 ].cb (config [GPIO_IRQ_14 ].arg );
1170
1171
}
1171
1172
#endif
1172
- #if GPIO_IRQ_15
1173
+ #ifdef GPIO_IRQ_15
1173
1174
else if (EXTI -> PR & EXTI_PR_PR15 ) {
1174
1175
EXTI -> PR |= EXTI_PR_PR15 ; /* clear status bit by writing a 1 to it */
1175
- config [GPIO_15_PIN ].cb (config [GPIO_15_PIN ].arg );
1176
+ config [GPIO_IRQ_15 ].cb (config [GPIO_IRQ_15 ].arg );
1176
1177
}
1177
1178
#endif
1178
1179
if (sched_context_switch_request ) {
1179
1180
thread_yield ();
1180
1181
}
1181
1182
ISR_EXIT ();
1182
1183
}
1184
+ #endif
1183
1185
1184
1186
#endif
0 commit comments