This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 00e8e4fa28d957a257c94784235887e282220e01 Author: zouboan <[email protected]> AuthorDate: Sun Jun 26 20:54:57 2022 +0800 boards/stm32f4discovery: add setup of pwm capture device drivers/timers/capture.c: add support of pwm capture driver --- boards/arm/stm32/stm32f4discovery/include/board.h | 9 ++ boards/arm/stm32/stm32f4discovery/src/Make.defs | 4 + .../arm/stm32/stm32f4discovery/src/stm32_bringup.c | 11 +++ .../arm/stm32/stm32f4discovery/src/stm32_capture.c | 109 +++++++++++++++++++++ .../stm32/stm32f4discovery/src/stm32f4discovery.h | 21 ++++ drivers/timers/capture.c | 1 - 6 files changed, 154 insertions(+), 1 deletion(-) diff --git a/boards/arm/stm32/stm32f4discovery/include/board.h b/boards/arm/stm32/stm32f4discovery/include/board.h index 6732108415..6f2698a1f2 100644 --- a/boards/arm/stm32/stm32f4discovery/include/board.h +++ b/boards/arm/stm32/stm32f4discovery/include/board.h @@ -314,6 +314,15 @@ #define GPIO_TIM4_CH2OUT GPIO_TIM4_CH2OUT_2 +/* Capture + * + * The STM32F4 Discovery has no real on-board pwm capture devices, but the + * board can be configured to capture pwm using TIM3 CH2 PB5. + */ + +#define GPIO_TIM3_CH2IN GPIO_TIM3_CH2IN_2 +#define GPIO_TIM3_CH1IN GPIO_TIM3_CH2IN_2 + /* RGB LED * * R = TIM1 CH1 on PE9 | G = TIM2 CH2 on PA1 | B = TIM3 CH3 on PB0 diff --git a/boards/arm/stm32/stm32f4discovery/src/Make.defs b/boards/arm/stm32/stm32f4discovery/src/Make.defs index 89fb34f154..1793630ca3 100644 --- a/boards/arm/stm32/stm32f4discovery/src/Make.defs +++ b/boards/arm/stm32/stm32f4discovery/src/Make.defs @@ -92,6 +92,10 @@ ifeq ($(CONFIG_PWM),y) CSRCS += stm32_pwm.c endif +ifeq ($(CONFIG_CAPTURE),y) +CSRCS += stm32_capture.c +endif + ifeq ($(CONFIG_BOARDCTL),y) CSRCS += stm32_appinit.c ifeq ($(CONFIG_BOARDCTL_RESET),y) diff --git a/boards/arm/stm32/stm32f4discovery/src/stm32_bringup.c b/boards/arm/stm32/stm32f4discovery/src/stm32_bringup.c index 17f0e51383..9a4340b421 100644 --- a/boards/arm/stm32/stm32f4discovery/src/stm32_bringup.c +++ b/boards/arm/stm32/stm32f4discovery/src/stm32_bringup.c @@ -347,6 +347,17 @@ int stm32_bringup(void) } #endif +#ifdef CONFIG_CAPTURE + /* Initialize Capture and register the Capture driver. */ + + ret = stm32_capture_setup("/dev/capture0"); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: stm32_capture_setup failed: %d\n", ret); + return ret; + } +#endif + #ifdef CONFIG_STM32_CAN_CHARDRIVER /* Initialize CAN and register the CAN driver. */ diff --git a/boards/arm/stm32/stm32f4discovery/src/stm32_capture.c b/boards/arm/stm32/stm32f4discovery/src/stm32_capture.c new file mode 100644 index 0000000000..811bdabbe0 --- /dev/null +++ b/boards/arm/stm32/stm32f4discovery/src/stm32_capture.c @@ -0,0 +1,109 @@ +/**************************************************************************** + * boards/arm/stm32/stm32f4discovery/src/stm32_capture.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <errno.h> +#include <debug.h> +#include <nuttx/timers/capture.h> +#include <arch/board/board.h> + +#include "chip.h" + +#include "stm32.h" +#include "stm32_capture.h" +#include "arm_internal.h" + +#include "stm32f4discovery.h" + +#if defined(CONFIG_CAPTURE) +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Capture + * + * The stm32f4discovery has no real on-board pwm capture devices, but the + * board can be configured to capture pwm using TIM3 CH2 PB5. + */ + +#define HAVE_CAPTURE 1 + +#ifndef CONFIG_CAPTURE +# undef HAVE_CAPTURE +#endif + +#ifndef CONFIG_STM32_TIM3 +# undef HAVE_CAPTURE +#endif + +#ifndef CONFIG_STM32_TIM3_CAP +# undef HAVE_CAPTURE +#endif + +#if !defined(CONFIG_STM32_TIM3_CHANNEL) || CONFIG_STM32_TIM3_CHANNEL != STM32F4DISCOVERY_CAPTURECHANNEL +# undef HAVE_CAPTURE +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_capture_setup + * + * Description: + * Initialize and register the pwm capture driver. + * + * Input parameters: + * devpath - The full path to the driver to register. E.g., "/dev/capture0" + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int stm32_capture_setup(FAR const char *devpath) +{ +#ifdef HAVE_CAPTURE + struct cap_lowerhalf_s *capture; + int ret; + + capture = stm32_cap_initialize(STM32F4DISCOVERY_CAPTURETIMER); + + /* Then register the pwm capture sensor */ + + ret = cap_register(devpath, capture); + if (ret < 0) + { + mtrerr("ERROR: Error registering capture\n"); + } + + return ret; +#else + return -ENODEV; +#endif +} + +#endif /* CONFIG_CAPTURE */ diff --git a/boards/arm/stm32/stm32f4discovery/src/stm32f4discovery.h b/boards/arm/stm32/stm32f4discovery/src/stm32f4discovery.h index 8b8e8d308e..15953dd4a6 100644 --- a/boards/arm/stm32/stm32f4discovery/src/stm32f4discovery.h +++ b/boards/arm/stm32/stm32f4discovery/src/stm32f4discovery.h @@ -243,6 +243,15 @@ #define STM32F4DISCOVERY_PWMTIMER 4 #define STM32F4DISCOVERY_PWMCHANNEL 2 +/* Capture + * + * The STM32F4 Discovery has no real on-board pwm capture devices, but the + * board can be configured to capture pwm using TIM3 CH2 PB5. + */ + +#define STM32F4DISCOVERY_CAPTURETIMER 3 +#define STM32F4DISCOVERY_CAPTURECHANNEL 2 + /* SPI chip selects */ #define GPIO_CS_MEMS (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|\ @@ -555,6 +564,18 @@ int stm32_usbhost_initialize(void); int stm32_pwm_setup(void); #endif +/**************************************************************************** + * Name: stm32_capture_setup + * + * Description: + * Initialize pwm capture support + * + ****************************************************************************/ + +#ifdef CONFIG_CAPTURE +int stm32_capture_setup(FAR const char *devpath); +#endif + /**************************************************************************** * Name: stm32_can_setup * diff --git a/drivers/timers/capture.c b/drivers/timers/capture.c index 9537f72a06..379a5eaed9 100644 --- a/drivers/timers/capture.c +++ b/drivers/timers/capture.c @@ -358,7 +358,6 @@ int cap_register(FAR const char *devpath, FAR struct cap_lowerhalf_s *lower) kmm_zalloc(sizeof(struct cap_upperhalf_s)); if (!upper) { - snprintf("ERROR: Allocation failed\n"); return -ENOMEM; }
