You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/04/11 08:52:33 UTC

[incubator-nuttx] 01/05: nucleo-f103rb: refactor bringup logic for consistency with other boards

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 ad6c4ff0cdd142efaf603e2e9c5cb5d288ab4387
Author: raiden00pl <ra...@railab.me>
AuthorDate: Sat Apr 10 19:17:58 2021 +0200

    nucleo-f103rb: refactor bringup logic for consistency with other boards
---
 boards/arm/stm32/nucleo-f103rb/src/Make.defs       |  4 +-
 boards/arm/stm32/nucleo-f103rb/src/nucleo-f103rb.h | 20 +++++++
 .../src/{stm32_appinitialize.c => stm32_appinit.c} | 55 +++---------------
 boards/arm/stm32/nucleo-f103rb/src/stm32_boot.c    | 23 ++++++++
 .../src/{stm32_appinitialize.c => stm32_bringup.c} | 67 +++++++++++-----------
 5 files changed, 88 insertions(+), 81 deletions(-)

diff --git a/boards/arm/stm32/nucleo-f103rb/src/Make.defs b/boards/arm/stm32/nucleo-f103rb/src/Make.defs
index 9794dec..e7848ca 100644
--- a/boards/arm/stm32/nucleo-f103rb/src/Make.defs
+++ b/boards/arm/stm32/nucleo-f103rb/src/Make.defs
@@ -20,7 +20,7 @@
 
 include $(TOPDIR)/Make.defs
 
-CSRCS = stm32_boot.c
+CSRCS = stm32_boot.c stm32_bringup.c
 
 ifeq ($(CONFIG_ARCH_LEDS),y)
 CSRCS += stm32_autoleds.c
@@ -33,7 +33,7 @@ CSRCS += stm32_buttons.c
 endif
 
 ifeq ($(CONFIG_LIB_BOARDCTL),y)
-CSRCS += stm32_appinitialize.c
+CSRCS += stm32_appinit.c
 endif
 
 ifeq ($(CONFIG_ADC),y)
diff --git a/boards/arm/stm32/nucleo-f103rb/src/nucleo-f103rb.h b/boards/arm/stm32/nucleo-f103rb/src/nucleo-f103rb.h
index 93d2421..1a50242 100644
--- a/boards/arm/stm32/nucleo-f103rb/src/nucleo-f103rb.h
+++ b/boards/arm/stm32/nucleo-f103rb/src/nucleo-f103rb.h
@@ -82,6 +82,26 @@
  ****************************************************************************/
 
 /****************************************************************************
+ * Name: stm32_bringup
+ *
+ * Description:
+ *   Perform architecture specific initialization
+ *
+ *   CONFIG_LIB_BOARDCTL=y:
+ *     If CONFIG_NSH_ARCHINITIALIZE=y:
+ *       Called from the NSH library (or other application)
+ *     Otherwise, assumed to be called from some other application.
+ *
+ *   Otherwise CONFIG_BOARD_LATE_INITIALIZE=y:
+ *     Called from board_late_initialize().
+ *
+ *   Otherwise, bad news:  Never called
+ *
+ ****************************************************************************/
+
+int stm32_bringup(void);
+
+/****************************************************************************
  * Name: stm32_pwm_setup
  *
  * Description:
diff --git a/boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c b/boards/arm/stm32/nucleo-f103rb/src/stm32_appinit.c
similarity index 75%
copy from boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
copy to boards/arm/stm32/nucleo-f103rb/src/stm32_appinit.c
index 4b185bc..90f8952 100644
--- a/boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
+++ b/boards/arm/stm32/nucleo-f103rb/src/stm32_appinit.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
+ * boards/arm/stm32/nucleo-f103rb/src/stm32_appinit.c
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -24,11 +24,7 @@
 
 #include <nuttx/config.h>
 
-#include <sys/types.h>
-#include <syslog.h>
-
 #include <nuttx/board.h>
-#include <nuttx/leds/userled.h>
 
 #include "nucleo-f103rb.h"
 
@@ -36,15 +32,8 @@
  * Pre-processor Definitions
  ****************************************************************************/
 
-#undef HAVE_LEDS
-#undef HAVE_DAC
-
-#if !defined(CONFIG_ARCH_LEDS) && defined(CONFIG_USERLED_LOWER)
-#  define HAVE_LEDS 1
-#endif
-
-#if defined(CONFIG_DAC)
-#  define HAVE_DAC 1
+#ifndef OK
+#  define OK 0
 #endif
 
 /****************************************************************************
@@ -78,39 +67,13 @@
 
 int board_app_initialize(uintptr_t arg)
 {
-  int ret;
-
-#ifdef HAVE_LEDS
-  /* Register the LED driver */
-
-  ret = userled_lower_initialize(LED_DRIVER_PATH);
-  if (ret < 0)
-    {
-      syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
-      return ret;
-    }
-#endif
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+  /* Board initialization already performed by board_late_initialize() */
 
-#ifdef CONFIG_ADC
-  /* Initialize ADC and register the ADC driver. */
-
-  ret = stm32_adc_setup();
-  if (ret < 0)
-    {
-      syslog(LOG_ERR, "ERROR: stm32_adc_setup failed: %d\n", ret);
-    }
-#endif
-
-#ifdef CONFIG_PWM
-  /* Initialize PWM and register the PWM driver. */
+  return OK;
+#else
+  /* Perform board-specific initialization */
 
