diff options
| author | guozhanxin <[email protected]> | 2021-01-28 22:09:28 +0800 |
|---|---|---|
| committer | guozhanxin <[email protected]> | 2021-01-28 22:17:05 +0800 |
| commit | 76331797cd18f05800ead01433b27e6f554bbb94 (patch) | |
| tree | c38465926ef6111c25a7249bee0d8e97edd11a15 /bsp/raspberry-pico/drivers | |
| parent | e3604553c7431b0fe7a64c5a10781d0589a8ee58 (diff) | |
[bsp][raspberry-pico]add gpio drivers
Diffstat (limited to 'bsp/raspberry-pico/drivers')
| -rw-r--r-- | bsp/raspberry-pico/drivers/drv_gpio.c | 67 | ||||
| -rw-r--r-- | bsp/raspberry-pico/drivers/drv_gpio.h | 21 |
2 files changed, 88 insertions, 0 deletions
diff --git a/bsp/raspberry-pico/drivers/drv_gpio.c b/bsp/raspberry-pico/drivers/drv_gpio.c new file mode 100644 index 0000000000..eb6b47deb0 --- /dev/null +++ b/bsp/raspberry-pico/drivers/drv_gpio.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-07-29 zdzn first version + */ + +#include "drv_gpio.h" + +static void pico_pin_mode(struct rt_device *dev, rt_base_t pin, rt_base_t mode) +{ + RT_ASSERT((0 <= pin) && (pin < N_GPIOS)); + + gpio_init(pin); + switch (mode) + { + case PIN_MODE_OUTPUT: + gpio_set_dir(pin, GPIO_OUT); + break; + case PIN_MODE_INPUT: + gpio_set_dir(pin, GPIO_IN); + break; + case PIN_MODE_INPUT_PULLUP: + gpio_pull_up(pin); + break; + case PIN_MODE_INPUT_PULLDOWN: + gpio_pull_down(pin); + break; + case PIN_MODE_OUTPUT_OD: + gpio_disable_pulls(pin); + break; + } +} + +static void pico_pin_write(struct rt_device *dev, rt_base_t pin, rt_base_t value) +{ + RT_ASSERT((0 <= pin) && (pin < N_GPIOS)); + gpio_put(pin, value); +} + +static int pico_pin_read(struct rt_device *device, rt_base_t pin) +{ + RT_ASSERT((0 <= pin) && (pin < N_GPIOS)); + return (gpio_get(pin)? PIN_HIGH : PIN_LOW); +} + +static const struct rt_pin_ops ops = +{ + pico_pin_mode, + pico_pin_write, + pico_pin_read, + RT_NULL, + RT_NULL, + RT_NULL, + RT_NULL, +}; + +int rt_hw_gpio_init(void) +{ + rt_device_pin_register("gpio", &ops, RT_NULL); + + return 0; +} +INIT_DEVICE_EXPORT(rt_hw_gpio_init); diff --git a/bsp/raspberry-pico/drivers/drv_gpio.h b/bsp/raspberry-pico/drivers/drv_gpio.h new file mode 100644 index 0000000000..7119bce054 --- /dev/null +++ b/bsp/raspberry-pico/drivers/drv_gpio.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-07-29 zdzn first version + */ + +#ifndef __DRV_GPIO_H__ +#define __DRV_GPIO_H__ + +#include <rtdevice.h> +#include <rtthread.h> + +#include "board.h" + +int rt_hw_gpio_init(void); + +#endif /* __DRV_GPIO_H__ */ |
