mirror of
https://github.com/apache/nuttx.git
synced 2026-08-01 20:28:58 +00:00
arch/arm/rtl8721dx: add shared Ameba GPIO driver.
Add a board-agnostic GPIO driver for Realtek Ameba chips, exposing pins
through the NuttX GPIO (ioexpander) upper half at /dev/gpioN.
- arch/arm/src/common/ameba/ameba_gpio.{c,h}: the shared driver, sitting
directly on the SDK fwlib register layer. The fwlib GPIO API it calls
resolves at link time from the on-chip ROM symbol table, except
GPIO_INTStatusGet/ClearEdge which are not in ROM and are compiled in
from fwlib ram_common/ameba_gpio.c (that object also carries GPIO_Init,
harmlessly overriding the equivalent ROM copy). Pin interrupts are
dispatched NuttX-natively: the port's NVIC vector is owned by NuttX
via irq_attach, and the ISR reads and clears status through the fwlib
GPIO_INTStatus* helpers.
- The driver keeps nothing IC-specific: the port count, the per-port
NVIC vectors and the RCC gate bits come from a per-chip
<ameba_gpio_chip.h> resolved on the include path, so bringing up a new
Ameba chip only adds that header, not a change to the shared driver.
- arch/arm/src/common/ameba/Kconfig: a shared "Ameba Peripheral Support"
menu with the AMEBA_GPIO option, sourced by each Ameba chip's Kconfig so
it is reused across ICs (RTL8721Dx, RTL8720F, ...).
- arch/arm/src/rtl8721dx: provide ameba_gpio_chip.h, wire the driver into
both the Make/Kconfig and CMake builds, and compile the fwlib
ameba_gpio.c register layer into libameba_fwlib for the RTL8721Dx.
- boards/arm/rtl8721dx/pke8721daf: board pin table (rtl8721dx_gpio.c),
bring-up registration, and a standalone gpio defconfig.
- Documentation: describe the gpio configuration and pin encoding.
tools/nxstyle: whitelist the Ameba "GPIO_" SDK ROM symbol prefix (alongside
the existing FLASH_/IPC_/... Ameba prefixes) so the vendor GPIO API's mixed-case
identifiers do not trip nxstyle, matching how the other Ameba SDK prefixes are
handled.
Assisted-by: Claude Code:claude-opus-4-8
Signed-off-by: dechao_gong <dechao_gong@realsil.com.cn>
This commit is contained in:
parent
099aa3425f
commit
e2ff8be900
16 changed files with 1004 additions and 0 deletions
|
|
@ -33,6 +33,8 @@ Supported in this NuttX port:
|
|||
partition), backing the Wi-Fi key-value store
|
||||
* Wi-Fi station and SoftAP through the ``wapi`` tool
|
||||
* DHCP client (STA) and DHCP server (SoftAP)
|
||||
* GPIO pins exposed as ``/dev/gpioN`` character devices (input, output and
|
||||
interrupt), driven directly on the SDK fwlib register layer
|
||||
|
||||
Buttons and LEDs
|
||||
================
|
||||
|
|
@ -58,6 +60,24 @@ The console is the LOG-UART at 1500000 8N1 (the rate is configured by the
|
|||
bootloader and inherited by NuttX). The Wi-Fi examples below are available from
|
||||
this configuration.
|
||||
|
||||
gpio
|
||||
----
|
||||
|
||||
Minimal NSH with the GPIO driver and the ``gpio`` example enabled (no Wi-Fi).
|
||||
The board registers three pins from its pin table (see
|
||||
``boards/arm/rtl8721dx/pke8721daf/src/rtl8721dx_gpio.c``): an output at
|
||||
``/dev/gpio0``, an input at ``/dev/gpio1`` and an interrupt pin at
|
||||
``/dev/gpio2``. Edit that table to match a board's wiring. Exercise them with
|
||||
the example::
|
||||
|
||||
nsh> gpio -o 1 /dev/gpio0 # drive the output high
|
||||
nsh> gpio /dev/gpio1 # read the input
|
||||
nsh> gpio -w 1 /dev/gpio2 # wait for a rising-edge interrupt
|
||||
|
||||
Pins are encoded with the ``AMEBA_PA()`` / ``AMEBA_PB()`` helpers from
|
||||
``arch/arm/src/common/ameba/ameba_gpio.h`` (port A/B, pin 0-31), matching the
|
||||
Ameba SDK ``PinName`` layout.
|
||||
|
||||
Wi-Fi
|
||||
=====
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue