mirror of
https://github.com/apache/nuttx.git
synced 2026-09-02 15:12:59 +00:00
stm32: move HCSR04 initialization to common board logic
This commit is contained in:
parent
382ccf7b79
commit
beba7a8f0b
7 changed files with 120 additions and 71 deletions
81
boards/arm/stm32/common/include/stm32_hcsr04.h
Normal file
81
boards/arm/stm32/common/include/stm32_hcsr04.h
Normal 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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue