stm32: move HCSR04 initialization to common board logic

This commit is contained in:
Matias Nitsche 2020-05-11 18:14:56 -03:00 committed by Alin Jerpelea
parent 382ccf7b79
commit beba7a8f0b
7 changed files with 120 additions and 71 deletions

View file

@ -0,0 +1,81 @@
/****************************************************************************
* boards/arm/stm32/common/include/stm32_hcsr04.h
*
* 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.
*
****************************************************************************/
#ifndef __STM32_HCSR04_H
#define __STM32_HCSR04_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Inline Functions
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: stm32_hcsr04_initialize
*
* Description:
* This function is called by application-specific, setup logic to
* configure the HC-SR04 sensor.
*
* Input Parameters:
* devno - The device number, used to build the device path as /dev/distN
*
* Returned Value:
* Zero is returned on success. Otherwise, a negated errno value is
* returned to indicate the nature of the failure.
*
****************************************************************************/
int board_hcsr04_initialize(int devno);
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif // __STM32_HCSR04_H

View file

@ -54,6 +54,10 @@ ifeq ($(CONFIG_WL_NRF24L01),y)
CSRCS += stm32_nrf24l01.c
endif
ifeq ($(CONFIG_SENSORS_HCSR04),y)
CSRCS += stm32_hcsr04.c
endif
DEPPATH += --dep-path src
VPATH += :src
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src)

View file

@ -1,5 +1,5 @@
/****************************************************************************
* boards/arm/stm32/stm32f103-minimum/src/stm32_hcsr04.c
* boards/arm/stm32/common/src/stm32_hcsr04.c
*
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
* Copyright (C) 2017 Alan Carvalho de Assis. All rights reserved.
@ -41,29 +41,24 @@
#include <nuttx/config.h>
#include <nuttx/arch.h>
#include <stdio.h>
#include <errno.h>
#include <debug.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
#include <nuttx/sensors/hc_sr04.h>
#include "stm32.h"
#include "stm32_freerun.h"
#include "stm32f103_minimum.h"
#if defined(CONFIG_STM32_FREERUN) && defined (CONFIG_SENSORS_HCSR04)
#if !defined(CONFIG_STM32_TIM1)
# error STM32 TIM1 is not defined
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Use TIM1 as free running timer for HC-SR04 sensor */
#define HCSR04_FRTIMER 1
#ifndef CONFIG_STM32_FREERUN
#error "This implementation requires support for free running timers"
#endif
/****************************************************************************
* Private Types
@ -150,7 +145,7 @@ static int hcsr04_irq_attach(FAR struct hcsr04_config_s *state, xcpt_t isr,
priv->isr = isr;
priv->arg = arg;
stm32_gpiosetevent(GPIO_HCSR04_INT, priv->rising, priv->falling, true,
stm32_gpiosetevent(BOARD_HCSR04_GPIO_INT, priv->rising, priv->falling, true,
isr, arg);
leave_critical_section(flags);
@ -187,7 +182,7 @@ static void hcsr04_irq_enable(FAR const struct hcsr04_config_s *state,
iinfo("%d\n", enable);
stm32_gpiosetevent(GPIO_HCSR04_INT, priv->rising, priv->falling, true,
stm32_gpiosetevent(BOARD_HCSR04_GPIO_INT, priv->rising, priv->falling, true,
enable ? priv->isr : NULL, priv->arg);
}
@ -202,7 +197,7 @@ static void hcsr04_irq_clear(FAR const struct hcsr04_config_s *state)
static void hcsr04_set_trigger(FAR const struct hcsr04_config_s *state, bool on)
{
stm32_gpiowrite(GPIO_HCSR04_TRIG, on);
stm32_gpiowrite(BOARD_HCSR04_GPIO_TRIG, on);
}
/* Return the current Free Running clock tick */
@ -227,11 +222,10 @@ static int64_t hcsr04_get_clock(FAR const struct hcsr04_config_s *state)
*
* Description:
* This function is called by application-specific, setup logic to
* configure the HC-SR04 sensor. This function will register the driver
* as /dev/dist0 or any other name passed at *devname.
* configure the HC-SR04 sensor.
*
* Input Parameters:
* devname - The device name to register (i.e. "/dev/dist0").
* devno - The device number, used to build the device path as /dev/distN
*
* Returned Value:
* Zero is returned on success. Otherwise, a negated errno value is
@ -239,30 +233,28 @@ static int64_t hcsr04_get_clock(FAR const struct hcsr04_config_s *state)
*
****************************************************************************/
int stm32_hcsr04_initialize(FAR const char *devname)
int board_hcsr04_initialize(int devno)
{
int ret;
sinfo("devname = %s\n", devname);
char devpath[12];
/* Configure the PIO interrupt */
stm32_configgpio(GPIO_HCSR04_INT);
stm32_configgpio(BOARD_HCSR04_GPIO_INT);
/* Configure the Trigger pin */
stm32_configgpio(GPIO_HCSR04_TRIG);
stm32_configgpio(BOARD_HCSR04_GPIO_TRIG);
/* Initialize the free-running timer with 1uS resolution */
ret = stm32_freerun_initialize(&g_freerun, HCSR04_FRTIMER, 1);
ret = stm32_freerun_initialize(&g_freerun, BOARD_HCSR04_FRTIMER, 1);
if (ret < 0)
{
serr("Failed to initialize the free running timer! Err = %d\n", ret);
return -ENODEV;
}
return hcsr04_register(devname, &g_hcsr04config.config);
snprintf(devpath, 12, "/dev/dist%d", devno);
return hcsr04_register(devpath, &g_hcsr04config.config);
}
#endif /* CONFIG_STM32_FREERUN and CONFIG_SENSORS_HCSR04 */

