Skip to content

Commit 621bff8

Browse files
TakeoTakahashi2020dpgeorge
authored andcommitted
renesas-ra/machine_pin: Support drive keyword and fix GPIO setting.
Changes are: - Support drive= keyword argument. - Fix trigger keyword check. - Fix GPIO pin setting. Signed-off-by: Takeo Takahashi <[email protected]>
1 parent 85a2589 commit 621bff8

File tree

14 files changed

+177
-151
lines changed

14 files changed

+177
-151
lines changed

ports/renesas-ra/boards/RA4M1_CLICKER/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@
4747
// Switch
4848
#define MICROPY_HW_HAS_SWITCH (1)
4949
#define MICROPY_HW_USRSW_PIN (pin_P304)
50-
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
51-
#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
50+
#define MICROPY_HW_USRSW_PULL (MP_HAL_PIN_PULL_NONE)
51+
#define MICROPY_HW_USRSW_EXTI_MODE (MP_HAL_PIN_TRIGGER_FALLING)
5252
#define MICROPY_HW_USRSW_PRESSED (0)
5353

5454
// LEDs

ports/renesas-ra/boards/RA4M1_EK/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959
// Switch
6060
#define MICROPY_HW_HAS_SWITCH (1)
6161
#define MICROPY_HW_USRSW_PIN (pin_P105)
62-
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
63-
#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
62+
#define MICROPY_HW_USRSW_PULL (MP_HAL_PIN_PULL_NONE)
63+
#define MICROPY_HW_USRSW_EXTI_MODE (MP_HAL_PIN_TRIGGER_FALLING)
6464
#define MICROPY_HW_USRSW_PRESSED (0)
6565

6666
// LEDs

ports/renesas-ra/boards/RA4W1_EK/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
// Switch
5959
#define MICROPY_HW_HAS_SWITCH (1)
6060
#define MICROPY_HW_USRSW_PIN (pin_P402)
61-
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
62-
#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
61+
#define MICROPY_HW_USRSW_PULL (MP_HAL_PIN_PULL_NONE)
62+
#define MICROPY_HW_USRSW_EXTI_MODE (MP_HAL_PIN_TRIGGER_FALLING)
6363
#define MICROPY_HW_USRSW_PRESSED (0)
6464

6565
// LEDs

ports/renesas-ra/boards/RA6M1_EK/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@
6464
// Switch
6565
#define MICROPY_HW_HAS_SWITCH (1)
6666
#define MICROPY_HW_USRSW_PIN (pin_P415)
67-
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
68-
#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
67+
#define MICROPY_HW_USRSW_PULL (MP_HAL_PIN_PULL_NONE)
68+
#define MICROPY_HW_USRSW_EXTI_MODE (MP_HAL_PIN_TRIGGER_FALLING)
6969
#define MICROPY_HW_USRSW_PRESSED (0)
7070

7171
// LEDs

ports/renesas-ra/boards/RA6M2_EK/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@
7777
// Switch
7878
#define MICROPY_HW_HAS_SWITCH (1)
7979
#define MICROPY_HW_USRSW_PIN (pin_P105)
80-
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
81-
#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
80+
#define MICROPY_HW_USRSW_PULL (MP_HAL_PIN_PULL_NONE)
81+
#define MICROPY_HW_USRSW_EXTI_MODE (MP_HAL_PIN_TRIGGER_FALLING)
8282
#define MICROPY_HW_USRSW_PRESSED (0)
8383

8484
// LEDs

