1
1
/*
2
2
* Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
3
3
*
4
- * SPDX-License-Identifier: Apache-2.0
4
+ * SPDX-License-Identifier: Apache-2.0
5
5
*
6
6
* Licensed under the Apache License, Version 2.0 (the License); you may
7
7
* not use this file except in compliance with the License.
17
17
*
18
18
* Change Logs:
19
19
* Date Author Notes
20
- * 2020-01-14 wangyq the first version
20
+ * 2020-01-14 wangyq the first version
21
21
* 2021-04-20 liuhy the second version
22
22
*/
23
23
@@ -73,150 +73,150 @@ struct rt_pin_irq_hdr pin_irq_hdr_tab[] =
73
73
{ -1 , 0 , RT_NULL , RT_NULL },
74
74
{ -1 , 0 , RT_NULL , RT_NULL },
75
75
{ -1 , 0 , RT_NULL , RT_NULL },
76
- };
76
+ };
77
77
78
78
#ifdef ES_CONF_EXTI_IRQ_0
79
79
80
80
RT_WEAK void irq_pin0_callback (void * arg )
81
81
{
82
82
rt_kprintf ("\r\nEXTI 0\r\n" );
83
- }
83
+ }
84
84
#endif
85
85
86
- #ifdef ES_CONF_EXTI_IRQ_1
86
+ #ifdef ES_CONF_EXTI_IRQ_1
87
87
88
88
RT_WEAK void irq_pin1_callback (void * arg )
89
89
{
90
90
rt_kprintf ("\r\nEXTI 1\r\n" );
91
- }
92
-
91
+ }
92
+
93
93
#endif
94
94
95
95
#ifdef ES_CONF_EXTI_IRQ_2
96
-
96
+
97
97
RT_WEAK void irq_pin2_callback (void * arg )
98
98
{
99
- rt_kprintf ("\r\nEXTI 2\r\n" );
100
- }
99
+ rt_kprintf ("\r\nEXTI 2\r\n" );
100
+ }
101
101
102
102
#endif
103
103
104
104
#ifdef ES_CONF_EXTI_IRQ_3
105
-
105
+
106
106
RT_WEAK void irq_pin3_callback (void * arg )
107
107
{
108
- rt_kprintf ("\r\nEXTI 3\r\n" );
109
- }
110
-
111
- #endif
108
+ rt_kprintf ("\r\nEXTI 3\r\n" );
109
+ }
110
+
111
+ #endif
112
112
113
113
#ifdef ES_CONF_EXTI_IRQ_4
114
-
114
+
115
115
RT_WEAK void irq_pin4_callback (void * arg )
116
116
{
117
- rt_kprintf ("\r\nEXTI 4\r\n" );
118
- }
119
-
120
- #endif
117
+ rt_kprintf ("\r\nEXTI 4\r\n" );
118
+ }
119
+
120
+ #endif
121
121
122
122
#ifdef ES_CONF_EXTI_IRQ_5
123
-
123
+
124
124
RT_WEAK void irq_pin5_callback (void * arg )
125
125
{
126
- rt_kprintf ("\r\nEXTI 5\r\n" );
127
- }
128
-
129
- #endif
126
+ rt_kprintf ("\r\nEXTI 5\r\n" );
127
+ }
128
+
129
+ #endif
130
130
131
131
#ifdef ES_CONF_EXTI_IRQ_6
132
-
132
+
133
133
RT_WEAK void irq_pin6_callback (void * arg )
134
134
{
135
- rt_kprintf ("\r\nEXTI 6\r\n" );
136
- }
137
-
138
- #endif
139
-
135
+ rt_kprintf ("\r\nEXTI 6\r\n" );
136
+ }
137
+
138
+ #endif
139
+
140
140
#ifdef ES_CONF_EXTI_IRQ_7
141
-
141
+
142
142
RT_WEAK void irq_pin7_callback (void * arg )
143
143
{
144
- rt_kprintf ("\r\nEXTI 7\r\n" );
145
- }
146
-
147
- #endif
144
+ rt_kprintf ("\r\nEXTI 7\r\n" );
145
+ }
146
+
147
+ #endif
148
148
149
149
#ifdef ES_CONF_EXTI_IRQ_8
150
-
150
+
151
151
RT_WEAK void irq_pin8_callback (void * arg )
152
152
{
153
- rt_kprintf ("\r\nEXTI 8\r\n" );
154
- }
155
-
156
- #endif
157
-
153
+ rt_kprintf ("\r\nEXTI 8\r\n" );
154
+ }
155
+
156
+ #endif
157
+
158
158
#ifdef ES_CONF_EXTI_IRQ_9
159
-
159
+
160
160
RT_WEAK void irq_pin9_callback (void * arg )
161
161
{
162
- rt_kprintf ("\r\nEXTI 9\r\n" );
163
- }
164
-
165
- #endif
162
+ rt_kprintf ("\r\nEXTI 9\r\n" );
163
+ }
164
+
165
+ #endif
166
166
167
167
#ifdef ES_CONF_EXTI_IRQ_10
168
-
168
+
169
169
RT_WEAK void irq_pin10_callback (void * arg )
170
170
{
171
- rt_kprintf ("\r\nEXTI 10\r\n" );
172
- }
173
-
174
- #endif
175
-
171
+ rt_kprintf ("\r\nEXTI 10\r\n" );
172
+ }
173
+
174
+ #endif
175
+
176
176
#ifdef ES_CONF_EXTI_IRQ_11
177
-
177
+
178
178
RT_WEAK void irq_pin11_callback (void * arg )
179
179
{
180
- rt_kprintf ("\r\nEXTI 11\r\n" );
181
- }
182
-
183
- #endif
180
+ rt_kprintf ("\r\nEXTI 11\r\n" );
181
+ }
182
+
183
+ #endif
184
184
185
185
#ifdef ES_CONF_EXTI_IRQ_12
186
-
186
+
187
187
RT_WEAK void irq_pin12_callback (void * arg )
188
188
{
189
- rt_kprintf ("\r\nEXTI 12\r\n" );
190
- }
191
-
192
- #endif
189
+ rt_kprintf ("\r\nEXTI 12\r\n" );
190
+ }
191
+
192
+ #endif
193
193
194
194
#ifdef ES_CONF_EXTI_IRQ_13
195
-
195
+
196
196
RT_WEAK void irq_pin13_callback (void * arg )
197
197
{
198
- rt_kprintf ("\r\nEXTI 13\r\n" );
199
- }
200
-
201
- #endif
202
-
198
+ rt_kprintf ("\r\nEXTI 13\r\n" );
199
+ }
200
+
201
+ #endif
202
+
203
203
#ifdef ES_CONF_EXTI_IRQ_14
204
-
204
+
205
205
RT_WEAK void irq_pin14_callback (void * arg )
206
206
{
207
- rt_kprintf ("\r\nEXTI 14\r\n" );
208
- }
209
-
210
- #endif
207
+ rt_kprintf ("\r\nEXTI 14\r\n" );
208
+ }
209
+
210
+ #endif
211
211
212
212
#ifdef ES_CONF_EXTI_IRQ_15
213
-
213
+
214
214
RT_WEAK void irq_pin15_callback (void * arg )
215
215
{
216
- rt_kprintf ("\r\nEXTI 15\r\n" );
217
- }
218
-
219
- #endif
216
+ rt_kprintf ("\r\nEXTI 15\r\n" );
217
+ }
218
+
219
+ #endif
220
220
221
221
222
222
#define ITEM_NUM (items ) sizeof(items) / sizeof(items[0])
@@ -277,7 +277,7 @@ void es32f3_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
277
277
gpio_initstruct .podrv = GPIO_OUT_DRIVE_6 ;
278
278
gpio_initstruct .nodrv = GPIO_OUT_DRIVE_6 ;
279
279
gpio_initstruct .type = GPIO_TYPE_CMOS ;
280
- gpio_initstruct .odos = GPIO_PUSH_PULL ;
280
+ gpio_initstruct .odos = GPIO_PUSH_PULL ;
281
281
gpio_initstruct .flt = GPIO_FILTER_DISABLE ;
282
282
283
283
if (mode == PIN_MODE_OUTPUT )
@@ -317,12 +317,12 @@ void es32f3_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
317
317
rt_inline const struct pin_irq_map * get_pin_irq_map (rt_uint16_t gpio_pin )
318
318
{
319
319
uint8_t map_index = 0U ;
320
-
320
+
321
321
while (gpio_pin >> (++ map_index ))
322
322
{
323
323
}
324
324
map_index -- ;
325
-
325
+
326
326
if (map_index >= ITEM_NUM (pin_irq_map ))
327
327
{
328
328
return RT_NULL ;
@@ -385,7 +385,14 @@ rt_err_t es32f3_pin_detach_irq(struct rt_device *device, rt_int32_t pin)
385
385
{
386
386
return RT_ENOSYS ;
387
387
}
388
- irqindex = index -> pin & 0x00FF ;
388
+
389
+ for (irqindex = 0 ; irqindex < 16 ; irqindex ++ )
390
+ {
391
+ if ((0x01 << irqindex ) == index -> pin )
392
+ {
393
+ break ;
394
+ }
395
+ }
389
396
if (irqindex < 0 || irqindex >= ITEM_NUM (pin_irq_map ))
390
397
{
391
398
return RT_ENOSYS ;
@@ -448,9 +455,9 @@ rt_err_t es32f3_pin_irq_enable(struct rt_device *device, rt_base_t pin,
448
455
/* Configure GPIO_InitStructure */
449
456
gpio_initstruct .mode = GPIO_MODE_INPUT ;
450
457
gpio_initstruct .odos = GPIO_PUSH_PULL ;
451
- gpio_initstruct .podrv = GPIO_OUT_DRIVE_6 ;
452
- gpio_initstruct .nodrv = GPIO_OUT_DRIVE_6 ;
453
- gpio_initstruct .func = GPIO_FUNC_1 ;
458
+ gpio_initstruct .podrv = GPIO_OUT_DRIVE_6 ;
459
+ gpio_initstruct .nodrv = GPIO_OUT_DRIVE_6 ;
460
+ gpio_initstruct .func = GPIO_FUNC_1 ;
454
461
gpio_initstruct .flt = GPIO_FILTER_DISABLE ;
455
462
switch (pin_irq_hdr_tab [irqindex ].mode )
456
463
{
@@ -641,16 +648,16 @@ void EXTI15_Handler(void)
641
648
int rt_hw_pin_init (void )
642
649
{
643
650
int result ;
644
-
651
+
645
652
646
653
#ifdef ES_INIT_GPIOS
647
-
654
+
648
655
rt_size_t i ,gpio_conf_num = sizeof (gpio_conf_all ) / sizeof (gpio_conf_t );
649
656
650
- #endif
657
+ #endif
651
658
652
659
ald_cmu_perh_clock_config (CMU_PERH_GPIO , ENABLE );
653
-
660
+
654
661
result = rt_device_pin_register (ES_DEVICE_NAME_PIN , & _es32f3_pin_ops , RT_NULL );
655
662
656
663
if (result != RT_EOK )return result ;
@@ -660,20 +667,20 @@ int rt_hw_pin_init(void)
660
667
for (i = 0 ;i < gpio_conf_num ;i ++ )
661
668
{
662
669
rt_pin_mode ( gpio_conf_all [i ].pin ,gpio_conf_all [i ].pin_mode );
663
-
670
+
664
671
if ((gpio_conf_all [i ].pin_mode == ES_C_GPIO_MODE_OUTPUT )|| (gpio_conf_all [i ].pin_mode == ES_C_GPIO_MODE_OUTPUT_OD ))
665
672
rt_pin_write (gpio_conf_all [i ].pin ,gpio_conf_all [i ].pin_level );
666
-
673
+
667
674
if (!gpio_conf_all [i ].irq_en )continue ;
668
-
675
+
669
676
rt_pin_attach_irq (gpio_conf_all [i ].pin , gpio_conf_all [i ].irq_mode , gpio_conf_all [i ].callback , RT_NULL );
670
677
rt_pin_irq_enable (gpio_conf_all [i ].pin , gpio_conf_all [i ].irq_en );
671
678
}
672
-
673
- #endif
674
-
675
679
676
-
680
+ #endif
681
+
682
+
683
+
677
684
return result ;
678
685
}
679
686
INIT_BOARD_EXPORT (rt_hw_pin_init );
0 commit comments