-  ret = stm32_pwm_setup();
-  if (ret < 0)
-    {
-      syslog(LOG_ERR, "ERROR: stm32_pwm_setup failed: %d\n", ret);
-    }
+  return stm32_bringup();
 #endif
-
-  UNUSED(ret);
-  return OK;
 }
diff --git a/boards/arm/stm32/nucleo-f103rb/src/stm32_boot.c b/boards/arm/stm32/nucleo-f103rb/src/stm32_boot.c
index d15d1d3..66fdf06 100644
--- a/boards/arm/stm32/nucleo-f103rb/src/stm32_boot.c
+++ b/boards/arm/stm32/nucleo-f103rb/src/stm32_boot.c
@@ -68,3 +68,26 @@ void stm32_boardinitialize(void)
   board_autoled_initialize();
 #endif
 }
+
+/****************************************************************************
+ * Name: board_late_initialize
+ *
+ * Description:
+ *   If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
+ *   initialization call will be performed in the boot-up sequence to a
+ *   function called board_late_initialize().  board_late_initialize() will
+ *   be called immediately after up_initialize() is called and just before
+ *   the initial application is started.  This additional initialization
+ *   phase may be used, for example, to initialize board-specific device
+ *   drivers.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+void board_late_initialize(void)
+{
+  /* Perform board-specific initialization */
+
+  stm32_bringup();
+}
+#endif
diff --git a/boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c b/boards/arm/stm32/nucleo-f103rb/src/stm32_bringup.c
similarity index 64%
rename from boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
rename to boards/arm/stm32/nucleo-f103rb/src/stm32_bringup.c
index 4b185bc..0376007 100644
--- a/boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
+++ b/boards/arm/stm32/nucleo-f103rb/src/stm32_bringup.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * boards/arm/stm32/nucleo-f103rb/src/stm32_appinitialize.c
+ * boards/arm/stm32/nucleo-f103rb/src/stm32_bringup.c
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -28,7 +28,14 @@
 #include <syslog.h>
 
 #include <nuttx/board.h>
-#include <nuttx/leds/userled.h>
+
+#ifdef CONFIG_USERLED
+#  include <nuttx/leds/userled.h>
+#endif
+
+#ifdef CONFIG_INPUT_BUTTONS
+#  include <nuttx/input/buttons.h>
+#endif
 
 #include "nucleo-f103rb.h"
 
@@ -37,49 +44,43 @@
  ****************************************************************************/
 
 #undef HAVE_LEDS
-#undef HAVE_DAC
 
 #if !defined(CONFIG_ARCH_LEDS) && defined(CONFIG_USERLED_LOWER)
 #  define HAVE_LEDS 1
 #endif
 
-#if defined(CONFIG_DAC)
-#  define HAVE_DAC 1
-#endif
-
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
 /****************************************************************************
- * Name: board_app_initialize
+ * Name: stm32_bringup
  *
  * Description:
- *   Perform application specific initialization.  This function is never
- *   called directly from application code, but only indirectly via the
- *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
+ *   Perform architecture-specific initialization
  *
- * Input Parameters:
- *   arg - The boardctl() argument is passed to the board_app_initialize()
- *         implementation without modification.  The argument has no
- *         meaning to NuttX; the meaning of the argument is a contract
- *         between the board-specific initialization logic and the
- *         matching application logic.  The value could be such things as a
- *         mode enumeration value, a set of DIP switch switch settings, a
- *         pointer to configuration data read from a file or serial FLASH,
- *         or whatever you would like to do with it.  Every implementation
- *         should accept zero/NULL as a default configuration.
+ *   CONFIG_BOARD_LATE_INITIALIZE=y :
+ *     Called from board_late_initialize().
  *
- * Returned Value:
- *   Zero (OK) is returned on success; a negated errno value is returned on
- *   any failure to indicate the nature of the failure.
+ *   CONFIG_BOARD_LATE_INITIALIZE=n && CONFIG_LIB_BOARDCTL=y :
+ *     Called from the NSH library
  *
  ****************************************************************************/
 
-int board_app_initialize(uintptr_t arg)
+int stm32_bringup(void)
 {
   int ret;
 
+#ifdef CONFIG_INPUT_BUTTONS
+  /* Register the BUTTON driver */
+
+  ret = btn_lower_initialize("/dev/buttons");
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret);
+    }
+#endif
+
 #ifdef HAVE_LEDS
   /* Register the LED driver */
 
@@ -91,23 +92,23 @@ int board_app_initialize(uintptr_t arg)
     }
 #endif
 
-#ifdef CONFIG_ADC
-  /* Initialize ADC and register the ADC driver. */
+#ifdef CONFIG_PWM
+  /* Initialize PWM and register the PWM device. */
 
-  ret = stm32_adc_setup();
+  ret = stm32_pwm_setup();
   if (ret < 0)
     {
-      syslog(LOG_ERR, "ERROR: stm32_adc_setup failed: %d\n", ret);
+      syslog(LOG_ERR, "ERROR: stm32_pwm_setup() failed: %d\n", ret);
     }
 #endif
 
-#ifdef CONFIG_PWM
-  /* Initialize PWM and register the PWM driver. */
+#ifdef CONFIG_ADC
+  /* Initialize ADC and register the ADC driver. */
 
-  ret = stm32_pwm_setup();
+  ret = stm32_adc_setup();
   if (ret < 0)
     {
-      syslog(LOG_ERR, "ERROR: stm32_pwm_setup failed: %d\n", ret);
+      syslog(LOG_ERR, "ERROR: stm32_adc_setup failed: %d\n", ret);
     }
 #endif