ports/renesas-ra/extint.c

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ uint extint_register(mp_obj_t pin_obj, uint32_t mode, uint32_t pull, mp_obj_t ca
138138
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("The Pin object(%d) doesn't have EXTINT feature"), pin_idx);
139139
}
140140
}
141-
if (pull != GPIO_NOPULL &&
142-
pull != GPIO_PULLUP) {
141+
if ((pull != MP_HAL_PIN_PULL_NONE) &&
142+
(pull != MP_HAL_PIN_PULL_UP)) {
143143
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("invalid ExtInt Pull: %d"), pull);
144144
}
145145
mp_obj_t *cb = &MP_STATE_PORT(pyb_extint_callback)[v_line];
@@ -153,7 +153,6 @@ uint extint_register(mp_obj_t pin_obj, uint32_t mode, uint32_t pull, mp_obj_t ca
153153
extint_disable(v_line);
154154

155155
*cb = callback_obj;
156-
// ToDo: mode should be handled
157156
pyb_extint_mode[v_line] = mode;
158157
pyb_extint_callback_arg[v_line] = MP_OBJ_NEW_SMALL_INT(v_line);
159158
if (*cb != mp_const_none) {
@@ -200,7 +199,6 @@ void extint_register_pin(const machine_pin_obj_t *pin, uint32_t mode, bool hard_
200199
extint_disable(line);
201200

202201
*cb = callback_obj;
203-
// ToDo: mode should be handled
204202
pyb_extint_mode[line] = mode;
205203

206204
if (*cb != mp_const_none) {
@@ -255,16 +253,16 @@ void extint_trigger_mode(uint line, uint32_t mode) {
255253
// cond: 0: falling, 1: rising, 2: both edge, 3 low level
256254
// Enable or disable the rising detector
257255
uint32_t cond = 0;
258-
if ((mode == GPIO_MODE_IT_RISING) || (mode == GPIO_MODE_EVT_RISING)) {
259-
cond = 1;
260-
} else if ((mode == GPIO_MODE_IT_FALLING) || (mode == GPIO_MODE_EVT_FALLING)) {
261-
cond = 0;
262-
} else if ((mode == GPIO_MODE_IT_RISING_FALLING) || (mode == GPIO_MODE_EVT_RISING_FALLING)) {
263-
cond = 2;
264-
} else if (mode == GPIO_IRQ_LOWLEVEL) {
256+
if (mode & MP_HAL_PIN_TRIGGER_LOWLEVEL) {
265257
cond = 3;
258+
} else if (mode & MP_HAL_PIN_TRIGGER_FALLING) {
259+
if (mode & MP_HAL_PIN_TRIGGER_RISING) {
260+
cond = 2;
261+
} else {
262+
cond = 0;
263+
}
266264
} else {
267-
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("The device doesn't have (%d) feature"), (uint32_t)mode);
265+
cond = 1;
268266
}
269267
ra_icu_trigger_irq_no((uint8_t)line, cond);
270268
enable_irq(irq_state);
@@ -372,14 +370,6 @@ STATIC const mp_rom_map_elem_t extint_locals_dict_table[] = {
372370
{ MP_ROM_QSTR(MP_QSTR_disable), MP_ROM_PTR(&extint_obj_disable_obj) },
373371
{ MP_ROM_QSTR(MP_QSTR_swint), MP_ROM_PTR(&extint_obj_swint_obj) },
374372
{ MP_ROM_QSTR(MP_QSTR_regs), MP_ROM_PTR(&extint_regs_obj) },
375-
376-
// class constants
377-
/// \constant IRQ_RISING - interrupt on a rising edge
378-
/// \constant IRQ_FALLING - interrupt on a falling edge
379-
/// \constant IRQ_RISING_FALLING - interrupt on a rising or falling edge
380-
{ MP_ROM_QSTR(MP_QSTR_IRQ_RISING), MP_ROM_INT(GPIO_MODE_IT_RISING) },
381-
{ MP_ROM_QSTR(MP_QSTR_IRQ_FALLING), MP_ROM_INT(GPIO_MODE_IT_FALLING) },
382-
{ MP_ROM_QSTR(MP_QSTR_IRQ_RISING_FALLING), MP_ROM_INT(GPIO_MODE_IT_RISING_FALLING) },
383373
};
384374

385375
STATIC MP_DEFINE_CONST_DICT(extint_locals_dict, extint_locals_dict_table);

ports/renesas-ra/machine_pin.c

Lines changed: 78 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
147149
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 };
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
};
307330
STATIC 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

357381
uint32_t pin_get_drive(const machine_pin_obj_t *pin) {
358382
return (uint32_t)ra_gpio_get_drive(pin->pin);

ports/renesas-ra/mphalport.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* The MIT License (MIT)
55
*
66
* Copyright (c) 2018 Damien P. George
7-
* Copyright (c) 2021 Renesas Electronics Corporation
7+
* Copyright (c) 2021-2022 Renesas Electronics Corporation
88
*
99
* Permission is hereby granted, free of charge, to any person obtaining a copy
1010
* of this software and associated documentation files (the "Software"), to deal
@@ -69,13 +69,21 @@ static inline mp_uint_t mp_hal_ticks_cpu(void) {
6969
#define MP_HAL_PIN_PULL_NONE (GPIO_NOPULL)
7070
#define MP_HAL_PIN_PULL_UP (GPIO_PULLUP)
7171
#define MP_HAL_PIN_PULL_DOWN (GPIO_PULLDOWN)
72+
#define MP_HAL_PIN_TRIGGER_FALLING (GPIO_IRQ_FALLING)
73+
#define MP_HAL_PIN_TRIGGER_RISING (GPIO_IRQ_RISING)
74+
#define MP_HAL_PIN_TRIGGER_LOWLEVEL (GPIO_IRQ_LOWLEVEL)
75+
#define MP_HAL_PIN_TRIGGER_HIGHLEVEL (GPIO_IRQ_HIGHLEVEL)
76+
#define MP_HAL_PIN_DRIVE_0 (GPIO_LOW_POWER)
77+
#define MP_HAL_PIN_DRIVE_1 (GPIO_MID_POWER)
78+
#define MP_HAL_PIN_DRIVE_2 (GPIO_MID_FAST_POWER)
79+
#define MP_HAL_PIN_DRIVE_3 (GPIO_HIGH_POWER)
7280

7381
#define mp_hal_pin_obj_t const machine_pin_obj_t *
7482
#define mp_hal_get_pin_obj(o) machine_pin_find(o)
7583
#define mp_hal_pin_name(p) ((p)->name)
7684
#define mp_hal_pin_input(p) ra_gpio_mode_input((p)->pin)
7785
#define mp_hal_pin_output(p) ra_gpio_mode_output((p)->pin)
78-
#define mp_hal_pin_open_drain(p) ra_gpio_config((p)->pin, GPIO_MODE_OUTPUT_OD, 0, 0, 0)
86+
#define mp_hal_pin_open_drain(p) ra_gpio_config((p)->pin, MP_HAL_PIN_MODE_OPEN_DRAIN, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_DRIVE_0, 0)
7987
#define mp_hal_pin_high(p) ra_gpio_write((p)->pin, 1)
8088
#define mp_hal_pin_low(p) ra_gpio_write((p)->pin, 0)
8189
#define mp_hal_pin_toggle(p) ra_gpio_toggle((p)->pin)

0 commit comments

Comments
 (0)