View file

@ -218,4 +218,16 @@
#define BOARD_NRF24L01_GPIO_CE GPIO_NRF24L01_CE
#define BOARD_NRF24L01_GPIO_IRQ GPIO_NRF24L01_IRQ
/* HCSR04 driver */
/* Pins config to use with HC-SR04 sensor */
#define GPIO_HCSR04_INT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
#define GPIO_HCSR04_TRIG (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN1)
#define BOARD_HCSR04_GPIO_INT GPIO_HCSR04_INT
#define BOARD_HCSR04_GPIO_TRIG GPIO_HCSR04_TRIG
#define BOARD_HCSR04_FRTIMER 1 /* TIM1 as free running timer */
#endif /* __BOARDS_ARM_STM32_STM32F103_MINIMUM_INCLUDE_BOARD_H */

View file

@ -99,10 +99,6 @@ ifeq ($(CONFIG_CL_MFRC522),y)
CSRCS += stm32_mfrc522.c
endif
ifeq ($(CONFIG_SENSORS_HCSR04),y)
CSRCS += stm32_hcsr04.c
endif
ifeq ($(CONFIG_LCD_MAX7219),y)
CSRCS += stm32_max7219.c
endif

View file

@ -117,6 +117,10 @@
#include "stm32_nrf24l01.h"
#endif
#ifdef CONFIG_SENSORS_HCSR04
#include "stm32_hcsr04.h"
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@ -326,7 +330,7 @@ int stm32_bringup(void)
#ifdef CONFIG_SENSORS_HCSR04
/* Configure and initialize the HC-SR04 distance sensor */
ret = stm32_hcsr04_initialize("/dev/dist0");
ret = board_hcsr04_initialize(0);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: stm32_hcsr04_initialize() failed: %d\n", ret);

View file

@ -137,12 +137,6 @@
#define GPIO_ZEROCROSS (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
/* Pins config to use with HC-SR04 sensor */
#define GPIO_HCSR04_INT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
#define GPIO_HCSR04_TRIG (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN1)
/* Pin for APDS-9960 sensor */
#define GPIO_APDS9960_INT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
@ -308,40 +302,6 @@ void stm32_spidev_initialize(void);
int stm32_mmcsd_initialize(int minor);
#endif
/****************************************************************************
* Name: nunchuck_initialize
*
* Description:
* Initialize and register the button joystick driver
*
****************************************************************************/
#ifdef CONFIG_INPUT_NUNCHUCK
int nunchuck_initialize(FAR char *devname);
#endif
/****************************************************************************
* Name: stm32_hcsr04_initialize
*
* Description:
* Called to initialize the HC-SR04 sensor
*
****************************************************************************/
int stm32_hcsr04_initialize(FAR const char *devname);
/****************************************************************************
* Name: stm32_lm75initialize
*
* Description:
* Called to initialize LM75 temperature sensor
*
****************************************************************************/
#ifdef CONFIG_LM75_I2C
int stm32_lm75initialize(FAR const char *devpath);
#endif
/****************************************************************************
* Name: stm32_max6675initialize
*