@@ -78,23 +78,23 @@ STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
7878
7979 uint32_t mode = pin_get_mode (self );
8080
81- if (mode == GPIO_MODE_ANALOG ) {
81+ if (mode == MP_HAL_PIN_MODE_ANALOG ) {
8282 // analog
8383 mp_print_str (print , "ANALOG)" );
8484
8585 } else {
8686 // IO mode
8787 bool af = false;
8888 qstr mode_qst ;
89- if (mode == GPIO_MODE_INPUT ) {
89+ if (mode == MP_HAL_PIN_MODE_INPUT ) {
9090 mode_qst = MP_QSTR_IN ;
91- } else if (mode == GPIO_MODE_OUTPUT_PP ) {
91+ } else if (mode == MP_HAL_PIN_MODE_OUTPUT ) {
9292 mode_qst = MP_QSTR_OUT ;
93- } else if (mode == GPIO_MODE_OUTPUT_OD ) {
93+ } else if (mode == MP_HAL_PIN_MODE_OPEN_DRAIN ) {
9494 mode_qst = MP_QSTR_OPEN_DRAIN ;
9595 } else {
9696 af = true;
97- if (mode == GPIO_MODE_AF_PP ) {
97+ if (mode == MP_HAL_PIN_MODE_ALT ) {
9898 mode_qst = MP_QSTR_ALT ;
9999 } else {
100100 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
105105 // pull mode
106106 qstr pull_qst = MP_QSTRnull ;
107107 uint32_t pull = pin_get_pull (self );
108- if (pull == GPIO_PULLUP ) {
108+ if (pull == MP_HAL_PIN_PULL_UP ) {
109109 pull_qst = MP_QSTR_PULL_UP ;
110- } else if (pull == GPIO_NOPULL ) {
110+ } else if (pull == MP_HAL_PIN_PULL_NONE ) {
111111 pull_qst = MP_QSTR_PULL_NONE ;
112112 }
113113 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
117117 // drive
118118 qstr drive_qst = MP_QSTRnull ;
119119 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 ;
126128 }
127129 if (drive_qst != MP_QSTRnull ) {
128130 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
143145 }
144146}
145147
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 )
147149STATIC 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 };
148151 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 } },
150153 { 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 }},
154156 { MP_QSTR_alt , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = -1 }},
155157 };
156158
@@ -159,29 +161,50 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
159161 mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
160162
161163 // 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 );
165172 }
166173
167174 // 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 );
171186 }
172187
173188 // 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 );
177197 }
178198
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 );
180204 // 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 ));
183207 }
184-
185208 return mp_const_none ;
186209}
187210
@@ -249,13 +272,17 @@ STATIC mp_obj_t machine_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_
249272 enum { ARG_handler , ARG_trigger , ARG_hard };
250273 static const mp_arg_t allowed_args [] = {
251274 { 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 } },
253276 { MP_QSTR_hard , MP_ARG_BOOL , {.u_bool = false} },
254277 };
255278 machine_pin_obj_t * self = MP_OBJ_TO_PTR (pos_args [0 ]);
256279 mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
257280 mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
258281
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+
259286 if (n_args > 1 || kw_args -> used != 0 ) {
260287 // configure irq
261288 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[] = {
282309 { MP_ROM_QSTR (MP_QSTR_cpu ), MP_ROM_PTR (& pin_cpu_pins_obj_type ) },
283310
284311 // 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 ) },
306329};
307330STATIC MP_DEFINE_CONST_DICT (machine_pin_locals_dict , machine_pin_locals_dict_table );
308331
@@ -352,7 +375,8 @@ uint32_t pin_get_pull(const machine_pin_obj_t *pin) {
352375}
353376
354377// 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.
356380
357381uint32_t pin_get_drive (const machine_pin_obj_t * pin ) {
358382 return (uint32_t )ra_gpio_get_drive (pin -> pin );
0 commit comments