@@ -78,23 +78,23 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
78
78
79
79
uint32_t mode = pin_get_mode (self );
80
80
81
- if (mode == GPIO_MODE_ANALOG ) {
81
+ if (mode == MP_HAL_PIN_MODE_ANALOG ) {
82
82
// analog
83
83
mp_print_str (print , "ANALOG)" );
84
84
85
85
} else {
86
86
// IO mode
87
87
bool af = false;
88
88
qstr mode_qst ;
89
- if (mode == GPIO_MODE_INPUT ) {
89
+ if (mode == MP_HAL_PIN_MODE_INPUT ) {
90
90
mode_qst = MP_QSTR_IN ;
91
- } else if (mode == GPIO_MODE_OUTPUT_PP ) {
91
+ } else if (mode == MP_HAL_PIN_MODE_OUTPUT ) {
92
92
mode_qst = MP_QSTR_OUT ;
93
- } else if (mode == GPIO_MODE_OUTPUT_OD ) {
93
+ } else if (mode == MP_HAL_PIN_MODE_OPEN_DRAIN ) {
94
94
mode_qst = MP_QSTR_OPEN_DRAIN ;
95
95
} else {
96
96
af = true;
97
- if (mode == GPIO_MODE_AF_PP ) {
97
+ if (mode == MP_HAL_PIN_MODE_ALT ) {
98
98
mode_qst = MP_QSTR_ALT ;
99
99
} else {
100
100
mode_qst = MP_QSTR_ALT_OPEN_DRAIN ;
@@ -105,9 +105,9 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
105
105
// pull mode
106
106
qstr pull_qst = MP_QSTRnull ;
107
107
uint32_t pull = pin_get_pull (self );
108
- if (pull == GPIO_PULLUP ) {
108
+ if (pull == MP_HAL_PIN_PULL_UP ) {
109
109
pull_qst = MP_QSTR_PULL_UP ;
110
- } else if (pull == GPIO_NOPULL ) {
110
+ } else if (pull == MP_HAL_PIN_PULL_NONE ) {
111
111
pull_qst = MP_QSTR_PULL_NONE ;
112
112
}
113
113
if (pull_qst != MP_QSTRnull ) {
@@ -117,12 +117,14 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
117
117
// drive
118
118
qstr drive_qst = MP_QSTRnull ;
119
119
uint32_t drive = pin_get_drive (self );
120
- if (drive == GPIO_HIGH_POWER ) {
121
- drive_qst = MP_QSTR_HIGH_POWER ;
122
- } else if (drive == GPIO_MED_POWER ) {
123
- drive_qst = MP_QSTR_MED_POWER ;
124
- } else if (drive == GPIO_LOW_POWER ) {
125
- drive_qst = MP_QSTR_LOW_POWER ;
120
+ if (drive == MP_HAL_PIN_DRIVE_3 ) {
121
+ drive_qst = MP_QSTR_DRIVE_3 ;
122
+ } else if (drive == MP_HAL_PIN_DRIVE_2 ) {
123
+ drive_qst = MP_QSTR_DRIVE_2 ;
124
+ } else if (drive == MP_HAL_PIN_DRIVE_1 ) {
125
+ drive_qst = MP_QSTR_DRIVE_1 ;
126
+ } else if (drive == MP_HAL_PIN_DRIVE_0 ) {
127
+ drive_qst = MP_QSTR_DRIVE_0 ;
126
128
}
127
129
if (drive_qst != MP_QSTRnull ) {
128
130
mp_printf (print , ", drive=Pin.%q" , drive_qst );
@@ -143,14 +145,14 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
143
145
}
144
146
}
145
147
146
- // pin.init(mode, pull=None , *, value=None, driver=None , alt=FUNC_SIO )
148
+ // pin.init(mode=-1 , pull=-1 , *, value=None, drive=0 , alt=-1 )
147
149
STATIC mp_obj_t machine_pin_obj_init_helper (const machine_pin_obj_t * self , size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
150
+ enum { ARG_mode , ARG_pull , ARG_value , ARG_drive , ARG_alt };
148
151
static const mp_arg_t allowed_args [] = {
149
- { MP_QSTR_mode , MP_ARG_REQUIRED | MP_ARG_INT },
152
+ { MP_QSTR_mode , MP_ARG_OBJ , {. u_rom_obj = MP_ROM_NONE } },
150
153
{ MP_QSTR_pull , MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE }},
151
- { MP_QSTR_af , MP_ARG_INT , {.u_int = -1 }}, // legacy
152
- { MP_QSTR_value , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL }},
153
- { MP_QSTR_drive , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = GPIO_LOW_POWER }},
154
+ { MP_QSTR_value , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE }},
155
+ { MP_QSTR_drive , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE }},
154
156
{ MP_QSTR_alt , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 }},
155
157
};
156
158
@@ -159,29 +161,50 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
159
161
mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
160
162
161
163
// get io mode
162
- uint mode = args [0 ].u_int ;
163
- if (!IS_GPIO_MODE (mode )) {
164
- mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("invalid pin mode: %d" ), mode );
164
+ uint32_t mode ;
165
+ if (args [ARG_mode ].u_obj != mp_const_none ) {
166
+ mode = mp_obj_get_int (args [ARG_mode ].u_obj );
167
+ if (!IS_GPIO_MODE (mode )) {
168
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("invalid pin mode: %d" ), mode );
169
+ }
170
+ } else {
171
+ mode = ra_gpio_get_mode (self -> pin );
165
172
}
166
173
167
174
// get pull mode
168
- uint pull = 0 ;
169
- if (args [1 ].u_obj != mp_const_none ) {
170
- pull = mp_obj_get_int (args [1 ].u_obj );
175
+ uint32_t pull ;
176
+ if (args [ARG_pull ].u_obj != mp_const_none ) {
177
+ pull = mp_obj_get_int (args [ARG_pull ].u_obj );
178
+ if (!IS_GPIO_PULL (pull )) {
179
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("invalid pull mode: %d" ), pull );
180
+ }
181
+ if (pull == MP_HAL_PIN_PULL_DOWN ) {
182
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("%q is not supported" ), MP_QSTR_PULL_DOWN );
183
+ }
184
+ } else {
185
+ pull = ra_gpio_get_pull (self -> pin );
171
186
}
172
187
173
188
// get drive
174
- uint drive = args [4 ].u_int ;
175
- if (!IS_GPIO_DRIVE (drive )) {
176
- mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("invalid pin drive: %d" ), drive );
189
+ uint32_t drive ;
190
+ if (args [ARG_drive ].u_obj != mp_const_none ) {
191
+ drive = mp_obj_get_int (args [ARG_drive ].u_obj );
192
+ if (!IS_GPIO_DRIVE (drive )) {
193
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("invalid pin drive: %d" ), drive );
194
+ }
195
+ } else {
196
+ drive = ra_gpio_get_drive (self -> pin );
177
197
}
178
198
179
- mp_hal_pin_config (self , mode , pull , drive , -1 );
199
+ // get alt
200
+ if (args [ARG_alt ].u_int != (-1 )) {
201
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("alt is not supported" ));
202
+ }
203
+ mp_hal_pin_config (self , mode , pull , drive , 0 );
180
204
// if given, set the pin value before initialising to prevent glitches
181
- if (args [3 ].u_obj != MP_OBJ_NULL ) {
182
- mp_hal_pin_write (self , mp_obj_is_true (args [3 ].u_obj ));
205
+ if (args [ARG_value ].u_obj != mp_const_none ) {
206
+ mp_hal_pin_write (self , mp_obj_is_true (args [ARG_value ].u_obj ));
183
207
}
184
-
185
208
return mp_const_none ;
186
209
}
187
210
@@ -249,13 +272,17 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_
249
272
enum { ARG_handler , ARG_trigger , ARG_hard };
250
273
static const mp_arg_t allowed_args [] = {
251
274
{ MP_QSTR_handler , MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE } },
252
- { MP_QSTR_trigger , MP_ARG_INT , {.u_int = GPIO_MODE_IT_RISING | GPIO_MODE_IT_FALLING } },
275
+ { MP_QSTR_trigger , MP_ARG_INT , {.u_int = MP_HAL_PIN_TRIGGER_RISING | MP_HAL_PIN_TRIGGER_FALLING } },
253
276
{ MP_QSTR_hard , MP_ARG_BOOL , {.u_bool = false} },
254
277
};
255
278
machine_pin_obj_t * self = MP_OBJ_TO_PTR (pos_args [0 ]);
256
279
mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
257
280
mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
258
281
282
+ if (args [ARG_trigger ].u_int & MP_HAL_PIN_TRIGGER_HIGHLEVEL ) {
283
+ mp_raise_msg_varg (& mp_type_ValueError , MP_ERROR_TEXT ("%q is not supported" ), MP_QSTR_IRQ_HIGH_LEVEL );
284
+ }
285
+
259
286
if (n_args > 1 || kw_args -> used != 0 ) {
260
287
// configure irq
261
288
extint_register_pin (self , args [ARG_trigger ].u_int ,
@@ -282,27 +309,23 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = {
282
309
{ MP_ROM_QSTR (MP_QSTR_cpu ), MP_ROM_PTR (& pin_cpu_pins_obj_type ) },
283
310
284
311
// class constants
285
- { MP_ROM_QSTR (MP_QSTR_IN ), MP_ROM_INT (GPIO_MODE_INPUT ) },
286
- { MP_ROM_QSTR (MP_QSTR_OUT ), MP_ROM_INT (GPIO_MODE_OUTPUT_PP ) },
287
- { MP_ROM_QSTR (MP_QSTR_OPEN_DRAIN ), MP_ROM_INT (GPIO_MODE_OUTPUT_OD ) },
288
- { MP_ROM_QSTR (MP_QSTR_ALT ), MP_ROM_INT (GPIO_MODE_AF_PP ) },
289
- { MP_ROM_QSTR (MP_QSTR_ALT_OPEN_DRAIN ), MP_ROM_INT (GPIO_MODE_AF_OD ) },
290
- { MP_ROM_QSTR (MP_QSTR_ANALOG ), MP_ROM_INT (GPIO_MODE_ANALOG ) },
291
- { MP_ROM_QSTR (MP_QSTR_PULL_UP ), MP_ROM_INT (GPIO_PULLUP ) },
292
- { MP_ROM_QSTR (MP_QSTR_PULL_DOWN ), MP_ROM_INT (GPIO_PULLDOWN ) },
293
- { MP_ROM_QSTR (MP_QSTR_PULL_HOLD ), MP_ROM_INT (GPIO_PULLHOLD ) },
294
- { MP_ROM_QSTR (MP_QSTR_PULL_NONE ), MP_ROM_INT (GPIO_NOPULL ) },
295
- { MP_ROM_QSTR (MP_QSTR_LOW_POWER ), MP_ROM_INT (GPIO_LOW_POWER ) },
296
- { MP_ROM_QSTR (MP_QSTR_MED_POWER ), MP_ROM_INT (GPIO_MED_POWER ) },
297
- { MP_ROM_QSTR (MP_QSTR_HIGH_POWER ), MP_ROM_INT (GPIO_HIGH_POWER ) },
298
- { MP_ROM_QSTR (MP_QSTR_IRQ_RISING ), MP_ROM_INT (GPIO_MODE_IT_RISING ) },
299
- { MP_ROM_QSTR (MP_QSTR_IRQ_FALLING ), MP_ROM_INT (GPIO_MODE_IT_FALLING ) },
300
- { MP_ROM_QSTR (MP_QSTR_IRQ_RISING_FALLING ), MP_ROM_INT (GPIO_MODE_IT_RISING_FALLING ) },
301
- { MP_ROM_QSTR (MP_QSTR_EVT_RISING ), MP_ROM_INT (GPIO_MODE_EVT_RISING ) },
302
- { MP_ROM_QSTR (MP_QSTR_EVT_FALLING ), MP_ROM_INT (GPIO_MODE_EVT_FALLING ) },
303
- { MP_ROM_QSTR (MP_QSTR_EVT_RISING_FALLING ), MP_ROM_INT (GPIO_MODE_EVT_RISING_FALLING ) },
304
- { MP_ROM_QSTR (MP_QSTR_IRQ_LOWLEVEL ), MP_ROM_INT (GPIO_IRQ_LOWLEVEL ) },
305
- { MP_ROM_QSTR (MP_QSTR_IRQ_HIGHLEVEL ), MP_ROM_INT (GPIO_IRQ_HIGHLEVEL ) },
312
+ { MP_ROM_QSTR (MP_QSTR_IN ), MP_ROM_INT (MP_HAL_PIN_MODE_INPUT ) },
313
+ { MP_ROM_QSTR (MP_QSTR_OUT ), MP_ROM_INT (MP_HAL_PIN_MODE_OUTPUT ) },
314
+ { MP_ROM_QSTR (MP_QSTR_OPEN_DRAIN ), MP_ROM_INT (MP_HAL_PIN_MODE_OPEN_DRAIN ) },
315
+ { MP_ROM_QSTR (MP_QSTR_ALT ), MP_ROM_INT (MP_HAL_PIN_MODE_ALT ) },
316
+ { MP_ROM_QSTR (MP_QSTR_ALT_OPEN_DRAIN ), MP_ROM_INT (MP_HAL_PIN_MODE_ALT_OPEN_DRAIN ) },
317
+ { MP_ROM_QSTR (MP_QSTR_ANALOG ), MP_ROM_INT (MP_HAL_PIN_MODE_ANALOG ) },
318
+ { MP_ROM_QSTR (MP_QSTR_PULL_NONE ), MP_ROM_INT (MP_HAL_PIN_PULL_NONE ) },
319
+ { MP_ROM_QSTR (MP_QSTR_PULL_UP ), MP_ROM_INT (MP_HAL_PIN_PULL_UP ) },
320
+ { MP_ROM_QSTR (MP_QSTR_PULL_DOWN ), MP_ROM_INT (MP_HAL_PIN_PULL_DOWN ) },
321
+ { MP_ROM_QSTR (MP_QSTR_DRIVE_0 ), MP_ROM_INT (MP_HAL_PIN_DRIVE_0 ) },
322
+ { MP_ROM_QSTR (MP_QSTR_DRIVE_1 ), MP_ROM_INT (MP_HAL_PIN_DRIVE_1 ) },
323
+ { MP_ROM_QSTR (MP_QSTR_DRIVE_2 ), MP_ROM_INT (MP_HAL_PIN_DRIVE_2 ) },
324
+ { MP_ROM_QSTR (MP_QSTR_DRIVE_3 ), MP_ROM_INT (MP_HAL_PIN_DRIVE_3 ) },
325
+ { MP_ROM_QSTR (MP_QSTR_IRQ_FALLING ), MP_ROM_INT (MP_HAL_PIN_TRIGGER_FALLING ) },
326
+ { MP_ROM_QSTR (MP_QSTR_IRQ_RISING ), MP_ROM_INT (MP_HAL_PIN_TRIGGER_RISING ) },
327
+ { MP_ROM_QSTR (MP_QSTR_IRQ_LOW_LEVEL ), MP_ROM_INT (MP_HAL_PIN_TRIGGER_LOWLEVEL ) },
328
+ { MP_ROM_QSTR (MP_QSTR_IRQ_HIGH_LEVEL ), MP_ROM_INT (MP_HAL_PIN_TRIGGER_HIGHLEVEL ) },
306
329
};
307
330
STATIC MP_DEFINE_CONST_DICT (machine_pin_locals_dict , machine_pin_locals_dict_table );
308
331
@@ -352,7 +375,8 @@ uint32_t pin_get_pull(const machine_pin_obj_t *pin) {
352
375
}
353
376
354
377
// Returns the pin drive. The value returned by this macro should
355
- // be one of GPIO_HIGH_POWER, GPIO_MED_POWER, or GPIO_LOW_POWER.
378
+ // be one of GPIO_HIGH_POWER, GPIO_MID_FAST_POWER, GPIO_MID_POWER,
379
+ // or GPIO_LOW_POWER.
356
380
357
381
uint32_t pin_get_drive (const machine_pin_obj_t * pin ) {
358
382
return (uint32_t )ra_gpio_get_drive (pin -> pin );
0 commit comments