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/nuttx.git

commit 3e70a7edc735b9c14228455d5bf9e78b68d5b978
Author: Niccolò Maggioni <nicco.maggi...@gmail.com>
AuthorDate: Tue Aug 19 17:28:44 2025 +0200

    boards/arm/rp2040: Add ADS7046 example config
    
    Add a new defconfig that includes support for an ADS7046 sensor
    and extend the existing documentation to include its description.
    
    Signed-off-by: Niccolò Maggioni <nicco.maggioni+nu...@gmail.com>
---
 .../arm/rp2040/boards/raspberrypi-pico/index.rst   |  28 ++++++
 boards/arm/rp2040/common/include/rp2040_ads7046.h  |  87 +++++++++++++++++
 boards/arm/rp2040/common/src/Make.defs             |   4 +
 boards/arm/rp2040/common/src/rp2040_ads7046.c      | 103 +++++++++++++++++++++
 .../arm/rp2040/common/src/rp2040_common_bringup.c  |  31 ++++++-
 .../raspberrypi-pico/configs/ads7046/defconfig     |  60 ++++++++++++
 6 files changed, 309 insertions(+), 4 deletions(-)

diff --git 
a/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst 
b/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
index 020fb24beac..5d5636f6d74 100644
--- a/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
+++ b/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
@@ -133,6 +133,34 @@ the ``nuttx`` directory (again, consult the main 
:doc:`RP2040 documentation
 
    $ ./tools/configure.sh raspberrypi-pico:<configname>
 
+ads7046
+-------
+
+NuttShell configuration (console enabled in USB Port, at 115200 bps) with 
support for Texas Instruments ADS7046 ADC:
+
+.. list-table:: ADS7046 connections
+   :widths: auto
+   :header-rows: 1
+
+   * - ADS7046
+     - Raspberry Pi Pico
+   * - GND
+     - GND (Pin 3 or 38 or ...)
+   * - DVDD
+     - 3V3 OUT (Pin 36)
+   * - SCLK
+     - GP10 (SPI1 SCK) (Pin 14)
+   * - CS
+     - GP13 (SPI1 CSn) (Pin 17)
+   * - SDO
+     - GP12 (SPI1 RX) (Pin 16)
+
+.. code-block:: console
+
+   nsh> ads7046
+   ADS7046: hex=106, dec=262, adc_percentage=6%
+   nsh>
+
 audiopack
 ---------
 
diff --git a/boards/arm/rp2040/common/include/rp2040_ads7046.h 
b/boards/arm/rp2040/common/include/rp2040_ads7046.h
new file mode 100644
index 00000000000..f3c655954b5
--- /dev/null
+++ b/boards/arm/rp2040/common/include/rp2040_ads7046.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+ * boards/arm/rp2040/common/include/rp2040_ads7046.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 __BOARDS_ARM_RP2040_COMMON_INCLUDE_RP2040_ADS7046_H
+#define __BOARDS_ARM_RP2040_COMMON_INCLUDE_RP2040_ADS7046_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/spi/spi.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Type Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifdef __cplusplus
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Inline Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_ads7046_initialize
+ *
+ * Description:
+ *   Initialize and register the ADS7046 ADC driver.
+ *
+ * Input Parameters:
+ *   spi   - An instance of the SPI interface to use.
+ *   devno - The device number, used to build the device path as /dev/adcN.
+ *
+ * Returned Value:
+ *   Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+int board_ads7046_initialize(FAR struct spi_dev_s *spi, int devno);
+
+#undef EXTERN
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOARDS_ARM_RP2040_COMMON_INCLUDE_RP2040_ADS7046_H */
diff --git a/boards/arm/rp2040/common/src/Make.defs 
b/boards/arm/rp2040/common/src/Make.defs
index c7c0fef41ba..187e9aa1028 100644
--- a/boards/arm/rp2040/common/src/Make.defs
+++ b/boards/arm/rp2040/common/src/Make.defs
@@ -113,6 +113,10 @@ ifeq ($(CONFIG_SENSORS_TMP112),y)
   CSRCS += rp2040_tmp112.c
 endif
 
+ifeq ($(CONFIG_ADC_ADS7046),y)
+  CSRCS += rp2040_ads7046.c
+endif
+
 DEPPATH += --dep-path src
 VPATH += :src
 CFLAGS += 
${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src
diff --git a/boards/arm/rp2040/common/src/rp2040_ads7046.c 
b/boards/arm/rp2040/common/src/rp2040_ads7046.c
new file mode 100644
index 00000000000..6253f742d60
--- /dev/null
+++ b/boards/arm/rp2040/common/src/rp2040_ads7046.c
@@ -0,0 +1,103 @@
+/****************************************************************************
+ * boards/arm/rp2040/common/src/rp2040_ads7046.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 <stdio.h>
+#include <debug.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/analog/ads7046.h>
+
+#include "rp2040_spi.h"
+#include "rp2040_ads7046.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_ads7046_initialize
+ *
+ * Description:
+ *   Initialize and register the ADS7046 ADC driver.
+ *
+ * Input Parameters:
+ *   spi   - An instance of the SPI interface to use.
+ *   devno - The device number, used to build the device path as /dev/adcN.
+ *
+ * Returned Value:
+ *   Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+int board_ads7046_initialize(FAR struct spi_dev_s *spi, int devno)
+{
+  char devpath[10];
+  int ret;
+
+  ainfo("Initializing ADS7046 #%d\n", devno);
+
+  if (spi)
+    {
+      snprintf(devpath, sizeof(devpath), "/dev/adc%d", devno);
+      ret = ads7046_register(devpath, spi, devno);
+      if (ret < 0)
+        {
+          snerr("ERROR: Error registering ADS7046 at /dev/adc%d\n", devno);
+        }
+    }
+  else
+    {
+      ret = -ENODEV;
+    }
+
+  return ret;
+}
diff --git a/boards/arm/rp2040/common/src/rp2040_common_bringup.c 
b/boards/arm/rp2040/common/src/rp2040_common_bringup.c
index 8536f24adf5..5393c8ace6a 100644
--- a/boards/arm/rp2040/common/src/rp2040_common_bringup.c
+++ b/boards/arm/rp2040/common/src/rp2040_common_bringup.c
@@ -111,6 +111,13 @@
 #include "rp2040_spi.h"
 #endif
 
+#if defined(CONFIG_ADC) && defined(CONFIG_ADC_ADS7046)
+#include <nuttx/analog/ads7046.h>
+#include <nuttx/analog/adc.h>
+#include "rp2040_spi.h"
+#include "rp2040_ads7046.h"
+#endif
+
 #if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
 #include "rp2040_ws2812.h"
 #endif
@@ -471,15 +478,15 @@ int rp2040_common_bringup(void)
 #endif
 
 #ifdef CONFIG_ADC_MCP3008
-  /* Register MCP3008 ADC. */
+  /* Register the MCP3008 ADC. */
 
-  struct spi_dev_s *spi = rp2040_spibus_initialize(0);
-  if (spi == NULL)
+  struct spi_dev_s *mcp3008_spi = rp2040_spibus_initialize(0);
+  if (mcp3008_spi == NULL)
     {
       syslog(LOG_ERR, "Failed to initialize SPI bus 0\n");
     }
 
-  struct adc_dev_s *mcp3008 = mcp3008_initialize(spi);
+  struct adc_dev_s *mcp3008 = mcp3008_initialize(mcp3008_spi);
   if (mcp3008 == NULL)
     {
       syslog(LOG_ERR, "Failed to initialize MCP3008\n");
@@ -492,6 +499,22 @@ int rp2040_common_bringup(void)
     }
 #endif
 
+#ifdef CONFIG_ADC_ADS7046
+  /* Register the ADS7046 ADC. */
+
+  struct spi_dev_s *ads7046_spi = rp2040_spibus_initialize(1);
+  if (ads7046_spi == NULL)
+    {
+      syslog(LOG_ERR, "Failed to initialize SPI bus 1\n");
+    }
+
+  ret = board_ads7046_initialize(ads7046_spi, 0);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "Failed to initialize ADS7046 driver: %d\n", ret);
+    }
+#endif
+
 #ifdef CONFIG_FS_PROCFS
   /* Mount the procfs file system */
 
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/ads7046/defconfig 
b/boards/arm/rp2040/raspberrypi-pico/configs/ads7046/defconfig
new file mode 100644
index 00000000000..a77ff1cad99
--- /dev/null
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/ads7046/defconfig
@@ -0,0 +1,60 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed 
.config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that 
includes your
+# modifications.
+#
+# CONFIG_DEV_CONSOLE is not set
+# CONFIG_LIBC_LONG_LONG is not set
+# CONFIG_NSH_ARGCAT is not set
+# CONFIG_NSH_CMDOPT_HEXDUMP is not set
+# CONFIG_NSH_DISABLE_DATE is not set
+# CONFIG_NSH_DISABLE_LOSMART is not set
+# CONFIG_RP2040_UART0 is not set
+CONFIG_ADC=y
+CONFIG_ADC_ADS7046=y
+CONFIG_ANALOG=y
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="raspberrypi-pico"
+CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
+CONFIG_ARCH_CHIP="rp2040"
+CONFIG_ARCH_CHIP_RP2040=y
+CONFIG_ARCH_RAMVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_BOARDCTL_RESET=y
+CONFIG_BOARD_LOOPSPERMSEC=10450
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_CONSOLE=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_ADS7046=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_NSH_USBCONSOLE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_SPI1=y
+CONFIG_RP2040_SPI1_CS_GPIO=13
+CONFIG_RP2040_SPI1_RX_GPIO=12
+CONFIG_RP2040_SPI=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y

Reply via email to