From e8d775f888f14e4fe3cc7bd57740fda0caaf4ece Mon Sep 17 00:00:00 2001 From: xfwangqiang <164877907@qq.com> Date: Mon, 30 May 2022 18:00:26 +0800 Subject: [componnets][pin]add pin operate command in MSH (#5892) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 1. 在AT32的BSP的drv_gpio中增加了at32_pin_get函数,用于实现rt_pin_ops对象中的pin_get 2. 在MSH中增加了PIN的操作命令 3. 为了方便在MSH命令中解析字符串,增加了一些字符串相关的函数 --- bsp/at32/libraries/rt_drivers/drv_gpio.c | 39 +++++++++++++++++++++++++++++- bsp/stm32/libraries/HAL_Drivers/drv_gpio.c | 1 + 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'bsp') diff --git a/bsp/at32/libraries/rt_drivers/drv_gpio.c b/bsp/at32/libraries/rt_drivers/drv_gpio.c index b4fa19408d..9417446367 100644 --- a/bsp/at32/libraries/rt_drivers/drv_gpio.c +++ b/bsp/at32/libraries/rt_drivers/drv_gpio.c @@ -102,6 +102,43 @@ static uint32_t pin_irq_enable_mask = 0; #define ITEM_NUM(items) sizeof(items) / sizeof(items[0]) +static rt_base_t at32_pin_get(const char *name) +{ + rt_base_t pin = 0; + int hw_port_num, hw_pin_num = 0; + int i, name_len; + + name_len = rt_strlen(name); + + if ((name_len < 4) || (name_len >= 6)) + { + return -RT_EINVAL; + } + if ((name[0] != 'P') || (name[2] != '.')) + { + return -RT_EINVAL; + } + + if ((name[1] >= 'A') && (name[1] <= 'Z')) + { + hw_port_num = (int)(name[1] - 'A'); + } + else + { + return -RT_EINVAL; + } + + for (i = 3; i < name_len; i++) + { + hw_pin_num *= 10; + hw_pin_num += name[i] - '0'; + } + + pin = PIN_NUM(hw_port_num, hw_pin_num); + + return pin; +} + static void at32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value) { gpio_type *gpio_port; @@ -423,7 +460,7 @@ const static struct rt_pin_ops _at32_pin_ops = at32_pin_attach_irq, at32_pin_dettach_irq, at32_pin_irq_enable, - RT_NULL, + at32_pin_get, }; rt_inline void pin_irq_handler(int irqno) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c index ee06f26003..b50819f579 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c @@ -161,6 +161,7 @@ static uint32_t pin_irq_enable_mask = 0; #define ITEM_NUM(items) sizeof(items) / sizeof(items[0]) +/* e.g. PE.7 */ static rt_base_t stm32_pin_get(const char *name) { rt_base_t pin = 0; -- cgit v1.3.1