diff --git a/.circleci/config2.yml b/.circleci/config2.yml
index e6ae87e77f..c3bf2a2706 100644
--- a/.circleci/config2.yml
+++ b/.circleci/config2.yml
@@ -16,7 +16,7 @@ commands:
"arm-gcc": "https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v13.2.1-1.1/xpack-arm-none-eabi-gcc-13.2.1-1.1-linux-x64.tar.gz",
"msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2",
"riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz",
- "rx-gcc": "https://llvm-gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run",
+ "rx-gcc": "https://github.com/hathach/rx_device/releases/download/0.0.1/gcc-8.3.0.202411-GNURX-ELF.run",
"arm-iar": "https://updates.iar.com/FileStore/STANDARD/001/003/322/cxarm-9.60.3.deb"
}'
toolchain_url=$(echo $TOOLCHAIN_JSON | jq -r '.["<< parameters.toolchain >>"]')
diff --git a/.github/actions/setup_toolchain/action.yml b/.github/actions/setup_toolchain/action.yml
index 8406a812d7..484001cda4 100644
--- a/.github/actions/setup_toolchain/action.yml
+++ b/.github/actions/setup_toolchain/action.yml
@@ -41,7 +41,7 @@ runs:
"arm-clang": "https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-19.1.1/LLVM-ET-Arm-19.1.1-Linux-x86_64.tar.xz",
"msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2",
"riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz",
- "rx-gcc": "http://gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run"
+ "rx-gcc": "https://github.com/hathach/rx_device/releases/download/0.0.1/gcc-8.3.0.202411-GNURX-ELF.run"
}'
TOOLCHAIN_URL=$(echo $TOOLCHAIN_JSON | jq -r '.["${{ inputs.toolchain }}"]')
echo "toolchain_url=$TOOLCHAIN_URL"
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 530484079e..ed0efd66e8 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -33,6 +33,8 @@ jobs:
- name: Build Fuzzer
run: |
+ sudo apt install libc++-dev libc++abi-dev
+ clang --version
export CC=clang
export CXX=clang++
fuzz_harness=$(ls -d test/fuzz/device/*/)
diff --git a/.gitignore b/.gitignore
index 309d7466af..010b5c9ed9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,20 @@
html
latex
+*.a
*.d
*.o
*.P
-*.map
*.axf
*.bin
-*.jlink
-*.emSession
*.elf
+*.env
*.ind
-.env
+*.log
+*.map
+*.obj
+*.jlink
+*.emSession
+*.ninja*
.settings/
.vscode/
.gdb_history
diff --git a/.idea/cmake.xml b/.idea/cmake.xml
index 5af6d77224..e4c189251c 100644
--- a/.idea/cmake.xml
+++ b/.idea/cmake.xml
@@ -118,10 +118,13 @@
+
-
-
+
+
+
+
diff --git a/README.rst b/README.rst
index db36cad3b2..e4ad91e473 100644
--- a/README.rst
+++ b/README.rst
@@ -43,12 +43,12 @@ Getting started
See the `online documentation `_ for information about using TinyUSB and how it is implemented.
+Check out `Getting Started`_ guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the `cdc_msc` example. There is a handful of `Supported Boards`_ that should work out of the box.
+
We use `GitHub Discussions `_ as our forum. It is a great place to ask questions and advice from the community or to discuss your TinyUSB-based projects.
For bugs and feature requests, please `raise an issue `_ and follow the templates there.
-Check out `Getting Started`_ guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the `cdc_msc` example.
-
See `Porting`_ guide for adding support for new MCUs and boards.
Device Stack
@@ -82,8 +82,8 @@ Host Stack
Similar to the Device Stack, if you have a special requirement, `usbh_app_driver_get_cb()` can be used to write your own class driver without modifying the stack.
-TypeC PD Stack
-==============
+Power Delivery Stack
+====================
- Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)
- Super early stage, only for testing purpose
@@ -102,100 +102,145 @@ TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR)
Supported CPUs
==============
-Following CPUs are supported, check out `Supported Devices`_ for comprehensive list of driver, features for each CPU.
-
-+--------------+------------------------------------------------------------+
-| Manufacturer | Family |
-+==============+============================================================+
-| Allwinner | F1C100s/F1C200s |
-+--------------+------------------------------------------------------------+
-| Analog | max32: 650, 666, 690. max78002 |
-| | |
-| | max3421e (spi host) |
-+--------------+------------------------------------------------------------+
-| Brigetek | FT90x |
-+--------------+------------------------------------------------------------+
-| Broadcom | BCM2711, BCM2837 |
-+--------------+------------------------------------------------------------+
-| Dialog | DA1469x |
-+--------------+------------------------------------------------------------+
-| Espressif | ESP32 S2, S3 |
-+--------------+------------------------------------------------------------+
-| GigaDevice | GD32VF103 |
-+--------------+------------------------------------------------------------+
-| Infineon | XMC4500 |
-+--------------+------------------------------------------------------------+
-| | SAM: D11, D21, D51, E5x, G55, L2x, E7x, S7x, V7x |
-| MicroChip | |
-| | PIC: 24, 32mm, 32mk, 32mx, 32mz, dsPIC33 |
-+--------------+------------------------------------------------------------+
-| Mind Montion | mm32 |
-+--------------+------------------------------------------------------------+
-| NordicSemi | nRF52833, nRF52840, nRF5340 |
-+--------------+------------------------------------------------------------+
-| Nuvoton | NUC 120, 121, 125, 126, 505 |
-+--------------+------------------------------------------------------------+
-| NXP | iMXRT: RT10xx, RT11xx |
-| | |
-| | Kinetis: KL, K32L2 |
-| | |
-| | LPC: 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55 |
-| | |
-| | MCX: A15, N9 |
-+--------------+------------------------------------------------------------+
-| Raspberry Pi | RP2040, RP2350 |
-+--------------+-----+------------------------------------------------------+
-| Renesas | RA: 4M1, 4M3, 6M1, 6M5 |
-| | |
-| | RX: 63N, 65N, 72N |
-+--------------+-----+------------------------------------------------------+
-| Silabs | EFM32GG12 |
-+--------------+------------------------------------------------------------+
-| Sony | CXD56 |
-+--------------+------------------------------------------------------------+
-| ST STM32 | C0, F0, F1, F2, F3, F4, F7, G0, G4, H5, H7, |
-| | |
-| | L0, L1, L4, L4+, L5, U5, WB |
-+--------------+------------------------------------------------------------+
-| TI | MSP430, MSP432E4, TM4C123 |
-+--------------+------------------------------------------------------------+
-| ValentyUSB | eptri |
-+--------------+------------------------------------------------------------+
-| WCH | CH32F: F20x |
-| | |
-| | CH32V: V20x, V307 |
-+--------------+------------------------------------------------------------+
-
-License
-=======
-
-All TinyUSB sources in the ``src`` folder are licensed under MIT
-license, the `Full license is here `__. However, each file can be
-individually licensed especially those in ``lib`` and ``hw/mcu`` folder.
-Please make sure you understand all the license term for files you use
-in your project.
-
-Docs
-====
-
-- Info
-
- - `Uses`_
- - `Changelog`_
- - `Contributors`_
-
-- `Reference`_
-
- - `Supported Devices`_
- - `Getting Started`_
- - `Dependencies`_
- - `Concurrency`_
-
-- `Contributing`_
-
- - `Code of Conduct`_
- - `Structure`_
- - `Porting`_
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Manufacturer | Family | Device | Host | Highspeed | Driver | Note |
++==============+=============================+========+======+===========+========================+===================+
+| Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | MAX32 650, 666, 690, | ✔ | | ✔ | musb | 1-dir ep |
+| | MAX78002 | | | | | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Brigetek | FT90x | ✔ | | ✔ | ft9xx | 1-dir ep |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Espressif | S2, S3 | ✔ | ✔ | ✖ | dwc2 or esp32sx | |
+| ESP32 +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | P4 | ✔ | ✔ | ✔ | dwc2 | |
++--------------+----+------------------------+--------+------+-----------+------------------------+-------------------+
+| GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Infineon | XMC4500 | ✔ | ✔ | ✖ | dwc2 | |
++--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| MicroChip | SAM | D11, D21, L21, L22 | ✔ | | ✖ | samd | |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | D51, E5x | ✔ | | ✖ | samd | |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | G55 | ✔ | | ✖ | samg | 1-dir ep |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | 1-dir ep |
+| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| | PIC | 24 | ✔ | | | pic | ci_fs variant |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | dsPIC33 | ✔ | | | pic | ci_fs variant |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | 32mz | ✔ | | | pic32mz | musb variant |
++--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| Mind Montion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant |
++--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| NordicSemi | nRF 52833, 52840, 5340 | ✔ | ✖ | ✖ | nrf5x | only ep8 is ISO |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | NUC121/NUC125 | ✔ | ✖ | ✖ | nuc121 | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | NUC126 | ✔ | ✖ | ✖ | nuc121 | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | NUC505 | ✔ | | ✔ | nuc505 | |
++--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
+| NXP | iMXRT | RT 10xx, 11xx | ✔ | ✔ | ✔ | ci_hs | |
+| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
+| | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | |
+| | +-------------------+--------+------+-----------+------------------------+-------------------+
+| | | K32L2 | ✔ | | ✖ | khci | ci_fs variant |
+| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
+| | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | |
+| | +-------------------+--------+------+-----------+------------------------+-------------------+
+| | | 17, 40 | ✔ | ⚠ | ✖ | lpc17_40 | |
+| | +-------------------+--------+------+-----------+------------------------+-------------------+
+| | | 18, 43 | ✔ | ✔ | ✔ | ci_hs | |
+| | +-------------------+--------+------+-----------+------------------------+-------------------+
+| | | 51u | ✔ | ✖ | ✖ | lpc_ip3511 | |
+| | +-------------------+--------+------+-----------+------------------------+-------------------+
+| | | 54, 55 | ✔ | | ✔ | lpc_ip3511 | |
+| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
+| | MCX | N9, A15 | ✔ | | ✔ | ci_fs, ci_hs | |
++--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
+| Raspberry Pi | RP2040, RP2350 | ✔ | ✔ | ✖ | rp2040, pio_usb | |
++--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | |
+| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | |
+| | +-----------------------+--------+------+-----------+------------------------+-------------------+
+| | | 6M5 | ✔ | ✔ | ✔ | rusb2 | |
++--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
+| Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| ST STM32 | F0 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | F1 | 102, 103 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| | +------------------------+--------+------+-----------+------------------------+-------------------+
+| | | 105, 107 | ✔ | ✔ | ✖ | dwc2 | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | F2, F4, F7, H7 | ✔ | ✔ | ✔ | dwc2 | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | F3 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | C0, G0, H5 | ✔ | | ✖ | stm32_fsdev | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | G4 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | L0, L1 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | L4 | 4x2, 4x3 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| | +------------------------+--------+------+-----------+------------------------+-------------------+
+| | | 4x5, 4x6 | ✔ | ✔ | ✖ | dwc2 | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | L4+ | ✔ | ✔ | ✖ | dwc2 | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | L5 | ✔ | ✖ | ✖ | stm32_fsdev | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | U5 | 535, 545 | ✔ | | ✖ | stm32_fsdev | |
+| | +------------------------+--------+------+-----------+------------------------+-------------------+
+| | | 575, 585 | ✔ | ✔ | ✖ | dwc2 | |
+| | +------------------------+--------+------+-----------+------------------------+-------------------+
+| | | 59x,5Ax,5Fx,5Gx | ✔ | ✔ | ✔ | dwc2 | |
+| +----+------------------------+--------+------+-----------+------------------------+-------------------+
+| | WBx5 | ✔ | ✖ | ✖ | stm32_fsdev | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| TI | MSP430 | ✔ | ✖ | ✖ | msp430x5xx | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | MSP432E4 | ✔ | | ✖ | musb | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | TM4C123 | ✔ | | ✖ | musb | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+| WCH | CH32F20x | ✔ | | ✔ | ch32_usbhs | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | CH32V20x | ✔ | | ✖ | stm32_fsdev/ch32_usbfs | |
+| +-----------------------------+--------+------+-----------+------------------------+-------------------+
+| | CH32V307 | ✔ | | ✔ | ch32_usbfs/hs | |
++--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
+
+Table Legend
+------------
+
+========= =========================
+✔ Supported
+⚠ Partial support
+✖ Not supported by hardware
+\[empty\] Unknown
+========= =========================
+
.. |Build Status| image:: https://github.com/hathach/tinyusb/actions/workflows/build.yml/badge.svg
:target: https://github.com/hathach/tinyusb/actions
@@ -209,15 +254,12 @@ Docs
:target: https://opensource.org/licenses/MIT
-.. _Uses: docs/info/uses.rst
.. _Changelog: docs/info/changelog.rst
.. _Contributors: CONTRIBUTORS.rst
-.. _Reference: docs/reference/index.rst
-.. _Supported Devices: docs/reference/supported.rst
.. _Getting Started: docs/reference/getting_started.rst
+.. _Supported Boards: docs/reference/boards.rst
.. _Dependencies: docs/reference/dependencies.rst
.. _Concurrency: docs/reference/concurrency.rst
.. _Contributing: docs/contributing/index.rst
.. _Code of Conduct: CODE_OF_CONDUCT.rst
-.. _Structure: docs/contributing/structure.rst
.. _Porting: docs/contributing/porting.rst
diff --git a/docs/conf.py b/docs/conf.py
index af44b73391..4249d41f73 100755
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -5,13 +5,16 @@
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
+import re
+from pathlib import Path
+
# -- Path setup --------------------------------------------------------------
# -- Project information -----------------------------------------------------
project = 'TinyUSB'
-copyright = '2021, Ha Thach'
+copyright = '2024, Ha Thach'
author = 'Ha Thach'
@@ -40,3 +43,16 @@
}
todo_include_todos = True
+
+# pre-process path in README.rst
+def preprocess_readme():
+ """Modify figure paths in README.rst for Sphinx builds."""
+ src = Path(__file__).parent.parent / "README.rst"
+ tgt = Path(__file__).parent.parent / "README_processed.rst"
+ if src.exists():
+ content = src.read_text()
+ content = re.sub(r"docs/", r"", content)
+ content = re.sub(r".rst", r".html", content)
+ tgt.write_text(content)
+
+preprocess_readme()
diff --git a/docs/contributing/code_of_conduct.rst b/docs/contributing/code_of_conduct.rst
index b52bf14c56..fb1859c75d 120000
--- a/docs/contributing/code_of_conduct.rst
+++ b/docs/contributing/code_of_conduct.rst
@@ -1 +1 @@
-../../CODE_OF_CONDUCT.rst
\ No newline at end of file
+.. include:: ../../CODE_OF_CONDUCT.rst
\ No newline at end of file
diff --git a/docs/contributing/index.rst b/docs/contributing/index.rst
index 7ff79cb32f..78933a3ca5 100644
--- a/docs/contributing/index.rst
+++ b/docs/contributing/index.rst
@@ -19,5 +19,4 @@ Index
:maxdepth: 2
code_of_conduct
- structure
porting
diff --git a/docs/contributing/structure.rst b/docs/contributing/structure.rst
deleted file mode 100644
index e8c658850d..0000000000
--- a/docs/contributing/structure.rst
+++ /dev/null
@@ -1,59 +0,0 @@
-*********
-Structure
-*********
-
-Tree
-====
-
-::
-
- .
- ├── docs
- ├── examples
- ├── hw
- │ ├── bsp
- │ └── mcu
- ├── lib
- ├── src
- ├── test
- └── tools
-
-docs
-----
-
-Documentation
-
-examples
---------
-
-Sample with Makefile build support
-
-hw/bsp
-------
-
-Supported boards source files
-
-hw/mcu
-------
-
-Low level mcu core & peripheral drivers
-
-lib
----
-
-Sources from 3rd party such as freeRTOS, fatfs ...
-
-src
----
-
-All sources files for TinyUSB stack itself.
-
-test
-----
-
-Unit tests for the stack
-
-tools
------
-
-Files used internally
diff --git a/docs/index.rst b/docs/index.rst
index 2a032c51ec..c1c8e4d99c 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,12 +1,6 @@
:hide-toc:
-*********
-TinyUSB
-*********
-
-TinyUSB is an open-source cross-platform USB Host/Device stack for embedded systems,
-designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events being deferred and then handled in the non-ISR task function.
-
+.. include:: ../README_processed.rst
.. toctree::
:caption: Index
diff --git a/docs/info/changelog.rst b/docs/info/changelog.rst
index d11e1134a0..0a34c0842f 100644
--- a/docs/info/changelog.rst
+++ b/docs/info/changelog.rst
@@ -2,6 +2,59 @@
Changelog
*********
+0.18.0
+======
+
+General
+-------
+
+- New MCUs:
+
+ - Add esp32p4 OTG highspeed support
+ - Add stm32 u0, c0, h7rs
+
+- Better support dcache, make sure all usb-transferred buffer are cache line aligned and occupy full cache line
+- Build ARM IAR with CircleCI
+- Improve HIL with dual/host_info_to_device_cdc optional for pico/pico2, enable dwc2 dma test
+
+API Changes
+-----------
+
+- Change signature of ``tusb_init(rhport, tusb_rhport_init_t*)``, tusb_init(void) is now deprecated but still available for backward compatibility
+- Add new ``tusb_int_handler(rhport, in_isr)``
+- Add time-related APIs: ``tusb_time_millis_api()`` and ``tusb_time_delay_ms_api()`` for non-RTOS, required for some ports/configuration
+- New configuration macros:
+
+ - ``CFG_TUD/TUH_MEM_DCACHE_ENABLE`` enable data cache sync for endpoint buffer
+ - ``CFG_TUD/TUH_MEM_DCACHE_LINE_SIZE`` set cache line size
+ - ``CFG_TUD/TUH_DWC2_SLAVE_ENABLE`` enable dwc2 slave mode
+ - ``CFG_TUD/TUH_DWC2_DMA_ENABLE`` enable dwc2 dma mode
+
+Controller Driver (DCD & HCD)
+-----------------------------
+
+- DWC2
+ - Add DMA support for both device and host controller
+ - Add host driver support including: full/high speed, control/bulk/interrupt (CBI) transfer, split CBI i.e FS/LS attached via highspeed hub, hub support
+
+- RP2: implement dcd_edpt_iso_alloc() and dcd_edpt_iso_activate() for isochronous endpoint
+- iMXRT1170 support M4 core
+
+Device Stack
+------------
+
+- Vendor Fix class reset
+- NCM fix recursions in tud_network_recv_renew()
+- Audio fix align issue of _audiod_fct.alt_setting
+- UVC support format frame based
+- Change dcd_dcache_() return type from void to bool
+- HID add Usage Table for Physical Input Device Page (0x0F)
+
+Host Stack
+----------
+
+- Fix an duplicated attach issue which cause USBH Defer Attach until current enumeration complete message
+
0.17.0
======
diff --git a/docs/info/contributors.rst b/docs/info/contributors.rst
index b3748ccb56..35e0b05f5c 120000
--- a/docs/info/contributors.rst
+++ b/docs/info/contributors.rst
@@ -1 +1 @@
-../../CONTRIBUTORS.rst
\ No newline at end of file
+.. include:: ../../CONTRIBUTORS.rst
\ No newline at end of file
diff --git a/docs/info/index.rst b/docs/info/index.rst
index fa56512b6e..a636f37dc1 100644
--- a/docs/info/index.rst
+++ b/docs/info/index.rst
@@ -8,6 +8,5 @@ Index
.. toctree::
:maxdepth: 2
- uses
changelog
contributors
diff --git a/docs/info/uses.rst b/docs/info/uses.rst
deleted file mode 100644
index f67df49f83..0000000000
--- a/docs/info/uses.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-****
-Uses
-****
-
-TinyUSB is currently used by these other projects:
-
-- `Adafruit nRF52 Arduino `__
-- `Adafruit nRF52 Bootloader `__
-- `Adafruit SAMD Arduino `__
-- `CircuitPython `__
-- `Espressif IDF `__
-- `MicroPython `__
-- `mynewt `__
-- `openinput `__
-- `Raspberry Pi Pico SDK `__
-- `TinyUF2 Bootloader `__
-- `TinyUSB Arduino Library `__
diff --git a/docs/reference/boards.rst b/docs/reference/boards.rst
new file mode 100644
index 0000000000..4739467bcd
--- /dev/null
+++ b/docs/reference/boards.rst
@@ -0,0 +1,320 @@
+****************
+Supported Boards
+****************
+
+The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project.
+It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices
+
+- One LED : for status
+- One Button : to get input from user
+- One UART : optional for device, but required for host examples
+
+Following boards are supported
+
+Analog Devices
+--------------
+
+============= ================ ======== =========================================================================================================================== ======
+Board Name Family URL Note
+============= ================ ======== =========================================================================================================================== ======
+max32650evkit MAX32650 EVKIT max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650-evkit.html#eb-overview
+max32650fthr MAX32650 Feather max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650fthr.html
+max32651evkit MAX32651 EVKIT max32650 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32651-evkit.html
+max32666evkit MAX32666 EVKIT max32666 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666evkit.html
+max32666fthr MAX32666 Feather max32666 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666fthr.html
+apard32690 APARD32690-SL max32690 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/ad-apard32690-sl.html
+max32690evkit MAX32690 EVKIT max32690 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32690evkit.html
+max78002evkit MAX78002 EVKIT max78002 https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max78002evkit.html
+============= ================ ======== =========================================================================================================================== ======
+
+Bridgetek
+---------
+
+========= ========= ======== ===================================== ======
+Board Name Family URL Note
+========= ========= ======== ===================================== ======
+mm900evxb MM900EVxB brtmm90x https://brtchip.com/product/mm900ev1b
+========= ========= ======== ===================================== ======
+
+Espressif
+---------
+
+========================= ============================== ========= ======================================================================================================== ======
+Board Name Family URL Note
+========================= ============================== ========= ======================================================================================================== ======
+adafruit_feather_esp32_v2 Adafruit Feather ESP32 v2 espressif https://www.adafruit.com/product/5400
+adafruit_feather_esp32s2 Adafruit Feather ESP32S2 espressif https://www.adafruit.com/product/5000
+adafruit_feather_esp32s3 Adafruit Feather ESP32S3 espressif https://www.adafruit.com/product/5323
+adafruit_magtag_29gray Adafruit MagTag 2.9" Grayscale espressif https://www.adafruit.com/product/4800
+adafruit_metro_esp32s2 Adafruit Metro ESP32-S2 espressif https://www.adafruit.com/product/4775
+espressif_addax_1 Espresif Addax-1 espressif n/a
+espressif_c3_devkitc Espresif C3 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitc-02/index.html
+espressif_c6_devkitc Espresif C6 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html
+espressif_kaluga_1 Espresif Kaluga 1 espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-kaluga-1/index.html
+espressif_p4_function_ev Espresif P4 Function EV espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html
+espressif_s2_devkitc Espresif S2 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-devkitc-1/index.html
+espressif_s3_devkitc Espresif S3 DevKitC espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/index.html
+espressif_s3_devkitm Espresif S3 DevKitM espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitm-1/index.html
+espressif_saola_1 Espresif S2 Saola 1 espressif https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-saola-1/index.html
+========================= ============================== ========= ======================================================================================================== ======
+
+GigaDevice
+----------
+
+================== ================== ========= ============================= ======
+Board Name Family URL Note
+================== ================== ========= ============================= ======
+sipeed_longan_nano Sipeed Longan Nano gd32vf103 https://longan.sipeed.com/en/
+================== ================== ========= ============================= ======
+
+Infineon
+--------
+
+============= ================= ======== ============================================================================= ======
+Board Name Family URL Note
+============= ================= ======== ============================================================================= ======
+xmc4500_relax XMC4500 relax kit xmc4000 https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc45_relax_v1/
+xmc4700_relax XMC4700 relax kit xmc4000 https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc47_relax_v1/
+============= ================= ======== ============================================================================= ======
+
+Microchip
+---------
+
+========================= =================================== ========== ================================================================================= ======
+Board Name Family URL Note
+========================= =================================== ========== ================================================================================= ======
+olimex_emz64 Olimex PIC32-EMZ64 pic32mz https://www.olimex.com/Products/PIC/Development/PIC32-EMZ64/open-source-hardware
+olimex_hmz144 Olimex PIC32-HMZ144 pic32mz https://www.olimex.com/Products/PIC/Development/PIC32-HMZ144/open-source-hardware
+cynthion_d11 Great Scott Gadgets Cynthion samd11 https://greatscottgadgets.com/cynthion/
+samd11_xplained SAMD11 Xplained Pro samd11 https://www.microchip.com/en-us/development-tool/ATSAMD11-XPRO
+atsamd21_xpro SAMD21 Xplained Pro samd21 https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO
+circuitplayground_express Adafruit Circuit Playground Express samd21 https://www.adafruit.com/product/3333
+curiosity_nano SAMD21 Curiosty Nano samd21 https://www.microchip.com/en-us/development-tool/dm320119
+cynthion_d21 Great Scott Gadgets Cynthion samd21 https://greatscottgadgets.com/cynthion/
+feather_m0_express Adafruit Feather M0 Express samd21 https://www.adafruit.com/product/3403
+itsybitsy_m0 Adafruit ItsyBitsy M0 samd21 https://www.adafruit.com/product/3727
+metro_m0_express Adafruit Metro M0 Express samd21 https://www.adafruit.com/product/3505
+qtpy Adafruit QT Py samd21 https://www.adafruit.com/product/4600
+seeeduino_xiao Seeeduino XIAO samd21 https://wiki.seeedstudio.com/Seeeduino-XIAO/
+sparkfun_samd21_mini_usb SparkFun SAMD21 Mini samd21 https://www.sparkfun.com/products/13664
+trinket_m0 Adafruit Trinket M0 samd21 https://www.adafruit.com/product/3500
+d5035_01 D5035-01 samd5x_e5x https://github.com/RudolphRiedel/USB_CAN-FD
+feather_m4_express Adafruit Feather M4 Express samd5x_e5x https://www.adafruit.com/product/3857
+itsybitsy_m4 Adafruit ItsyBitsy M4 samd5x_e5x https://www.adafruit.com/product/3800
+metro_m4_express Adafruit Metro M4 Express samd5x_e5x https://www.adafruit.com/product/3382
+pybadge Adafruit PyBadge samd5x_e5x https://www.adafruit.com/product/4200
+pyportal Adafruit PyPortal samd5x_e5x https://www.adafruit.com/product/4116
+same54_xplained SAME54 Xplained Pro samd5x_e5x https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAME54-XPRO
+samg55_xplained SAMG55 Xplained Pro samg https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMG55-XPRO
+atsaml21_xpro SAML21 Xplained Pro saml2x https://www.microchip.com/en-us/development-tool/atsaml21-xpro-b
+saml22_feather SAML22 Feather saml2x https://github.com/joeycastillo/Feather-Projects/tree/main/SAML22%20Feather
+sensorwatch_m0 SensorWatch saml2x https://github.com/joeycastillo/Sensor-Watch
+========================= =================================== ========== ================================================================================= ======
+
+MindMotion
+----------
+
+===================== ====================================== ======== =============================================================================================== ======
+Board Name Family URL Note
+===================== ====================================== ======== =============================================================================================== ======
+mm32f327x_mb39 MM32F3273G9P MB-039 mm32 https://www.mindmotion.com.cn/support/development_tools/evaluation_boards/evboard/mm32f3273g9p/
+mm32f327x_pitaya_lite DshanMCU Pitaya Lite with MM32F3273G8P mm32 https://gitee.com/weidongshan/DshanMCU-Pitaya-c
+===================== ====================================== ======== =============================================================================================== ======
+
+NXP
+---
+
+================== ========================================= ============= ========================================================================================================================================================================= ======
+Board Name Family URL Note
+================== ========================================= ============= ========================================================================================================================================================================= ======
+metro_m7_1011 Adafruit Metro M7 1011 imxrt https://www.adafruit.com/product/5600
+metro_m7_1011_sd Adafruit Metro M7 1011 SD imxrt https://www.adafruit.com/product/5600
+mimxrt1010_evk i.MX RT1010 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1010-evaluation-kit:MIMXRT1010-EVK
+mimxrt1015_evk i.MX RT1015 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1015-EVK
+mimxrt1020_evk i.MX RT1020 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1020-EVK
+mimxrt1024_evk i.MX RT1024 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1024-evaluation-kit:MIMXRT1024-EVK
+mimxrt1050_evkb i.MX RT1050 Evaluation Kit revB imxrt https://www.nxp.com/part/IMXRT1050-EVKB
+mimxrt1060_evk i.MX RT1060 Evaluation Kit revB imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1060-EVKB
+mimxrt1064_evk i.MX RT1064 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1064-EVK
+mimxrt1170_evkb i.MX RT1070 Evaluation Kit imxrt https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1170-evaluation-kit:MIMXRT1170-EVKB
+teensy_40 Teensy 4.0 imxrt https://www.pjrc.com/store/teensy40.html
+teensy_41 Teensy 4.1 imxrt https://www.pjrc.com/store/teensy41.html
+frdm_k64f Freedom K64F kinetis_k https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:FRDM-K64F
+teensy_35 Teensy 3.5 kinetis_k https://www.pjrc.com/store/teensy35.html
+frdm_k32l2a4s Freedom K32L2A4S kinetis_k32l2 https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-K32L2A4S
+frdm_k32l2b Freedom K32L2B3 kinetis_k32l2 https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3
+kuiic Kuiic kinetis_k32l2 https://github.com/nxf58843/kuiic
+frdm_kl25z fomu kinetis_kl https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z
+lpcxpresso11u37 LPCXpresso11U37 lpc11 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13074
+lpcxpresso11u68 LPCXpresso11U68 lpc11 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13058
+lpcxpresso1347 LPCXpresso1347 lpc13 https://www.nxp.com/products/no-longer-manufactured/lpcxpresso-board-for-lpc1347:OM13045
+lpcxpresso1549 LPCXpresso1549 lpc15 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13056
+lpcxpresso1769 LPCXpresso1769 lpc17 https://www.nxp.com/design/design-center/development-boards-and-designs/OM13000
+mbed1768 mbed 1768 lpc17 https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1700-arm-cortex-m3/arm-mbed-lpc1768-board:OM11043
+lpcxpresso18s37 LPCXpresso18s37 lpc18 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso18s37-development-board:OM13076
+mcb1800 Keil MCB1800 lpc18 https://www.keil.com/arm/mcb1800/
+ea4088_quickstart Embedded Artists LPC4088 QuickStart Board lpc40 https://www.embeddedartists.com/products/lpc4088-quickstart-board/
+ea4357 Embedded Artists LPC4357 Development Kit lpc43 https://www.embeddedartists.com/products/lpc4357-developers-kit/
+lpcxpresso43s67 LPCXpresso43S67 lpc43 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso43s67-development-board:OM13084
+lpcxpresso51u68 LPCXpresso51u68 lpc51 https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpcxpresso51u68-for-the-lpc51u68-mcus:OM40005
+lpcxpresso54114 LPCXpresso54114 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54114-board:OM13089
+lpcxpresso54608 LPCXpresso54608 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-development-board-for-lpc5460x-mcus:OM13092
+lpcxpresso54628 LPCXpresso54628 lpc54 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54628-development-board:OM13098
+double_m33_express Double M33 Express lpc55 https://www.crowdsupply.com/steiert-solutions/double-m33-express
+lpcxpresso55s28 LPCXpresso55s28 lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s28-development-board:LPC55S28-EVK
+lpcxpresso55s69 LPCXpresso55s69 lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK
+mcu_link MCU Link lpc55 https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK
+frdm_mcxa153 Freedom MCXA153 mcx https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXA153
+frdm_mcxn947 Freedom MCXN947 mcx https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXN947
+mcxn947brk MCXN947 Breakout mcx n/a
+================== ========================================= ============= ========================================================================================================================================================================= ======
+
+Nordic Semiconductor
+--------------------
+
+=========================== ===================================== ======== ============================================================================== ======
+Board Name Family URL Note
+=========================== ===================================== ======== ============================================================================== ======
+adafruit_clue Adafruit CLUE nrf https://www.adafruit.com/product/4500
+arduino_nano33_ble Arduino Nano 33 BLE nrf https://store.arduino.cc/arduino-nano-33-ble
+circuitplayground_bluefruit Adafruit Circuit Playground Bluefruit nrf https://www.adafruit.com/product/4333
+feather_nrf52840_express Adafruit Feather nRF52840 Express nrf https://www.adafruit.com/product/4062
+feather_nrf52840_sense Adafruit Feather nRF52840 Sense nrf https://www.adafruit.com/product/4516
+itsybitsy_nrf52840 Adafruit ItsyBitsy nRF52840 Express nrf https://www.adafruit.com/product/4481
+pca10056 Nordic nRF52840DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK
+pca10059 Nordic nRF52840 Dongle nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle
+pca10095 Nordic nRF5340 DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK
+pca10100 Nordic nRF52833 DK nrf https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52833-DK
+=========================== ===================================== ======== ============================================================================== ======
+
+Raspberry Pi
+------------
+
+================= ================= ============== ========================================================== ======
+Board Name Family URL Note
+================= ================= ============== ========================================================== ======
+raspberrypi_zero Raspberry Pi Zero broadcom_32bit https://www.raspberrypi.org/products/raspberry-pi-zero/
+raspberrypi_cm4 Raspberry CM4 broadcom_64bit https://www.raspberrypi.org/products/compute-module-4
+raspberrypi_zero2 Raspberry Zero2 broadcom_64bit https://www.raspberrypi.org/products/raspberry-pi-zero-2-w
+================= ================= ============== ========================================================== ======
+
+Renesas
+-------
+
+============== =========================== ======== ================================================================================================================================================================ ======
+Board Name Family URL Note
+============== =========================== ======== ================================================================================================================================================================ ======
+da14695_dk_usb DA14695-00HQDEVKT-U da1469x https://www.renesas.com/en/products/wireless-connectivity/bluetooth-low-energy/da14695-00hqdevkt-u-smartbond-da14695-bluetooth-low-energy-52-usb-development-kit
+da1469x_dk_pro DA1469x Development Kit Pro da1469x https://lpccs-docs.renesas.com/um-b-090-da1469x_getting_started/DA1469x_The_hardware/DA1469x_The_hardware.html
+portenta_c33 Arduino Portenta C33 ra https://www.arduino.cc/pro/hardware-product-portenta-c33/
+ra2a1_ek RA2A1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra2a1-evaluation-kit-ra2a1-mcu-group
+ra4m1_ek RA4M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m1-evaluation-kit-ra4m1-mcu-group
+ra4m3_ek RA4M3 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m3-evaluation-kit-ra4m3-mcu-group
+ra6m1_ek RA6M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m1-evaluation-kit-ra6m1-mcu-group
+ra6m5_ek RA6M5 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m5-evaluation-kit-ra6m5-mcu-group
+ra8m1_ek RA8M1 EK ra https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra8m1-evaluation-kit-ra8m1-mcu-group
+uno_r4 Arduino UNO R4 ra https://store-usa.arduino.cc/pages/uno-r4
+============== =========================== ======== ================================================================================================================================================================ ======
+
+STMicroelectronics
+------------------
+
+=================== ================================= ======== ================================================================= ======
+Board Name Family URL Note
+=================== ================================= ======== ================================================================= ======
+stm32c071nucleo STM32C071 Nucleo stm32c0 https://www.st.com/en/evaluation-tools/nucleo-g071rb.html
+stm32f070rbnucleo STM32 F070 Nucleo stm32f0 https://www.st.com/en/evaluation-tools/nucleo-f070rb.html
+stm32f072disco STM32 F072 Discovery stm32f0 https://www.st.com/en/evaluation-tools/32f072bdiscovery.html
+stm32f072eval STM32 F072 Eval stm32f0 https://www.st.com/en/evaluation-tools/stm32072b-eval.html
+stm32f103_bluepill STM32 F103 Bluepill stm32f1 https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill
+stm32f103_mini_2 STM32 F103 Mini v2 stm32f1 https://stm32-base.org/boards/STM32F103RCT6-STM32-Mini-V2.0
+stm32f103ze_iar IAR STM32 F103ze starter kit stm32f1 n/a
+stm32f207nucleo STM32 F207 Nucleo stm32f2 https://www.st.com/en/evaluation-tools/nucleo-f207zg.html
+stm32f303disco STM32 F303 Discovery stm32f3 https://www.st.com/en/evaluation-tools/stm32f3discovery.html
+feather_stm32f405 Adafruit Feather STM32F405 stm32f4 https://www.adafruit.com/product/4382
+pyboardv11 Pyboard v1.1 stm32f4 https://www.adafruit.com/product/2390
+stm32f401blackpill STM32 F401 Blackpill stm32f4 https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2
+stm32f407blackvet STM32 F407 Blackvet stm32f4 https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0
+stm32f407disco STM32 F407 Discovery stm32f4 https://www.st.com/en/evaluation-tools/stm32f4discovery.html
+stm32f411blackpill STM32 F411 Blackpill stm32f4 https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0
+stm32f411disco STM32 F411 Discovery stm32f4 https://www.st.com/en/evaluation-tools/32f411ediscovery.html
+stm32f412disco STM32 F412 Discovery stm32f4 https://www.st.com/en/evaluation-tools/32f412gdiscovery.html
+stm32f412nucleo STM32 F412 Nucleo stm32f4 https://www.st.com/en/evaluation-tools/nucleo-f412zg.html
+stm32f439nucleo STM32 F439 Nucleo stm32f4 https://www.st.com/en/evaluation-tools/nucleo-f439zi.html
+stlinkv3mini Stlink-v3 mini stm32f7 https://www.st.com/en/development-tools/stlink-v3mini.html
+stm32f723disco STM32 F723 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f723ediscovery.html
+stm32f746disco STM32 F746 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f746gdiscovery.html
+stm32f746nucleo STM32 F746 Nucleo stm32f7 https://www.st.com/en/evaluation-tools/nucleo-f746zg.html
+stm32f767nucleo STM32 F767 Nucleo stm32f7 https://www.st.com/en/evaluation-tools/nucleo-f767zi.html
+stm32f769disco STM32 F769 Discovery stm32f7 https://www.st.com/en/evaluation-tools/32f769idiscovery.html
+stm32g0b1nucleo STM32 G0B1 Nucleo stm32g0 https://www.st.com/en/evaluation-tools/nucleo-g0b1re.html
+b_g474e_dpow1 STM32 B-G474E-DPOW1 Discovery kit stm32g4 https://www.st.com/en/evaluation-tools/b-g474e-dpow1.html
+stm32g474nucleo STM32 G474 Nucleo stm32g4 https://www.st.com/en/evaluation-tools/nucleo-g474re.html
+stm32g491nucleo STM32 G491 Nucleo stm32g4 https://www.st.com/en/evaluation-tools/nucleo-g491re.html
+stm32h503nucleo STM32 H503 Nucleo stm32h5 https://www.st.com/en/evaluation-tools/nucleo-h503rb.html
+stm32h563nucleo STM32 H563 Nucleo stm32h5 https://www.st.com/en/evaluation-tools/nucleo-h563zi.html
+stm32h573i_dk STM32 H573i Discovery stm32h5 https://www.st.com/en/evaluation-tools/stm32h573i-dk.html
+daisyseed Daisy Seed stm32h7 https://electro-smith.com/products/daisy-seed
+stm32h723nucleo STM32 H723 Nucleo stm32h7 https://www.st.com/en/evaluation-tools/nucleo-h723zg.html
+stm32h743eval STM32 H743 Eval stm32h7 https://www.st.com/en/evaluation-tools/stm32h743i-eval.html
+stm32h743nucleo STM32 H743 Nucleo stm32h7 https://www.st.com/en/evaluation-tools/nucleo-h743zi.html
+stm32h745disco STM32 H745 Discovery stm32h7 https://www.st.com/en/evaluation-tools/stm32h745i-disco.html
+stm32h750_weact STM32 H750 WeAct stm32h7 https://www.adafruit.com/product/5032
+stm32h750bdk STM32 H750b Discovery Kit stm32h7 https://www.st.com/en/evaluation-tools/stm32h750b-dk.html
+waveshare_openh743i Waveshare Open H743i stm32h7 https://www.waveshare.com/openh743i-c-standard.htm
+stm32l052dap52 STM32 L052 DAP stm32l0 n/a
+stm32l0538disco STM32 L0538 Discovery stm32l0 https://www.st.com/en/evaluation-tools/32l0538discovery.html
+stm32l412nucleo STM32 L412 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l412kb.html
+stm32l476disco STM32 L476 Disco stm32l4 https://www.st.com/en/evaluation-tools/32l476gdiscovery.html
+stm32l4p5nucleo STM32 L4P5 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l4p5zg.html
+stm32l4r5nucleo STM32 L4R5 Nucleo stm32l4 https://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html
+b_u585i_iot2a STM32 B-U585i IOT2A Discovery kit stm32u5 https://www.st.com/en/evaluation-tools/b-u585i-iot02a.html
+stm32u545nucleo STM32 U545 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html
+stm32u575eval STM32 U575 Eval stm32u5 https://www.st.com/en/evaluation-tools/stm32u575i-ev.html
+stm32u575nucleo STM32 U575 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u575zi-q.html
+stm32u5a5nucleo STM32 U5a5 Nucleo stm32u5 https://www.st.com/en/evaluation-tools/nucleo-u5a5zj-q.html
+stm32wb55nucleo STM32 P-NUCLEO-WB55 stm32wb https://www.st.com/en/evaluation-tools/p-nucleo-wb55.html
+=================== ================================= ======== ================================================================= ======
+
+Sunxi
+-----
+
+======= ================= ======== ========================================= ======
+Board Name Family URL Note
+======= ================= ======== ========================================= ======
+f1c100s Lctech Pi F1C200s f1c100s https://linux-sunxi.org/Lctech_Pi_F1C200s
+======= ================= ======== ========================================= ======
+
+Texas Instruments
+-----------------
+
+================= ===================== ======== ========================================= ======
+Board Name Family URL Note
+================= ===================== ======== ========================================= ======
+msp_exp430f5529lp MSP430F5529 LaunchPad msp430 https://www.ti.com/tool/MSP-EXP430F5529LP
+msp_exp432e401y MSP432E401Y LaunchPad msp432e4 https://www.ti.com/tool/MSP-EXP432E401Y
+ek_tm4c123gxl TM4C123G LaunchPad tm4c https://www.ti.com/tool/EK-TM4C123GXL
+================= ===================== ======== ========================================= ======
+
+Tomu
+----
+
+======= ====== ======== ========================= ======
+Board Name Family URL Note
+======= ====== ======== ========================= ======
+fomu fomu fomu https://tomu.im/fomu.html
+======= ====== ======== ========================= ======
+
+WCH
+---
+
+================ ================ ======== ===================================================================== ======
+Board Name Family URL Note
+================ ================ ======== ===================================================================== ======
+ch32f205r-r0 CH32F205r-r0 ch32f20x https://github.com/openwch/ch32f20x
+ch32v103r_r1_1v0 CH32V103R-R1-1v1 ch32v10x https://github.com/openwch/ch32v103/tree/main/SCHPCB/CH32V103R-R1-1v1
+ch32v203c_r0_1v0 CH32V203C-R0-1v0 ch32v20x https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
+ch32v203g_r0_1v0 CH32V203G-R0-1v0 ch32v20x https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
+nanoch32v203 nanoCH32V203 ch32v20x https://github.com/wuxx/nanoCH32V203
+ch32v307v_r1_1v0 CH32V307V-R1-1v0 ch32v307 https://github.com/openwch/ch32v307/tree/main/SCHPCB/CH32V307V-R1-1v0
+================ ================ ======== ===================================================================== ======
diff --git a/docs/reference/dependencies.rst b/docs/reference/dependencies.rst
index 65ee31f227..e124466da4 100644
--- a/docs/reference/dependencies.rst
+++ b/docs/reference/dependencies.rst
@@ -4,9 +4,9 @@ Dependencies
MCU low-level peripheral driver and external libraries for building TinyUSB examples
-======================================== ============================================================== ======================================== ==========================================================================================================================================================================================================================================================================================================================
+======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
Local Path Repo Commit Required by
-======================================== ============================================================== ======================================== ==========================================================================================================================================================================================================================================================================================================================
+======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
hw/mcu/allwinner https://github.com/hathach/allwinner_driver.git 8e5e89e8e132c0fd90e72d5422e5d3d68232b756 fc100s
hw/mcu/analog/max32 https://github.com/analogdevicesinc/msdk.git b20b398d3e5e2007594e54a74ba3d2a2e50ddd75 max32650 max32666 max32690 max78002
hw/mcu/bridgetek/ft9xx/ft90x-sdk https://github.com/BRTSG-FOSS/ft90x-sdk.git 91060164afe239fcb394122e8bf9eb24d3194eb1 brtmm90x
@@ -20,10 +20,11 @@ hw/mcu/nuvoton https://github.com/majbthrd/nuc_driver
hw/mcu/nxp/lpcopen https://github.com/hathach/nxp_lpcopen.git b41cf930e65c734d8ec6de04f1d57d46787c76ae lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43
hw/mcu/nxp/mcux-sdk https://github.com/hathach/mcux-sdk.git 144f1eb7ea8c06512e12f12b27383601c0272410 kinetis_k kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx imxrt
hw/mcu/raspberry_pi/Pico-PIO-USB https://github.com/sekigon-gonnoc/Pico-PIO-USB.git fe9133fc513b82cc3dc62c67cb51f2339cf29ef7 rp2040
-hw/mcu/renesas/fsp https://github.com/renesas/fsp.git d52e5a6a59b7c638da860c2bb309b6e78e752ff8 ra
+hw/mcu/renesas/fsp https://github.com/renesas/fsp.git edcc97d684b6f716728a60d7a6fea049d9870bd6 ra
hw/mcu/renesas/rx https://github.com/kkitayam/rx_device.git 706b4e0cf485605c32351e2f90f5698267996023 rx
hw/mcu/silabs/cmsis-dfp-efm32gg12b https://github.com/cmsis-packs/cmsis-dfp-efm32gg12b.git f1c31b7887669cb230b3ea63f9b56769078960bc efm32
hw/mcu/sony/cxd56/spresense-exported-sdk https://github.com/sonydevworld/spresense-exported-sdk.git 2ec2a1538362696118dc3fdf56f33dacaf8f4067 spresense
+hw/mcu/st/cmsis_device_c0 https://github.com/STMicroelectronics/cmsis_device_c0.git fb56b1b70c73b74eacda2a4bcc36886444364ab3 stm32c0
hw/mcu/st/cmsis_device_f0 https://github.com/STMicroelectronics/cmsis_device_f0.git 2fc25ee22264bc27034358be0bd400b893ef837e stm32f0
hw/mcu/st/cmsis_device_f1 https://github.com/STMicroelectronics/cmsis_device_f1.git 6601104a6397299b7304fd5bcd9a491f56cb23a6 stm32f1
hw/mcu/st/cmsis_device_f2 https://github.com/STMicroelectronics/cmsis_device_f2.git 182fcb3681ce116816feb41b7764f1b019ce796f stm32f2
@@ -40,6 +41,8 @@ hw/mcu/st/cmsis_device_l4 https://github.com/STMicroelectronics/
hw/mcu/st/cmsis_device_l5 https://github.com/STMicroelectronics/cmsis_device_l5.git d922865fc0326a102c26211c44b8e42f52c1e53d stm32l5
hw/mcu/st/cmsis_device_u5 https://github.com/STMicroelectronics/cmsis_device_u5.git 5ad9797c54ec3e55eff770fc9b3cd4a1aefc1309 stm32u5
hw/mcu/st/cmsis_device_wb https://github.com/STMicroelectronics/cmsis_device_wb.git 9c5d1920dd9fabbe2548e10561d63db829bb744f stm32wb
+hw/mcu/st/stm32-mfxstm32l152 https://github.com/STMicroelectronics/stm32-mfxstm32l152.git 7f4389efee9c6a655b55e5df3fceef5586b35f9b stm32h7
+hw/mcu/st/stm32c0xx_hal_driver https://github.com/STMicroelectronics/stm32c0xx_hal_driver.git 41253e2f1d7ae4a4d0c379cf63f5bcf71fcf8eb3 stm32c0
hw/mcu/st/stm32f0xx_hal_driver https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git 0e95cd88657030f640a11e690a8a5186c7712ea5 stm32f0
hw/mcu/st/stm32f1xx_hal_driver https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git 1dd9d3662fb7eb2a7f7d3bc0a4c1dc7537915a29 stm32f1
hw/mcu/st/stm32f2xx_hal_driver https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git c75ace9b908a9aca631193ebf2466963b8ea33d0 stm32f2
@@ -61,9 +64,10 @@ hw/mcu/wch/ch32f20x https://github.com/openwch/ch32f20x.gi
hw/mcu/wch/ch32v103 https://github.com/openwch/ch32v103.git 7578cae0b21f86dd053a1f781b2fc6ab99d0ec17 ch32v10x
hw/mcu/wch/ch32v20x https://github.com/openwch/ch32v20x.git c4c38f507e258a4e69b059ccc2dc27dde33cea1b ch32v20x
hw/mcu/wch/ch32v307 https://github.com/openwch/ch32v307.git 184f21b852cb95eed58e86e901837bc9fff68775 ch32v307
-lib/CMSIS_5 https://github.com/ARM-software/CMSIS_5.git 20285262657d1b482d132d20d755c8c330d55c1f imxrt kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx mm32 msp432e4 nrf ra saml2xlpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43stm32f0 stm32f1 stm32f2 stm32f3 stm32f4 stm32f7 stm32g0 stm32g4 stm32h5stm32h7 stm32l0 stm32l1 stm32l4 stm32l5 stm32u5 stm32wbsam3x samd11 samd21 samd51 samd5x_e5x same5x same7x saml2x samgtm4c
+lib/CMSIS_5 https://github.com/ARM-software/CMSIS_5.git 2b7495b8535bdcb306dac29b9ded4cfb679d7e5c imxrt kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx mm32 msp432e4 nrf saml2x lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43 stm32c0 stm32f0 stm32f1 stm32f2 stm32f3 stm32f4 stm32f7 stm32g0 stm32g4 stm32h5 stm32h7 stm32l0 stm32l1 stm32l4 stm32l5 stm32u5 stm32wb sam3x samd11 samd21 samd51 samd5x_e5x same5x same7x saml2x samg tm4c
+lib/CMSIS_6 https://github.com/ARM-software/CMSIS_6.git b0bbb0423b278ca632cfe1474eb227961d835fd2 ra
lib/FreeRTOS-Kernel https://github.com/FreeRTOS/FreeRTOS-Kernel.git cc0e0707c0c748713485b870bb980852b210877f all
lib/lwip https://github.com/lwip-tcpip/lwip.git 159e31b689577dbf69cf0683bbaffbd71fa5ee10 all
lib/sct_neopixel https://github.com/gsteiert/sct_neopixel.git e73e04ca63495672d955f9268e003cffe168fcd8 lpc55
tools/uf2 https://github.com/microsoft/uf2.git c594542b2faa01cc33a2b97c9fbebc38549df80a all
-======================================== ============================================================== ======================================== ==========================================================================================================================================================================================================================================================================================================================
+======================================== ============================================================== ======================================== ====================================================================================================================================================================================================================================================================================================================================
diff --git a/docs/reference/getting_started.rst b/docs/reference/getting_started.rst
index ac4ab63926..963420f7b9 100644
--- a/docs/reference/getting_started.rst
+++ b/docs/reference/getting_started.rst
@@ -10,7 +10,7 @@ It is relatively simple to incorporate tinyusb to your project
* Copy or ``git submodule`` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
* Add all the .c in the ``tinyusb/src`` folder to your project
* Add *your_project/tinyusb/src* to your include path. Also make sure your current include path also contains the configuration file tusb_config.h.
-* Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as CFG_TUSB_MCU, CFG_TUSB_OS since they are passed by IDE/compiler to maintain a unique configure for all boards).
+* Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as ``CFG_TUSB_MCU``, ``CFG_TUSB_OS`` since they are passed by IDE/compiler to maintain a unique configure for all boards).
* If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to implement all **tud descriptor** callbacks for the stack to work.
* Add tusb_init(rhport, role) call to your reset initialization code.
* Call ``tusb_int_handler(rhport, in_isr)`` in your USB IRQ Handler
@@ -20,8 +20,17 @@ It is relatively simple to incorporate tinyusb to your project
.. code-block::
int main(void) {
- your_init_code();
- tusb_init(0, TUSB_ROLE_DEVICE); // initialize device stack on roothub port 0
+ tusb_rhport_init_t dev_init = {
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(0, &dev_init); // initialize device stack on roothub port 0
+
+ tusb_rhport_init_t host_init = {
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(1, &host_init); // initialize host stack on roothub port 1
while(1) { // the mainloop
your_application_code();
@@ -30,10 +39,18 @@ It is relatively simple to incorporate tinyusb to your project
}
}
+ void USB0_IRQHandler(void) {
+ tusb_int_handler(0, true);
+ }
+
+ void USB1_IRQHandler(void) {
+ tusb_int_handler(1, true);
+ }
+
Examples
--------
-For your convenience, TinyUSB contains a handful of examples for both host and device with/without RTOS to quickly test the functionality as well as demonstrate how API() should be used. Most examples will work on most of `the supported boards `_. Firstly we need to ``git clone`` if not already
+For your convenience, TinyUSB contains a handful of examples for both host and device with/without RTOS to quickly test the functionality as well as demonstrate how API() should be used. Most examples will work on most of `the supported boards `_. Firstly we need to ``git clone`` if not already
.. code-block::
diff --git a/docs/reference/index.rst b/docs/reference/index.rst
index 9ecdf619bd..8ac3cf9240 100644
--- a/docs/reference/index.rst
+++ b/docs/reference/index.rst
@@ -1,85 +1,10 @@
-*********
-Reference
-*********
-
-.. figure:: ../assets/stack.svg
- :width: 1600px
- :alt: TinyUSB
-
-::
-
- .
- ├── docs # Documentation
- ├── examples # Examples with make and cmake build system
- ├── hw
- │ ├── bsp # Supported boards source files
- │ └── mcu # Low level mcu core & peripheral drivers
- ├── lib # Sources from 3rd party such as freeRTOS, fatfs ...
- ├── src # All sources files for TinyUSB stack itself.
- ├── test # Tests: unit test, fuzzing, hardware test
- └── tools # Files used internally
-
-
-Device Stack
-============
-
-Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:
-
-- Audio Class 2.0 (UAC2)
-- Bluetooth Host Controller Interface (BTH HCI)
-- Communication Device Class (CDC)
-- Device Firmware Update (DFU): DFU mode (WIP) and Runtime
-- Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
-- Mass Storage Class (MSC): with multiple LUNs
-- Musical Instrument Digital Interface (MIDI)
-- Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)
-- Test and Measurement Class (USBTMC)
-- Video class 1.5 (UVC): work in progress
-- Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
-- `WebUSB `__ with vendor-specific class
-
-If you have a special requirement, `usbd_app_driver_get_cb()` can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface `raspberrypi/pico-sdk#197 `_
-
-Host Stack
-==========
-
-- Human Interface Device (HID): Keyboard, Mouse, Generic
-- Mass Storage Class (MSC)
-- Communication Device Class: CDC-ACM
-- Vendor serial over USB: FTDI, CP210x
-- Hub with multiple-level support
-
-Similar to the Device Stack, if you have a special requirement, `usbh_app_driver_get_cb()` can be used to write your own class driver without modifying the stack.
-
-TypeC PD Stack
-==============
-
-- Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)
-- Super early stage, only for testing purpose
-- Only support STM32 G4
-
-OS Abstraction layer
-====================
-
-TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS's basic APIs. Following OSes are already supported out of the box.
-
-- **No OS**
-- **FreeRTOS**
-- `RT-Thread `_: `repo `_
-- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its `own repo `_
-
-License
-=======
-
-All TinyUSB sources in the `src` folder are licensed under MIT license. However, each file can be individually licensed especially those in `lib` and `hw/mcu` folder. Please make sure you understand all the license term for files you use in your project.
-
Index
=====
.. toctree::
:maxdepth: 2
- supported
getting_started
+ boards
dependencies
concurrency
diff --git a/docs/reference/supported.rst b/docs/reference/supported.rst
deleted file mode 100644
index cbd6c47866..0000000000
--- a/docs/reference/supported.rst
+++ /dev/null
@@ -1,442 +0,0 @@
-*****************
-Supported Devices
-*****************
-
-Supported MCUs
-==============
-
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Manufacturer | Family | Device | Host | Highspeed | Driver | Note |
-+==============+=============================+========+======+===========+========================+===================+
-| Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | MAX32 650, 666, 690, | ✔ | | ✔ | musb | 1-dir ep |
-| | MAX78002 | | | | | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Brigetek | FT90x | ✔ | | ✔ | ft9xx | 1-dir ep |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Espressif | S2, S3 | ✔ | ✔ | ✖ | dwc2 or esp32sx | |
-| ESP32 +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | P4 | ✔ | ✔ | ✔ | dwc2 | |
-+--------------+----+------------------------+--------+------+-----------+------------------------+-------------------+
-| GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Infineon | XMC4500 | ✔ | ✔ | ✖ | dwc2 | |
-+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| MicroChip | SAM | D11, D21, L21, L22 | ✔ | | ✖ | samd | |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | D51, E5x | ✔ | | ✖ | samd | |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | G55 | ✔ | | ✖ | samg | 1-dir ep |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | 1-dir ep |
-| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| | PIC | 24 | ✔ | | | pic | ci_fs variant |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | dsPIC33 | ✔ | | | pic | ci_fs variant |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | 32mz | ✔ | | | pic32mz | musb variant |
-+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| Mind Montion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant |
-+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| NordicSemi | nRF 52833, 52840, 5340 | ✔ | ✖ | ✖ | nrf5x | only ep8 is ISO |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | NUC121/NUC125 | ✔ | ✖ | ✖ | nuc121 | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | NUC126 | ✔ | ✖ | ✖ | nuc121 | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | NUC505 | ✔ | | ✔ | nuc505 | |
-+--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
-| NXP | iMXRT | RT 10xx, 11xx | ✔ | ✔ | ✔ | ci_hs | |
-| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
-| | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | |
-| | +-------------------+--------+------+-----------+------------------------+-------------------+
-| | | K32L2 | ✔ | | ✖ | khci | ci_fs variant |
-| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
-| | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | |
-| | +-------------------+--------+------+-----------+------------------------+-------------------+
-| | | 17, 40 | ✔ | ⚠ | ✖ | lpc17_40 | |
-| | +-------------------+--------+------+-----------+------------------------+-------------------+
-| | | 18, 43 | ✔ | ✔ | ✔ | ci_hs | |
-| | +-------------------+--------+------+-----------+------------------------+-------------------+
-| | | 51u | ✔ | ✖ | ✖ | lpc_ip3511 | |
-| | +-------------------+--------+------+-----------+------------------------+-------------------+
-| | | 54, 55 | ✔ | | ✔ | lpc_ip3511 | |
-| +---------+-------------------+--------+------+-----------+------------------------+-------------------+
-| | MCX | N9, A15 | ✔ | | ✔ | ci_fs, ci_hs | |
-+--------------+---------+-------------------+--------+------+-----------+------------------------+-------------------+
-| Raspberry Pi | RP2040, RP2350 | ✔ | ✔ | ✖ | rp2040, pio_usb | |
-+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | |
-| +-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | |
-| | +-----------------------+--------+------+-----------+------------------------+-------------------+
-| | | 6M5 | ✔ | ✔ | ✔ | rusb2 | |
-+--------------+-----+-----------------------+--------+------+-----------+------------------------+-------------------+
-| Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| ST STM32 | F0 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | F1 | 102, 103 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| | +------------------------+--------+------+-----------+------------------------+-------------------+
-| | | 105, 107 | ✔ | ✔ | ✖ | dwc2 | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | F2, F4, F7, H7 | ✔ | ✔ | ✔ | dwc2 | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | F3 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | C0, G0, H5 | ✔ | | ✖ | stm32_fsdev | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | G4 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | L0, L1 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | L4 | 4x2, 4x3 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| | +------------------------+--------+------+-----------+------------------------+-------------------+
-| | | 4x5, 4x6 | ✔ | ✔ | ✖ | dwc2 | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | L4+ | ✔ | ✔ | ✖ | dwc2 | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | L5 | ✔ | ✖ | ✖ | stm32_fsdev | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | U5 | 535, 545 | ✔ | | ✖ | stm32_fsdev | |
-| | +------------------------+--------+------+-----------+------------------------+-------------------+
-| | | 575, 585 | ✔ | ✔ | ✖ | dwc2 | |
-| | +------------------------+--------+------+-----------+------------------------+-------------------+
-| | | 59x,5Ax,5Fx,5Gx | ✔ | ✔ | ✔ | dwc2 | |
-| +----+------------------------+--------+------+-----------+------------------------+-------------------+
-| | WBx5 | ✔ | ✖ | ✖ | stm32_fsdev | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| TI | MSP430 | ✔ | ✖ | ✖ | msp430x5xx | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | MSP432E4 | ✔ | | ✖ | musb | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | TM4C123 | ✔ | | ✖ | musb | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-| WCH | CH32F20x | ✔ | | ✔ | ch32_usbhs | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | CH32V20x | ✔ | | ✖ | stm32_fsdev/ch32_usbfs | |
-| +-----------------------------+--------+------+-----------+------------------------+-------------------+
-| | CH32V307 | ✔ | | ✔ | ch32_usbfs/hs | |
-+--------------+-----------------------------+--------+------+-----------+------------------------+-------------------+
-
-
-Table Legend
-------------
-
-========= =========================
-✔ Supported
-⚠ Partial support
-✖ Not supported by hardware
-\[empty\] Unknown
-========= =========================
-
-Supported Boards
-================
-
-The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices
-
-- One LED : for status
-- One Button : to get input from user
-- One UART : optional for device, but required for host examples
-
-The following boards are supported (sorted alphabetically):
-
-Broadcom
---------
-
-- `Raspberry Pi CM4 `__
-
-Dialog DA146xx
---------------
-
-- `DA14695 Development Kit – USB `__
-- `DA1469x Development Kit – Pro `__
-
-Espressif ESP32-S2
-------------------
-
-- `Adafruit Feather ESP32-S2 `__
-- `Adafruit Magtag 2.9" E-Ink WiFi Display `__
-- `Adafruit Metro ESP32-S2 `__
-- `ESP32-S2-Kaluga-1 `__
-- `ESP32-S2-Saola-1 `__
-
-GigaDevice
-----------
-
-- `Sipeed Longan Nano `__
-
-Infineon
----------
-
-XMC4000
-^^^^^^^
-
-- `XMC4500 Relax (Lite) Kit `__
-
-MicroChip
----------
-
-SAMD11 & SAMD21
-^^^^^^^^^^^^^^^
-
-- `Adafruit Circuit Playground Express `__
-- `Adafruit Feather M0 Express `__
-- `Adafruit ItsyBitsy M0 Express `__
-- `Adafruit Metro M0 Express `__
-- `Great Scott Gadgets Cynthion `__
-- `Microchip SAMD11 Xplained Pro `__
-- `Microchip SAMD21 Xplained Pro `__
-- `Seeeduino Xiao `__
-
-SAMD51 & SAME54
-^^^^^^^^^^^^^^^
-
-- `Adafruit Feather M4 Express `__
-- `Adafruit ItsyBitsy M4 Express `__
-- `Adafruit PyBadge `__
-- `Adafruit PyPortal `__
-- `Adafruit Metro M4 Express `__
-- `D5035-01 `__
-- `Microchip SAME54 Xplained Pro `__
-
-SAME7x
-^^^^^^
-
-- `Microchip SAME70 Xplained `_
-- `QMTECH ATSAME70N19 `_
-
-SAMG
-^^^^
-
-- `Microchip SAMG55 Xplained Pro `__
-
-SAML2x
-^^^^^^
-
-- `SAML21 Xplaind Pro `__
-- `SAML22 Feather `__
-- `Sensor Watch `__
-
-Nordic nRF5x
-------------
-
-- `Adafruit Circuit Playground Bluefruit `__
-- `Adafruit CLUE `__
-- `Adafruit Feather nRF52840 Express `__
-- `Adafruit Feather nRF52840 Sense `__
-- `Adafruit ItsyBitsy nRF52840 Express `__
-- `Arduino Nano 33 BLE `__
-- `Arduino Nano 33 BLE Sense `__
-- `Maker Diary nRF52840 MDK Dongle `__
-- `Nordic nRF52840 Development Kit (aka pca10056) `__
-- `Nordic nRF52840 Dongle (aka pca10059) `__
-- `Nordic nRF52833 Development Kit (aka pca10100) `__
-- `Raytac MDBT50Q-RX Dongle `__
-
-Nuvoton
--------
-
-- NuTiny SDK NUC120
-- `NuTiny NUC121S `__
-- `NuTiny NUC125S `__
-- `NuTiny NUC126V `__
-- `NuTiny SDK NUC505Y `__
-
-NXP
----
-
-iMX RT
-^^^^^^
-
-- `MIMX RT1010 Evaluation Kit `__
-- `MIMX RT1015 Evaluation Kit `__
-- `MIMX RT1020 Evaluation Kit `__
-- `MIMX RT1050 Evaluation Kit `__
-- `MIMX RT1060 Evaluation Kit `__
-- `MIMX RT1064 Evaluation Kit `__
-- `Teensy 4.0 Development Board `__
-- `Teensy 4.1 Development Board `__
-
-Kinetis
-^^^^^^^
-
-- `Freedom FRDM-KL25Z `__
-- `Freedom FRDM-K32L2A4S `__
-- `Freedom FRDM-K32L2B3 `__
-- `KUIIC `__
-
-LPC 11-13-15
-^^^^^^^^^^^^
-
-- `LPCXpresso 11u37 `__
-- `LPCXpresso 11u68 `__
-- `LPCXpresso 1347 `__
-- `LPCXpresso 1549 `__
-
-LPC 17-40
-^^^^^^^^^
-
-- `ARM mbed LPC1768 `__
-- `Embedded Artists LPC4088 Quick Start board `__
-- `LPCXpresso 1769 `__
-
-LPC 18-43
-^^^^^^^^^
-
-- `Embedded Artists LPC4357 Developer Kit `__
-- `Keil MCB1800 Evaluation Board `__
-- `LPCXpresso18S37 Development Board `__
-
-LPC 51
-^^^^^^
-
-- `LPCXpresso 51U68 `__
-
-LPC 54
-^^^^^^
-
-- `LPCXpresso 54114 `__
-
-LPC55
-^^^^^
-
-- `Double M33 Express `__
-- `LPCXpresso 55s28 EVK `__
-- `LPCXpresso 55s69 EVK `__
-- `MCU-Link `__
-
-Renesas
--------
-
-RA
-^^
-
-- `Evaluation Kit for RA4M1 `__
-- `Evaluation Kit for RA4M3 `__
-
-RX
-^^
-
-- `GR-CITRUS `__
-- `Renesas RX65N Target Board `__
-
-Raspberry Pi RP2040
--------------------
-
-- `Adafruit Feather RP2040 `__
-- `Adafruit ItsyBitsy RP2040 `__
-- `Adafruit QT Py RP2040 `__
-- `Raspberry Pi Pico `__
-
-Silabs
-------
-
-- `EFM32GG12 Thunderboard Kit (SLTB009A) `__
-
-Sony
-----
-
-- `Sony Spresense CXD5602 `__
-
-ST STM32
---------
-
-F0
-^^
-- `STM32 F070rb Nucleo `__
-- `STM32 F072 Evaluation `__
-- `STM32 F072rb Discovery `__
-
-F1
-^^
-- `STM32 F103c8 Blue Pill `__
-- `STM32 F103rc Mini v2.0 `__
-
-F2
-^^
-- `STM32 F207zg Nucleo `__
-
-F3
-^^
-- `STM32 F303vc Discovery `__
-
-F4
-^^
-- `Adafruit Feather STM32F405 `__
-- `Micro Python PyBoard v1.1 `__
-- `STM32 F401cc Black Pill `__
-- `STM32 F407vg Discovery `__
-- `STM32 F411ce Black Pill `__
-- `STM32 F411ve Discovery `__
-- `STM32 F412zg Discovery `__
-- `STM32 F412zg Nucleo `__
-- `STM32 F439zi Nucleo `__
-
-F7
-^^
-
-- `STLink-V3 Mini `__
-- `STM32 F723e Discovery `__
-- `STM32 F746zg Nucleo `__
-- `STM32 F746g Discovery `__
-- `STM32 F767zi Nucleo `__
-- `STM32 F769i Discovery `__
-
-H7
-^^
-- `STM32 H743zi Nucleo `__
-- `STM32 H743i Evaluation `__
-- `STM32 H745i Discovery `__
-- `Waveshare OpenH743I-C `__
-
-G4
-^^
-- `STM32 G474RE Nucleo `__
-
-L0
-^^
-- `STM32 L035c8 Discovery `__
-
-L4
-^^
-- `STM32 L476vg Discovery `__
-- `STM32 L4P5zg Nucleo `__
-- `STM32 L4R5zi Nucleo `__
-
-WB
-^^
-- `STM32 WB55 Nucleo `__
-
-TI
---
-
-- `MSP430F5529 USB LaunchPad Evaluation Kit `__
-- `MSP-EXP432E401Y LaunchPad Evaluation Kit `__
-- `TM4C123GXL LaunchPad Evaluation Kit `__
-
-Tomu
-----
-
-- `Fomu `__
-
-WCH
----
-
-- `CH32V307V-R1-1v0 `__
-- `CH32F205R-R0-1v0 `__
diff --git a/examples/build_system/cmake/cpu/cortex-m85.cmake b/examples/build_system/cmake/cpu/cortex-m85.cmake
new file mode 100644
index 0000000000..30314acbca
--- /dev/null
+++ b/examples/build_system/cmake/cpu/cortex-m85.cmake
@@ -0,0 +1,25 @@
+if (TOOLCHAIN STREQUAL "gcc")
+ set(TOOLCHAIN_COMMON_FLAGS
+ -mthumb
+ -mcpu=cortex-m85
+ -mfloat-abi=hard
+ -mfpu=fpv5-d16
+ )
+ set(FREERTOS_PORT GCC_ARM_CM85_NTZ_NONSECURE CACHE INTERNAL "")
+
+elseif (TOOLCHAIN STREQUAL "clang")
+ set(TOOLCHAIN_COMMON_FLAGS
+ --target=arm-none-eabi
+ -mcpu=cortex-m85
+ -mfpu=fpv5-d16
+ )
+ set(FREERTOS_PORT GCC_ARM_CM85_NTZ_NONSECURE CACHE INTERNAL "")
+
+elseif (TOOLCHAIN STREQUAL "iar")
+ set(TOOLCHAIN_COMMON_FLAGS
+ --cpu cortex-m85
+ --fpu VFPv5_D16
+ )
+ set(FREERTOS_PORT IAR_ARM_CM85_NTZ_NONSECURE CACHE INTERNAL "")
+
+endif ()
diff --git a/examples/build_system/make/cpu/cortex-m85.mk b/examples/build_system/make/cpu/cortex-m85.mk
new file mode 100644
index 0000000000..75e8f3aaf6
--- /dev/null
+++ b/examples/build_system/make/cpu/cortex-m85.mk
@@ -0,0 +1,27 @@
+ifeq ($(TOOLCHAIN),gcc)
+ CFLAGS += \
+ -mthumb \
+ -mcpu=cortex-m85 \
+ -mfloat-abi=hard \
+ -mfpu=fpv5-d16 \
+
+else ifeq ($(TOOLCHAIN),clang)
+ CFLAGS += \
+ --target=arm-none-eabi \
+ -mcpu=cortex-m85 \
+ -mfpu=fpv5-d16 \
+
+else ifeq ($(TOOLCHAIN),iar)
+ CFLAGS += \
+ --cpu cortex-m85 \
+ --fpu VFPv5_D16 \
+
+ ASFLAGS += \
+ --cpu cortex-m85 \
+ --fpu VFPv5_D16 \
+
+else
+ $(error "TOOLCHAIN is not supported")
+endif
+
+FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM85_NTZ/non_secure
diff --git a/examples/device/audio_test_multi_rate/src/main.c b/examples/device/audio_test_multi_rate/src/main.c
index f9dcd1b8a4..8fa902a042 100644
--- a/examples/device/audio_test_multi_rate/src/main.c
+++ b/examples/device/audio_test_multi_rate/src/main.c
@@ -85,7 +85,7 @@ audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1];
// Audio test data
-CFG_TUSB_MEM_ALIGN uint8_t test_buffer_audio[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX];
+CFG_TUD_MEM_ALIGN uint8_t test_buffer_audio[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX];
uint16_t startVal = 0;
void led_blinking_task(void);
diff --git a/hw/bsp/broadcom_32bit/boards/raspberrypi_zero/board.h b/hw/bsp/broadcom_32bit/boards/raspberrypi_zero/board.h
index 84a1063467..40a9dd1987 100644
--- a/hw/bsp/broadcom_32bit/boards/raspberrypi_zero/board.h
+++ b/hw/bsp/broadcom_32bit/boards/raspberrypi_zero/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Raspberry Pi Zero
+ url: https://www.raspberrypi.org/products/raspberry-pi-zero/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/broadcom_32bit/family.c b/hw/bsp/broadcom_32bit/family.c
index 0062e2e839..f8f3b0b707 100644
--- a/hw/bsp/broadcom_32bit/family.c
+++ b/hw/bsp/broadcom_32bit/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Raspberry Pi
+*/
+
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/broadcom_32bit/family.cmake b/hw/bsp/broadcom_32bit/family.cmake
index 93e7d35455..09c32c7d4b 100644
--- a/hw/bsp/broadcom_32bit/family.cmake
+++ b/hw/bsp/broadcom_32bit/family.cmake
@@ -106,5 +106,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/broadcom_64bit/boards/raspberrypi_cm4/board.h b/hw/bsp/broadcom_64bit/boards/raspberrypi_cm4/board.h
index 84a1063467..cadad2b273 100644
--- a/hw/bsp/broadcom_64bit/boards/raspberrypi_cm4/board.h
+++ b/hw/bsp/broadcom_64bit/boards/raspberrypi_cm4/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Raspberry CM4
+ url: https://www.raspberrypi.org/products/compute-module-4
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/broadcom_64bit/boards/raspberrypi_zero2/board.h b/hw/bsp/broadcom_64bit/boards/raspberrypi_zero2/board.h
index 84a1063467..e6caa0294f 100644
--- a/hw/bsp/broadcom_64bit/boards/raspberrypi_zero2/board.h
+++ b/hw/bsp/broadcom_64bit/boards/raspberrypi_zero2/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Raspberry Zero2
+ url: https://www.raspberrypi.org/products/raspberry-pi-zero-2-w
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/broadcom_64bit/family.c b/hw/bsp/broadcom_64bit/family.c
index 0062e2e839..f8f3b0b707 100644
--- a/hw/bsp/broadcom_64bit/family.c
+++ b/hw/bsp/broadcom_64bit/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Raspberry Pi
+*/
+
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/broadcom_64bit/family.cmake b/hw/bsp/broadcom_64bit/family.cmake
index d790944bce..566daefb36 100644
--- a/hw/bsp/broadcom_64bit/family.cmake
+++ b/hw/bsp/broadcom_64bit/family.cmake
@@ -113,5 +113,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/brtmm90x/boards/mm900evxb/board.h b/hw/bsp/brtmm90x/boards/mm900evxb/board.h
index 7717791086..623033c2ce 100644
--- a/hw/bsp/brtmm90x/boards/mm900evxb/board.h
+++ b/hw/bsp/brtmm90x/boards/mm900evxb/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MM900EVxB
+ url: https://brtchip.com/product/mm900ev1b
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/brtmm90x/family.c b/hw/bsp/brtmm90x/family.c
index 4d81e7d52d..15ff4b8eed 100644
--- a/hw/bsp/brtmm90x/family.c
+++ b/hw/bsp/brtmm90x/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Bridgetek
+*/
+
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.h b/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.h
index d5849bddb7..b855804a95 100644
--- a/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.h
+++ b/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.h
@@ -22,6 +22,11 @@
* THE SOFTWARE.
*/
+/* metadata:
+ name: CH32F205r-r0
+ url: https://github.com/openwch/ch32f20x
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32f20x/family.c b/hw/bsp/ch32f20x/family.c
index 9717832d6d..7fef71d47a 100644
--- a/hw/bsp/ch32f20x/family.c
+++ b/hw/bsp/ch32f20x/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: WCH
+*/
+
#include "stdio.h"
#include "debug_uart.h"
diff --git a/hw/bsp/ch32v10x/boards/ch32v103r_r1_1v0/board.h b/hw/bsp/ch32v10x/boards/ch32v103r_r1_1v0/board.h
index 3b1187c3a7..1fde4244ca 100644
--- a/hw/bsp/ch32v10x/boards/ch32v103r_r1_1v0/board.h
+++ b/hw/bsp/ch32v10x/boards/ch32v103r_r1_1v0/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: CH32V103R-R1-1v1
+ url: https://github.com/openwch/ch32v103/tree/main/SCHPCB/CH32V103R-R1-1v1
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32v10x/family.c b/hw/bsp/ch32v10x/family.c
index 15f754e110..f25102494f 100644
--- a/hw/bsp/ch32v10x/family.c
+++ b/hw/bsp/ch32v10x/family.c
@@ -1,3 +1,7 @@
+/* metadata:
+ manufacturer: WCH
+*/
+
#include
// https://github.com/openwch/ch32v307/pull/90
diff --git a/hw/bsp/ch32v20x/boards/ch32v203c_r0_1v0/board.h b/hw/bsp/ch32v20x/boards/ch32v203c_r0_1v0/board.h
index 692cf11bf1..2569580887 100644
--- a/hw/bsp/ch32v20x/boards/ch32v203c_r0_1v0/board.h
+++ b/hw/bsp/ch32v20x/boards/ch32v203c_r0_1v0/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: CH32V203C-R0-1v0
+ url: https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32v20x/boards/ch32v203g_r0_1v0/board.h b/hw/bsp/ch32v20x/boards/ch32v203g_r0_1v0/board.h
index 783831edd6..827226d804 100644
--- a/hw/bsp/ch32v20x/boards/ch32v203g_r0_1v0/board.h
+++ b/hw/bsp/ch32v20x/boards/ch32v203g_r0_1v0/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: CH32V203G-R0-1v0
+ url: https://github.com/openwch/ch32v20x/tree/main/SCHPCB/CH32V203C-R0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32v20x/boards/nanoch32v203/board.h b/hw/bsp/ch32v20x/boards/nanoch32v203/board.h
index 64eaf931eb..f02fceced3 100644
--- a/hw/bsp/ch32v20x/boards/nanoch32v203/board.h
+++ b/hw/bsp/ch32v20x/boards/nanoch32v203/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: nanoCH32V203
+ url: https://github.com/wuxx/nanoCH32V203
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32v20x/family.c b/hw/bsp/ch32v20x/family.c
index 43dd7e0322..5f52d94472 100644
--- a/hw/bsp/ch32v20x/family.c
+++ b/hw/bsp/ch32v20x/family.c
@@ -1,3 +1,7 @@
+/* metadata:
+manufacturer: WCH
+*/
+
#include
// https://github.com/openwch/ch32v307/pull/90
diff --git a/hw/bsp/ch32v307/boards/ch32v307v_r1_1v0/board.h b/hw/bsp/ch32v307/boards/ch32v307v_r1_1v0/board.h
index 7b488096e7..4913470340 100644
--- a/hw/bsp/ch32v307/boards/ch32v307v_r1_1v0/board.h
+++ b/hw/bsp/ch32v307/boards/ch32v307v_r1_1v0/board.h
@@ -22,6 +22,11 @@
* THE SOFTWARE.
*/
+/* metadata:
+ name: CH32V307V-R1-1v0
+ url: https://github.com/openwch/ch32v307/tree/main/SCHPCB/CH32V307V-R1-1v0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/ch32v307/family.c b/hw/bsp/ch32v307/family.c
index adf2dbea5d..48eb8a38c1 100644
--- a/hw/bsp/ch32v307/family.c
+++ b/hw/bsp/ch32v307/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: WCH
+*/
+
#include "stdio.h"
// https://github.com/openwch/ch32v307/pull/90
diff --git a/hw/bsp/da1469x/boards/da14695_dk_usb/board.h b/hw/bsp/da1469x/boards/da14695_dk_usb/board.h
index 5efdd43e0c..c0810c2b61 100644
--- a/hw/bsp/da1469x/boards/da14695_dk_usb/board.h
+++ b/hw/bsp/da1469x/boards/da14695_dk_usb/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: DA14695-00HQDEVKT-U
+ url: https://www.renesas.com/en/products/wireless-connectivity/bluetooth-low-energy/da14695-00hqdevkt-u-smartbond-da14695-bluetooth-low-energy-52-usb-development-kit
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/da1469x/boards/da1469x_dk_pro/board.h b/hw/bsp/da1469x/boards/da1469x_dk_pro/board.h
index f969acf90a..2b61e810eb 100644
--- a/hw/bsp/da1469x/boards/da1469x_dk_pro/board.h
+++ b/hw/bsp/da1469x/boards/da1469x_dk_pro/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: DA1469x Development Kit Pro
+ url: https://lpccs-docs.renesas.com/um-b-090-da1469x_getting_started/DA1469x_The_hardware/DA1469x_The_hardware.html
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/da1469x/family.c b/hw/bsp/da1469x/family.c
index 70bedf6d9f..a64ffce676 100644
--- a/hw/bsp/da1469x/family.c
+++ b/hw/bsp/da1469x/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Renesas
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include
diff --git a/hw/bsp/espressif/boards/adafruit_feather_esp32_v2/board.h b/hw/bsp/espressif/boards/adafruit_feather_esp32_v2/board.h
index 0c53df06b2..15e5091f95 100644
--- a/hw/bsp/espressif/boards/adafruit_feather_esp32_v2/board.h
+++ b/hw/bsp/espressif/boards/adafruit_feather_esp32_v2/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather ESP32 v2
+ url: https://www.adafruit.com/product/5400
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/adafruit_feather_esp32s2/board.h b/hw/bsp/espressif/boards/adafruit_feather_esp32s2/board.h
index 9aa2e75353..0f607c755d 100644
--- a/hw/bsp/espressif/boards/adafruit_feather_esp32s2/board.h
+++ b/hw/bsp/espressif/boards/adafruit_feather_esp32s2/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather ESP32S2
+ url: https://www.adafruit.com/product/5000
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/adafruit_feather_esp32s3/board.h b/hw/bsp/espressif/boards/adafruit_feather_esp32s3/board.h
index 9aa2e75353..35c268cf5d 100644
--- a/hw/bsp/espressif/boards/adafruit_feather_esp32s3/board.h
+++ b/hw/bsp/espressif/boards/adafruit_feather_esp32s3/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather ESP32S3
+ url: https://www.adafruit.com/product/5323
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/adafruit_magtag_29gray/board.h b/hw/bsp/espressif/boards/adafruit_magtag_29gray/board.h
index 084a7aaf27..b86089400a 100644
--- a/hw/bsp/espressif/boards/adafruit_magtag_29gray/board.h
+++ b/hw/bsp/espressif/boards/adafruit_magtag_29gray/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit MagTag 2.9" Grayscale
+ url: https://www.adafruit.com/product/4800
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/adafruit_metro_esp32s2/board.h b/hw/bsp/espressif/boards/adafruit_metro_esp32s2/board.h
index 137ea71ae2..bc45678f75 100644
--- a/hw/bsp/espressif/boards/adafruit_metro_esp32s2/board.h
+++ b/hw/bsp/espressif/boards/adafruit_metro_esp32s2/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Metro ESP32-S2
+ url: https://www.adafruit.com/product/4775
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_addax_1/board.h b/hw/bsp/espressif/boards/espressif_addax_1/board.h
index d4690f7327..4a4a15e1be 100644
--- a/hw/bsp/espressif/boards/espressif_addax_1/board.h
+++ b/hw/bsp/espressif/boards/espressif_addax_1/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif Addax-1
+ url: n/a
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_c3_devkitc/board.h b/hw/bsp/espressif/boards/espressif_c3_devkitc/board.h
index 243dd47f60..a03cb50522 100644
--- a/hw/bsp/espressif/boards/espressif_c3_devkitc/board.h
+++ b/hw/bsp/espressif/boards/espressif_c3_devkitc/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif C3 DevKitC
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitc-02/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_c6_devkitc/board.h b/hw/bsp/espressif/boards/espressif_c6_devkitc/board.h
index 243dd47f60..eedd36a89f 100644
--- a/hw/bsp/espressif/boards/espressif_c6_devkitc/board.h
+++ b/hw/bsp/espressif/boards/espressif_c6_devkitc/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif C6 DevKitC
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_kaluga_1/board.h b/hw/bsp/espressif/boards/espressif_kaluga_1/board.h
index 613e6ae0c1..d49dc2af66 100644
--- a/hw/bsp/espressif/boards/espressif_kaluga_1/board.h
+++ b/hw/bsp/espressif/boards/espressif_kaluga_1/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif Kaluga 1
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-kaluga-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_p4_function_ev/board.h b/hw/bsp/espressif/boards/espressif_p4_function_ev/board.h
index e57f7c51fa..6f3229b707 100644
--- a/hw/bsp/espressif/boards/espressif_p4_function_ev/board.h
+++ b/hw/bsp/espressif/boards/espressif_p4_function_ev/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif P4 Function EV
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_s2_devkitc/board.h b/hw/bsp/espressif/boards/espressif_s2_devkitc/board.h
index e068efef9e..9c197591fb 100644
--- a/hw/bsp/espressif/boards/espressif_s2_devkitc/board.h
+++ b/hw/bsp/espressif/boards/espressif_s2_devkitc/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif S2 DevKitC
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-devkitc-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_s3_devkitc/board.h b/hw/bsp/espressif/boards/espressif_s3_devkitc/board.h
index a319fbc61a..6d7a94668a 100644
--- a/hw/bsp/espressif/boards/espressif_s3_devkitc/board.h
+++ b/hw/bsp/espressif/boards/espressif_s3_devkitc/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif S3 DevKitC
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_s3_devkitm/board.h b/hw/bsp/espressif/boards/espressif_s3_devkitm/board.h
index a319fbc61a..d01fdbe5bf 100644
--- a/hw/bsp/espressif/boards/espressif_s3_devkitm/board.h
+++ b/hw/bsp/espressif/boards/espressif_s3_devkitm/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif S3 DevKitM
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitm-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/espressif_saola_1/board.h b/hw/bsp/espressif/boards/espressif_saola_1/board.h
index e068efef9e..ea369f19cb 100644
--- a/hw/bsp/espressif/boards/espressif_saola_1/board.h
+++ b/hw/bsp/espressif/boards/espressif_saola_1/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Espresif S2 Saola 1
+ url: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s2/esp32-s2-saola-1/index.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/espressif/boards/family.c b/hw/bsp/espressif/boards/family.c
index 048b431fb8..26e415d94b 100644
--- a/hw/bsp/espressif/boards/family.c
+++ b/hw/bsp/espressif/boards/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Espressif
+*/
+
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/f1c100s/boards/f1c100s/board.h b/hw/bsp/f1c100s/boards/f1c100s/board.h
index 3b56a3a57d..44b78f8fbc 100644
--- a/hw/bsp/f1c100s/boards/f1c100s/board.h
+++ b/hw/bsp/f1c100s/boards/f1c100s/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: Lctech Pi F1C200s
+ url: https://linux-sunxi.org/Lctech_Pi_F1C200s
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/f1c100s/family.c b/hw/bsp/f1c100s/family.c
index 6df4a0ed8a..9e864363f9 100644
--- a/hw/bsp/f1c100s/family.c
+++ b/hw/bsp/f1c100s/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Sunxi
+*/
+
#include
#include
#include
diff --git a/hw/bsp/f1c100s/family.cmake b/hw/bsp/f1c100s/family.cmake
index 0903a01431..032dfb77dc 100644
--- a/hw/bsp/f1c100s/family.cmake
+++ b/hw/bsp/f1c100s/family.cmake
@@ -110,5 +110,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/family_support.cmake b/hw/bsp/family_support.cmake
index 82e3badb37..ddb17cbb0d 100644
--- a/hw/bsp/family_support.cmake
+++ b/hw/bsp/family_support.cmake
@@ -300,10 +300,17 @@ endfunction()
# Add bin/hex output
function(family_add_bin_hex TARGET)
- add_custom_command(TARGET ${TARGET} POST_BUILD
- COMMAND ${CMAKE_OBJCOPY} -Obinary $ $/${TARGET}.bin
- COMMAND ${CMAKE_OBJCOPY} -Oihex $ $/${TARGET}.hex
- VERBATIM)
+ if (CMAKE_C_COMPILER_ID STREQUAL "IAR")
+ add_custom_command(TARGET ${TARGET} POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} --bin $ $/${TARGET}.bin
+ COMMAND ${CMAKE_OBJCOPY} --ihex $ $/${TARGET}.hex
+ VERBATIM)
+ else()
+ add_custom_command(TARGET ${TARGET} POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} -Obinary $ $/${TARGET}.bin
+ COMMAND ${CMAKE_OBJCOPY} -Oihex $ $/${TARGET}.hex
+ VERBATIM)
+ endif()
endfunction()
# Add uf2 output
diff --git a/hw/bsp/fomu/boards/fomu/board.h b/hw/bsp/fomu/boards/fomu/board.h
index 666ba1d988..2651c823d7 100644
--- a/hw/bsp/fomu/boards/fomu/board.h
+++ b/hw/bsp/fomu/boards/fomu/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: fomu
+ url: https://tomu.im/fomu.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/fomu/family.c b/hw/bsp/fomu/family.c
index ccf2b12f49..61943cb018 100644
--- a/hw/bsp/fomu/family.c
+++ b/hw/bsp/fomu/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Tomu
+*/
+
#include
#include
#include "csr.h"
diff --git a/hw/bsp/gd32vf103/boards/sipeed_longan_nano/board.h b/hw/bsp/gd32vf103/boards/sipeed_longan_nano/board.h
index fae7c40b7e..cb564a340c 100644
--- a/hw/bsp/gd32vf103/boards/sipeed_longan_nano/board.h
+++ b/hw/bsp/gd32vf103/boards/sipeed_longan_nano/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: Sipeed Longan Nano
+ url: https://longan.sipeed.com/en/
+*/
+
#ifndef _NUCLEI_SDK_HAL_H
#define _NUCLEI_SDK_HAL_H
diff --git a/hw/bsp/gd32vf103/family.c b/hw/bsp/gd32vf103/family.c
index d4a819fb3a..9d15755fc7 100644
--- a/hw/bsp/gd32vf103/family.c
+++ b/hw/bsp/gd32vf103/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: GigaDevice
+*/
+
#include "drv_usb_hw.h"
#include "drv_usb_dev.h"
diff --git a/hw/bsp/gd32vf103/family.cmake b/hw/bsp/gd32vf103/family.cmake
index 1441e41de0..5ef551f257 100644
--- a/hw/bsp/gd32vf103/family.cmake
+++ b/hw/bsp/gd32vf103/family.cmake
@@ -117,5 +117,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/imxrt/boards/metro_m7_1011/board.h b/hw/bsp/imxrt/boards/metro_m7_1011/board.h
index 24141f5f4e..ccc4d6b9ac 100644
--- a/hw/bsp/imxrt/boards/metro_m7_1011/board.h
+++ b/hw/bsp/imxrt/boards/metro_m7_1011/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Metro M7 1011
+ url: https://www.adafruit.com/product/5600
+*/
+
#ifndef BOARD_M7_1011_H_
#define BOARD_M7_1011_H_
diff --git a/hw/bsp/imxrt/boards/metro_m7_1011_sd/board.h b/hw/bsp/imxrt/boards/metro_m7_1011_sd/board.h
index 343e17f812..04d5b01b55 100644
--- a/hw/bsp/imxrt/boards/metro_m7_1011_sd/board.h
+++ b/hw/bsp/imxrt/boards/metro_m7_1011_sd/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Metro M7 1011 SD
+ url: https://www.adafruit.com/product/5600
+*/
+
#ifndef BOARD_METRO_M7_1011_SD_H_
#define BOARD_METRO_M7_1011_SD_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1010_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1010_evk/board.h
index da12075a0b..6b9ec0ae1f 100644
--- a/hw/bsp/imxrt/boards/mimxrt1010_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1010_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1010 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1010-evaluation-kit:MIMXRT1010-EVK
+*/
+
#ifndef BOARD_MIMXRT1010_EVK_H_
#define BOARD_MIMXRT1010_EVK_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1015_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1015_evk/board.h
index 6ac78453fc..e2ec4e627e 100644
--- a/hw/bsp/imxrt/boards/mimxrt1015_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1015_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1015 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1015-EVK
+*/
+
#ifndef BOARD_MIMXRT1015_EVK_H_
#define BOARD_MIMXRT1015_EVK_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1020_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1020_evk/board.h
index 4f45935248..3f9c97e119 100644
--- a/hw/bsp/imxrt/boards/mimxrt1020_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1020_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1020 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1020-EVK
+*/
+
#ifndef BOARD_MIMXRT1020_EVK_H_
#define BOARD_MIMXRT1020_EVK_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1024_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1024_evk/board.h
index 27a64b4641..39e63c4726 100644
--- a/hw/bsp/imxrt/boards/mimxrt1024_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1024_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1024 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1024-evaluation-kit:MIMXRT1024-EVK
+*/
+
#ifndef BOARD_MIMXRT1024_EVK_H_
#define BOARD_MIMXRT1024_EVK_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1050_evkb/board.h b/hw/bsp/imxrt/boards/mimxrt1050_evkb/board.h
index 97d1e446c2..de7ab05353 100644
--- a/hw/bsp/imxrt/boards/mimxrt1050_evkb/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1050_evkb/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1050 Evaluation Kit revB
+ url: https://www.nxp.com/part/IMXRT1050-EVKB
+*/
+
#ifndef BOARD_MIMXRT1050_EVKB_H_
#define BOARD_MIMXRT1050_EVKB_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1060_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1060_evk/board.h
index 40b99860f2..5bbacadaf1 100644
--- a/hw/bsp/imxrt/boards/mimxrt1060_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1060_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1060 Evaluation Kit revB
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1060-EVKB
+*/
+
#ifndef BOARD_MIMXRT1060_EVKB_H_
#define BOARD_MIMXRT1060_EVKB_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1064_evk/board.h b/hw/bsp/imxrt/boards/mimxrt1064_evk/board.h
index 7fca5adef0..6dc01e3e7f 100644
--- a/hw/bsp/imxrt/boards/mimxrt1064_evk/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1064_evk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1064 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/MIMXRT1064-EVK
+*/
+
#ifndef BOARD_MIMXRT1064_EVKB_H_
#define BOARD_MIMXRT1064_EVKB_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.cmake b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.cmake
index 692d9e498b..46a97344fe 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.cmake
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.cmake
@@ -1,8 +1,17 @@
set(MCU_VARIANT MIMXRT1176)
-set(MCU_CORE _cm7)
-set(JLINK_DEVICE MIMXRT1176xxxA_M7)
-set(PYOCD_TARGET mimxrt1170_cm7)
+if (M4 STREQUAL "1")
+ set(MCU_CORE _cm4)
+ set(JLINK_CORE _M4)
+ set(LD_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx${MCU_CORE}_ram.ld)
+ set(CMAKE_SYSTEM_PROCESSOR cortex-m4 CACHE INTERNAL "System Processor")
+else ()
+ set(MCU_CORE _cm7)
+ set(JLINK_CORE _M7)
+endif()
+
+set(JLINK_DEVICE MIMXRT1176xxxA${JLINK_CORE})
+set(PYOCD_TARGET mimxrt1170${MCU_CORE})
set(NXPLINK_DEVICE MIMXRT1176xxxxx:MIMXRT1170-EVK)
function(update_board TARGET)
@@ -10,7 +19,7 @@ function(update_board TARGET)
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/evkbmimxrt1170_flexspi_nor_config.c
)
target_compile_definitions(${TARGET} PUBLIC
- CPU_MIMXRT1176DVMAA_cm7
+ CPU_MIMXRT1176DVMAA${MCU_CORE}
BOARD_TUD_RHPORT=0
BOARD_TUH_RHPORT=1
)
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.h b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.h
index 303935517b..c5d54b7a78 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.h
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: i.MX RT1070 Evaluation Kit
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/i-mx-evaluation-and-development-boards/i-mx-rt1170-evaluation-kit:MIMXRT1170-EVKB
+*/
+
#ifndef BOARD_MIMXRT1170_EVKB_H_
#define BOARD_MIMXRT1170_EVKB_H_
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.mk b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.mk
index e8500a4c9c..8270ae5872 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.mk
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board.mk
@@ -1,12 +1,22 @@
-CFLAGS += -DCPU_MIMXRT1176DVMAA_cm7
MCU_VARIANT = MIMXRT1176
-MCU_CORE = _cm7
+
+ifeq ($(M4), 1)
+ MCU_CORE = _cm4
+ JLINK_CORE = _M4
+ CPU_CORE = cortex-m4
+ LD_FILE ?= $(MCU_DIR)/gcc/$(MCU_VARIANT)xxxxx${MCU_CORE}_ram.ld
+else
+ MCU_CORE = _cm7
+ JLINK_CORE = _M7
+endif
+
+CFLAGS += -DCPU_MIMXRT1176DVMAA$(MCU_CORE)
# For flash-jlink target
-JLINK_DEVICE = MIMXRT1176xxxA_M7
+JLINK_DEVICE = MIMXRT1176xxxA$(JLINK_CORE)
# For flash-pyocd target
-PYOCD_TARGET = mimxrt1170_cm7
+PYOCD_TARGET = mimxrt1170$(MCU_CORE)
BOARD_TUD_RHPORT = 0
BOARD_TUH_RHPORT = 1
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.c b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.c
index 88b3b3770c..66f1f983ad 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.c
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.c
@@ -11,11 +11,11 @@
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
-product: Clocks v12.0
+product: Clocks v14.0
processor: MIMXRT1176xxxxx
package_id: MIMXRT1176DVMAA
mcu_data: ksdk2_0
-processor_version: 14.0.1
+processor_version: 16.3.0
board: MIMXRT1170-EVKB
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
@@ -335,7 +335,6 @@ void BOARD_BootClockRUN(void)
/* Init OSC RC 400M */
CLOCK_OSC_EnableOscRc400M();
- CLOCK_OSC_GateOscRc400M(false);
/* Init OSC RC 48M */
CLOCK_OSC_EnableOsc48M(true);
@@ -349,22 +348,29 @@ void BOARD_BootClockRUN(void)
{
}
- /* Switch both core, M7 Systick and Bus_Lpsr to OscRC48MDiv2 first */
+ /* Switch core M7 clock root to OscRC48MDiv2 first */
#if __CORTEX_M == 7
rootCfg.mux = kCLOCK_M7_ClockRoot_MuxOscRc48MDiv2;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_M7, &rootCfg);
+#endif
+ /* Switch core M7 systick clock root to OscRC48MDiv2 first */
+#if __CORTEX_M == 7
rootCfg.mux = kCLOCK_M7_SYSTICK_ClockRoot_MuxOscRc48MDiv2;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_M7_Systick, &rootCfg);
#endif
+ /* Switch core M4 clock root to OscRC48MDiv2 first */
#if __CORTEX_M == 4
rootCfg.mux = kCLOCK_M4_ClockRoot_MuxOscRc48MDiv2;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_M4, &rootCfg);
+#endif
+ /* Switch the Bus_Lpsr clock root to OscRC48MDiv2 first */
+#if __CORTEX_M == 4
rootCfg.mux = kCLOCK_BUS_LPSR_ClockRoot_MuxOscRc48MDiv2;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_Bus_Lpsr, &rootCfg);
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.h b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.h
index 4a4d35eaaa..f687243141 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.h
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/clock_config.h
@@ -48,7 +48,7 @@ void BOARD_InitBootClocks(void);
#define BOARD_BOOTCLOCKRUN_ARM_PLL_CLK 996000000UL /* Clock consumers of ARM_PLL_CLK output : N/A */
#define BOARD_BOOTCLOCKRUN_ASRC_CLK_ROOT 24000000UL /* Clock consumers of ASRC_CLK_ROOT output : ASRC */
#define BOARD_BOOTCLOCKRUN_AXI_CLK_ROOT 996000000UL /* Clock consumers of AXI_CLK_ROOT output : FLEXRAM */
-#define BOARD_BOOTCLOCKRUN_BUS_CLK_ROOT 240000000UL /* Clock consumers of BUS_CLK_ROOT output : ADC_ETC, AOI1, AOI2, CAAM, CAN1, CAN2, CM7_GPIO2, CM7_GPIO3, CMP1, CMP2, CMP3, CMP4, CSI, DAC, DMA0, DMAMUX0, DSI_HOST, EMVSIM1, EMVSIM2, ENC1, ENC2, ENC3, ENC4, ENET, ENET_1G, ENET_QOS, EWM, FLEXIO1, FLEXIO2, FLEXSPI1, FLEXSPI2, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, IEE_APC, IOMUXC, IOMUXC_GPR, KPP, LCDIF, LCDIFV2, LPADC1, LPADC2, LPI2C1, LPI2C2, LPI2C3, LPI2C4, LPSPI1, LPSPI2, LPSPI3, LPSPI4, LPUART1, LPUART10, LPUART2, LPUART3, LPUART4, LPUART5, LPUART6, LPUART7, LPUART8, LPUART9, MECC1, MECC2, MIPI_CSI2RX, PIT1, PWM1, PWM2, PWM3, PWM4, PXP, RTWDOG3, SAI1, SAI2, SAI3, SPDIF, TMR1, TMR2, TMR3, TMR4, USBPHY1, USBPHY2, USB_OTG1, USB_OTG2, USDHC1, USDHC2, WDOG1, WDOG2, XBARA1, XBARB2, XBARB3, XECC_FLEXSPI1, XECC_FLEXSPI2, XECC_SEMC, XRDC2_D0, XRDC2_D1 */
+#define BOARD_BOOTCLOCKRUN_BUS_CLK_ROOT 240000000UL /* Clock consumers of BUS_CLK_ROOT output : ADC_ETC, AOI1, AOI2, CAAM, CAN1, CAN2, CM7_GPIO2, CM7_GPIO3, CMP1, CMP2, CMP3, CMP4, CSI, DAC, DMA0, DMAMUX0, DSI_HOST, EMVSIM1, EMVSIM2, ENC1, ENC2, ENC3, ENC4, ENET, ENET_1G, ENET_QOS, EWM, FLEXIO1, FLEXIO2, FLEXSPI1, FLEXSPI2, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, IEE_APC, IEE__IEE_RT1170, IOMUXC, IOMUXC_GPR, KPP, LCDIF, LCDIFV2, LPADC1, LPADC2, LPI2C1, LPI2C2, LPI2C3, LPI2C4, LPSPI1, LPSPI2, LPSPI3, LPSPI4, LPUART1, LPUART10, LPUART2, LPUART3, LPUART4, LPUART5, LPUART6, LPUART7, LPUART8, LPUART9, MECC1, MECC2, MIPI_CSI2RX, PIT1, PWM1, PWM2, PWM3, PWM4, PXP, RTWDOG3, SAI1, SAI2, SAI3, SPDIF, TMR1, TMR2, TMR3, TMR4, USBPHY1, USBPHY2, USB_OTG1, USB_OTG2, USDHC1, USDHC2, WDOG1, WDOG2, XBARA1, XBARB2, XBARB3, XECC_FLEXSPI1, XECC_FLEXSPI2, XECC_SEMC, XRDC2_D0, XRDC2_D1 */
#define BOARD_BOOTCLOCKRUN_BUS_LPSR_CLK_ROOT 160000000UL /* Clock consumers of BUS_LPSR_CLK_ROOT output : CAN3, GPIO10, GPIO11, GPIO12, GPIO7, GPIO8, GPIO9, IOMUXC_LPSR, LPI2C5, LPI2C6, LPSPI5, LPSPI6, LPUART11, LPUART12, MUA, MUB, PDM, PIT2, RDC, RTWDOG4, SAI4, SNVS, XRDC2_D0, XRDC2_D1 */
#define BOARD_BOOTCLOCKRUN_CAN1_CLK_ROOT 24000000UL /* Clock consumers of CAN1_CLK_ROOT output : CAN1 */
#define BOARD_BOOTCLOCKRUN_CAN2_CLK_ROOT 24000000UL /* Clock consumers of CAN2_CLK_ROOT output : CAN2 */
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.c b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.c
index 81ffb35e36..2c83fb55e4 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.c
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.c
@@ -6,11 +6,11 @@
/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
-product: Pins v14.0
+product: Pins v16.0
processor: MIMXRT1176xxxxx
package_id: MIMXRT1176DVMAA
mcu_data: ksdk2_0
-processor_version: 14.0.1
+processor_version: 16.3.0
board: MIMXRT1170-EVKB
external_user_signals: {}
pin_labels:
@@ -90,7 +90,7 @@ void BOARD_InitPins(void) {
IOMUXC_GPIO_AD_04_GPIO9_IO03, /* GPIO_AD_04 PAD functional properties : */
0x02U); /* Slew Rate Field: Slow Slew Rate
Drive Strength Field: high drive strength
- Pull / Keep Select Field: Pull Disable, Highz
+ Pull / Keep Select Field: Pull Disable
Pull Up / Down Config. Field: Weak pull down
Open Drain Field: Disabled
Domain write protection: Both cores are allowed
@@ -99,7 +99,7 @@ void BOARD_InitPins(void) {
IOMUXC_GPIO_AD_24_LPUART1_TXD, /* GPIO_AD_24 PAD functional properties : */
0x02U); /* Slew Rate Field: Slow Slew Rate
Drive Strength Field: high drive strength
- Pull / Keep Select Field: Pull Disable, Highz
+ Pull / Keep Select Field: Pull Disable
Pull Up / Down Config. Field: Weak pull down
Open Drain Field: Disabled
Domain write protection: Both cores are allowed
@@ -108,22 +108,19 @@ void BOARD_InitPins(void) {
IOMUXC_GPIO_AD_25_LPUART1_RXD, /* GPIO_AD_25 PAD functional properties : */
0x02U); /* Slew Rate Field: Slow Slew Rate
Drive Strength Field: high drive strength
- Pull / Keep Select Field: Pull Disable, Highz
+ Pull / Keep Select Field: Pull Disable
Pull Up / Down Config. Field: Weak pull down
Open Drain Field: Disabled
Domain write protection: Both cores are allowed
Domain write protection lock: Neither of DWP bits is locked */
IOMUXC_SetPinConfig(
IOMUXC_WAKEUP_DIG_GPIO13_IO00, /* WAKEUP_DIG PAD functional properties : */
- 0x0EU); /* Slew Rate Field: Slow Slew Rate
- Drive Strength Field: high driver
- Pull / Keep Select Field: Pull Enable
+ 0x0EU); /* Pull / Keep Select Field: Pull Enable
Pull Up / Down Config. Field: Weak pull up
Open Drain SNVS Field: Disabled
Domain write protection: Both cores are allowed
Domain write protection lock: Neither of DWP bits is locked */
}
-
/***********************************************************************************************************************
* EOF
**********************************************************************************************************************/
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.h b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.h
index 550bd14748..a5b6214767 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.h
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/board/pin_mux.h
@@ -46,7 +46,7 @@ void BOARD_InitBootPins(void);
#define BOARD_INITPINS_USER_LED_GPIO_PIN 3U /*!< GPIO pin number */
#define BOARD_INITPINS_USER_LED_GPIO_PIN_MASK (1U << 3U) /*!< GPIO pin mask */
-/* WAKEUP (coord T8), USER_BUTTON */
+/* WAKEUP (coord T8), USER_BUTTON/SW7 */
/* Routed pin properties */
#define BOARD_INITPINS_USER_BUTTON_PERIPHERAL GPIO13 /*!< Peripheral name */
#define BOARD_INITPINS_USER_BUTTON_SIGNAL gpio_io /*!< Signal name */
diff --git a/hw/bsp/imxrt/boards/mimxrt1170_evkb/mimxrt1170_evkb.mex b/hw/bsp/imxrt/boards/mimxrt1170_evkb/mimxrt1170_evkb.mex
index e68b9ea7e7..a4c8917f79 100644
--- a/hw/bsp/imxrt/boards/mimxrt1170_evkb/mimxrt1170_evkb.mex
+++ b/hw/bsp/imxrt/boards/mimxrt1170_evkb/mimxrt1170_evkb.mex
@@ -1,5 +1,5 @@
-
+
MIMXRT1176xxxxx
MIMXRT1176DVMAA
@@ -19,18 +19,17 @@
false
-
+
- 14.0.1
+ 16.3.0
-
@@ -44,7 +43,7 @@
true
-
+
true
@@ -104,13 +103,13 @@
-
+
- 14.0.1
+ 16.3.0
diff --git a/hw/bsp/imxrt/boards/teensy_40/board.h b/hw/bsp/imxrt/boards/teensy_40/board.h
index 4a173c834a..ae749e8947 100644
--- a/hw/bsp/imxrt/boards/teensy_40/board.h
+++ b/hw/bsp/imxrt/boards/teensy_40/board.h
@@ -24,11 +24,14 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Teensy 4.0
+ url: https://www.pjrc.com/store/teensy40.html
+*/
#ifndef BOARD_H_
#define BOARD_H_
-
// required since iMXRT MCUX-SDK include this file for board size
#define BOARD_FLASH_SIZE (2 * 1024 * 1024)
diff --git a/hw/bsp/imxrt/boards/teensy_41/board.h b/hw/bsp/imxrt/boards/teensy_41/board.h
index 358684126c..1bc022c546 100644
--- a/hw/bsp/imxrt/boards/teensy_41/board.h
+++ b/hw/bsp/imxrt/boards/teensy_41/board.h
@@ -24,11 +24,14 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Teensy 4.1
+ url: https://www.pjrc.com/store/teensy41.html
+*/
#ifndef BOARD_H_
#define BOARD_H_
-
// required since iMXRT MCUX-SDK include this file for board size
#define BOARD_FLASH_SIZE (8 * 1024 * 1024)
diff --git a/hw/bsp/imxrt/family.c b/hw/bsp/imxrt/family.c
index 6087ee37db..ad529a2277 100644
--- a/hw/bsp/imxrt/family.c
+++ b/hw/bsp/imxrt/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "bsp/board_api.h"
#include "board/clock_config.h"
#include "board/pin_mux.h"
@@ -31,23 +35,36 @@
// Suppress warning caused by mcu driver
#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
+#include "fsl_clock.h"
#include "fsl_device_registers.h"
#include "fsl_gpio.h"
#include "fsl_iomuxc.h"
-#include "fsl_clock.h"
#include "fsl_lpuart.h"
#include "fsl_ocotp.h"
#ifdef __GNUC__
-#pragma GCC diagnostic pop
+ #pragma GCC diagnostic pop
#endif
+/* --- Note about USB buffer RAM ---
+ For M7 core it's recommended to put USB buffer in DTCM for better performance (flexspi_nor linker default)
+ Otherwise you have to put the buffer in a non-cacheable section by configurate MPU manually or using BOARD_ConfigMPU():
+ - Define CFG_TUSB_MEM_SECTION=__attribute__((section("NonCacheable")))
+ - (IAR only) Change __NCACHE_REGION_SIZE in linker script to cover the size of non-cacheable section, multiple of 2^N
+
+ For secondary M4 core, the USB controller doesn't support transfer from DTCM so OCRAM must be used:
+ - __NCACHE_REGION_SIZE is defined by the linker script by default
+ - Define CFG_TUSB_MEM_SECTION=__attribute__((section("NonCacheable")))
+*/
+
+static void BOARD_ConfigMPU(void);
+
// needed by fsl_flexspi_nor_boot
-TU_ATTR_USED const uint8_t dcd_data[] = { 0x00 };
+TU_ATTR_USED const uint8_t dcd_data[] = {0x00};
//--------------------------------------------------------------------+
//
@@ -59,20 +76,20 @@ TU_ATTR_USED const uint8_t dcd_data[] = { 0x00 };
#endif
static void init_usb_phy(uint8_t usb_id) {
- USBPHY_Type* usb_phy;
+ USBPHY_Type *usb_phy;
if (usb_id == 0) {
usb_phy = USBPHY1;
CLOCK_EnableUsbhs0PhyPllClock(kCLOCK_Usbphy480M, BOARD_XTAL0_CLK_HZ);
CLOCK_EnableUsbhs0Clock(kCLOCK_Usb480M, BOARD_XTAL0_CLK_HZ);
}
- #ifdef USBPHY2
+#ifdef USBPHY2
else if (usb_id == 1) {
usb_phy = USBPHY2;
CLOCK_EnableUsbhs1PhyPllClock(kCLOCK_Usbphy480M, BOARD_XTAL0_CLK_HZ);
CLOCK_EnableUsbhs1Clock(kCLOCK_Usb480M, BOARD_XTAL0_CLK_HZ);
}
- #endif
+#endif
else {
return;
}
@@ -91,13 +108,8 @@ static void init_usb_phy(uint8_t usb_id) {
usb_phy->TX = phytx;
}
-void board_init(void)
-{
- // make sure the dcache is on.
-#if defined(__DCACHE_PRESENT) && __DCACHE_PRESENT
- if (SCB_CCR_DC_Msk != (SCB_CCR_DC_Msk & SCB->CCR)) SCB_EnableDCache();
-#endif
-
+void board_init(void) {
+ BOARD_ConfigMPU();
BOARD_InitPins();
BOARD_BootClockRUN();
SystemCoreClockUpdate();
@@ -113,9 +125,9 @@ void board_init(void)
#elif CFG_TUSB_OS == OPT_OS_FREERTOS
// If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
NVIC_SetPriority(USB_OTG1_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
-#ifdef USBPHY2
+ #ifdef USBPHY2
NVIC_SetPriority(USB_OTG2_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
-#endif
+ #endif
#endif
board_led_write(true);
@@ -127,16 +139,16 @@ void board_init(void)
uart_config.enableTx = true;
uart_config.enableRx = true;
- if ( kStatus_Success != LPUART_Init(UART_PORT, &uart_config, UART_CLK_ROOT) ) {
+ if (kStatus_Success != LPUART_Init(UART_PORT, &uart_config, UART_CLK_ROOT)) {
// failed to init uart, probably baudrate is not supported
// TU_BREAKPOINT();
}
//------------- USB -------------//
// Note: RT105x RT106x and later have dual USB controllers.
- init_usb_phy(0); // USB0
+ init_usb_phy(0);// USB0
#ifdef USBPHY2
- init_usb_phy(1); // USB1
+ init_usb_phy(1);// USB1
#endif
}
@@ -166,18 +178,18 @@ uint32_t board_button_read(void) {
size_t board_get_unique_id(uint8_t id[], size_t max_len) {
(void) max_len;
- #if FSL_FEATURE_OCOTP_HAS_TIMING_CTRL
+#if FSL_FEATURE_OCOTP_HAS_TIMING_CTRL
OCOTP_Init(OCOTP, CLOCK_GetFreq(kCLOCK_IpgClk));
- #else
+#else
OCOTP_Init(OCOTP, 0u);
- #endif
+#endif
// Reads shadow registers 0x01 - 0x04 (Configuration and Manufacturing Info)
// into 8 bit wide destination, avoiding punning.
for (int i = 0; i < 4; ++i) {
uint32_t wr = OCOTP_ReadFuseShadowRegister(OCOTP, i + 1);
for (int j = 0; j < 4; j++) {
- id[i*4+j] = wr & 0xff;
+ id[i * 4 + j] = wr & 0xff;
wr >>= 8;
}
}
@@ -186,7 +198,7 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len) {
return 16;
}
-int board_uart_read(uint8_t* buf, int len) {
+int board_uart_read(uint8_t *buf, int len) {
int count = 0;
while (count < len) {
@@ -209,8 +221,8 @@ int board_uart_read(uint8_t* buf, int len) {
return count;
}
-int board_uart_write(void const * buf, int len) {
- LPUART_WriteBlocking(UART_PORT, (uint8_t const*)buf, len);
+int board_uart_write(void const *buf, int len) {
+ LPUART_WriteBlocking(UART_PORT, (uint8_t const *) buf, len);
return len;
}
@@ -237,9 +249,390 @@ TU_ATTR_UNUSED void _start(void) {
}
#ifdef __clang__
-void _exit (int __status) {
+void _exit(int __status) {
while (1) {}
}
#endif
+#endif
+
+//--------------------------------------------------------------------
+// MPU configuration
+//--------------------------------------------------------------------
+#if __CORTEX_M == 7
+static void BOARD_ConfigMPU(void) {
+ #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+ extern uint32_t Image$$RW_m_ncache$$Base[];
+ /* RW_m_ncache_unused is a auxiliary region which is used to get the whole size of noncache section */
+ extern uint32_t Image$$RW_m_ncache_unused$$Base[];
+ extern uint32_t Image$$RW_m_ncache_unused$$ZI$$Limit[];
+ uint32_t nonCacheStart = (uint32_t) Image$$RW_m_ncache$$Base;
+ uint32_t size = ((uint32_t) Image$$RW_m_ncache_unused$$Base == nonCacheStart) ? 0 : ((uint32_t) Image$$RW_m_ncache_unused$$ZI$$Limit - nonCacheStart);
+ #elif defined(__MCUXPRESSO)
+ #if defined(__USE_SHMEM)
+ extern uint32_t __base_rpmsg_sh_mem;
+ extern uint32_t __top_rpmsg_sh_mem;
+ uint32_t nonCacheStart = (uint32_t) (&__base_rpmsg_sh_mem);
+ uint32_t size = (uint32_t) (&__top_rpmsg_sh_mem) - nonCacheStart;
+ #else
+ extern uint32_t __base_NCACHE_REGION;
+ extern uint32_t __top_NCACHE_REGION;
+ uint32_t nonCacheStart = (uint32_t) (&__base_NCACHE_REGION);
+ uint32_t size = (uint32_t) (&__top_NCACHE_REGION) - nonCacheStart;
+ #endif
+ #elif defined(__ICCARM__) || defined(__GNUC__)
+ extern uint32_t __NCACHE_REGION_START[];
+ extern uint32_t __NCACHE_REGION_SIZE[];
+ uint32_t nonCacheStart = (uint32_t) __NCACHE_REGION_START;
+ uint32_t size = (uint32_t) __NCACHE_REGION_SIZE;
+ #endif
+ volatile uint32_t i = 0;
+
+ #if defined(__ICACHE_PRESENT) && __ICACHE_PRESENT
+ /* Disable I cache and D cache */
+ if (SCB_CCR_IC_Msk == (SCB_CCR_IC_Msk & SCB->CCR)) {
+ SCB_DisableICache();
+ }
+ #endif
+ #if defined(__DCACHE_PRESENT) && __DCACHE_PRESENT
+ if (SCB_CCR_DC_Msk == (SCB_CCR_DC_Msk & SCB->CCR)) {
+ SCB_DisableDCache();
+ }
+ #endif
+
+ /* Disable MPU */
+ ARM_MPU_Disable();
+
+ /* MPU configure:
+ * Use ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable,
+ * SubRegionDisable, Size)
+ * API in mpu_armv7.h.
+ * param DisableExec Instruction access (XN) disable bit,0=instruction fetches enabled, 1=instruction fetches
+ * disabled.
+ * param AccessPermission Data access permissions, allows you to configure read/write access for User and
+ * Privileged mode.
+ * Use MACROS defined in mpu_armv7.h:
+ * ARM_MPU_AP_NONE/ARM_MPU_AP_PRIV/ARM_MPU_AP_URO/ARM_MPU_AP_FULL/ARM_MPU_AP_PRO/ARM_MPU_AP_RO
+ * Combine TypeExtField/IsShareable/IsCacheable/IsBufferable to configure MPU memory access attributes.
+ * TypeExtField IsShareable IsCacheable IsBufferable Memory Attribute Shareability Cache
+ * 0 x 0 0 Strongly Ordered shareable
+ * 0 x 0 1 Device shareable
+ * 0 0 1 0 Normal not shareable Outer and inner write
+ * through no write allocate
+ * 0 0 1 1 Normal not shareable Outer and inner write
+ * back no write allocate
+ * 0 1 1 0 Normal shareable Outer and inner write
+ * through no write allocate
+ * 0 1 1 1 Normal shareable Outer and inner write
+ * back no write allocate
+ * 1 0 0 0 Normal not shareable outer and inner
+ * noncache
+ * 1 1 0 0 Normal shareable outer and inner
+ * noncache
+ * 1 0 1 1 Normal not shareable outer and inner write
+ * back write/read acllocate
+ * 1 1 1 1 Normal shareable outer and inner write
+ * back write/read acllocate
+ * 2 x 0 0 Device not shareable
+ * Above are normal use settings, if your want to see more details or want to config different inner/outer cache
+ * policy.
+ * please refer to Table 4-55 /4-56 in arm cortex-M7 generic user guide
+ * param SubRegionDisable Sub-region disable field. 0=sub-region is enabled, 1=sub-region is disabled.
+ * param Size Region size of the region to be configured. use ARM_MPU_REGION_SIZE_xxx MACRO in
+ * mpu_armv7.h.
+ */
+
+ /*
+ * Add default region to deny access to whole address space to workaround speculative prefetch.
+ * Refer to Arm errata 1013783-B for more details.
+ *
+ */
+ /* Region 0 setting: Instruction access disabled, No data access permission. */
+ MPU->RBAR = ARM_MPU_RBAR(0, 0x00000000U);
+ MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_NONE, 0, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_4GB);
+
+ /* Region 1 setting: Memory with Device type, not shareable, non-cacheable. */
+ MPU->RBAR = ARM_MPU_RBAR(1, 0x80000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_512MB);
+
+ /* Region 2 setting: Memory with Device type, not shareable, non-cacheable. */
+ MPU->RBAR = ARM_MPU_RBAR(2, 0x60000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_512MB);
+
+ /* Region 3 setting: Memory with Device type, not shareable, non-cacheable. */
+ MPU->RBAR = ARM_MPU_RBAR(3, 0x00000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1GB);
+
+ /* Region 4 setting: Memory with Normal type, not shareable, outer/inner write back */
+ MPU->RBAR = ARM_MPU_RBAR(4, 0x00000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
+
+ /* Region 5 setting: Memory with Normal type, not shareable, outer/inner write back */
+ MPU->RBAR = ARM_MPU_RBAR(5, 0x20000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
+
+ #if defined(CACHE_MODE_WRITE_THROUGH) && CACHE_MODE_WRITE_THROUGH
+ /* Region 6 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_1MB);
+
+ /* Region 7 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(7, 0x20300000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_512KB);
+ #else
+ /* Region 6 setting: Memory with Normal type, not shareable, outer/inner write back */
+ MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_1MB);
+
+ /* Region 7 setting: Memory with Normal type, not shareable, outer/inner write back */
+ MPU->RBAR = ARM_MPU_RBAR(7, 0x20300000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_512KB);
+ #endif
+
+ #if defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1)
+ /* Region 8 setting: Memory with Normal type, not shareable, outer/inner write back. */
+ MPU->RBAR = ARM_MPU_RBAR(8, 0x30000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);
+ #endif
+
+ #ifdef USE_SDRAM
+ #if defined(CACHE_MODE_WRITE_THROUGH) && CACHE_MODE_WRITE_THROUGH
+ /* Region 9 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(9, 0x80000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_64MB);
+ #else
+ /* Region 9 setting: Memory with Normal type, not shareable, outer/inner write back */
+ MPU->RBAR = ARM_MPU_RBAR(9, 0x80000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_64MB);
+ #endif
+ #endif
+
+ while ((size >> i) > 0x1U) {
+ i++;
+ }
+
+ if (i != 0) {
+ /* The MPU region size should be 2^N, 5<=N<=32, region base should be multiples of size. */
+ assert(!(nonCacheStart % size));
+ assert(size == (uint32_t) (1 << i));
+ assert(i >= 5);
+
+ /* Region 10 setting: Memory with Normal type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(10, nonCacheStart);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 0, 0, 0, 0, i - 1);
+ }
+
+ /* Region 11 setting: Memory with Device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(11, 0x40000000);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_16MB);
+
+ /* Region 12 setting: Memory with Device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(12, 0x41000000);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_2MB);
+
+ /* Region 13 setting: Memory with Device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(13, 0x41400000);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1MB);
+
+ /* Region 14 setting: Memory with Device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(14, 0x41800000);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_2MB);
+
+ /* Region 15 setting: Memory with Device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(15, 0x42000000);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1MB);
+
+ /* Enable MPU */
+ ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_HFNMIENA_Msk);
+ /* Enable I cache and D cache */
+ #if defined(__DCACHE_PRESENT) && __DCACHE_PRESENT
+ SCB_EnableDCache();
+ #endif
+ #if defined(__ICACHE_PRESENT) && __ICACHE_PRESENT
+ SCB_EnableICache();
+ #endif
+}
+
+#elif __CORTEX_M == 4
+
+void BOARD_ConfigMPU(void) {
+ #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+ extern uint32_t Image$$RW_m_ncache$$Base[];
+ /* RW_m_ncache_unused is a auxiliary region which is used to get the whole size of noncache section */
+ extern uint32_t Image$$RW_m_ncache_unused$$Base[];
+ extern uint32_t Image$$RW_m_ncache_unused$$ZI$$Limit[];
+ uint32_t nonCacheStart = (uint32_t) Image$$RW_m_ncache$$Base;
+ uint32_t nonCacheSize = ((uint32_t) Image$$RW_m_ncache_unused$$Base == nonCacheStart) ? 0 : ((uint32_t) Image$$RW_m_ncache_unused$$ZI$$Limit - nonCacheStart);
+ #elif defined(__MCUXPRESSO)
+ extern uint32_t __base_NCACHE_REGION;
+ extern uint32_t __top_NCACHE_REGION;
+ uint32_t nonCacheStart = (uint32_t) (&__base_NCACHE_REGION);
+ uint32_t nonCacheSize = (uint32_t) (&__top_NCACHE_REGION) - nonCacheStart;
+ #elif defined(__ICCARM__) || defined(__GNUC__)
+ extern uint32_t __NCACHE_REGION_START[];
+ extern uint32_t __NCACHE_REGION_SIZE[];
+ uint32_t nonCacheStart = (uint32_t) __NCACHE_REGION_START;
+ uint32_t nonCacheSize = (uint32_t) __NCACHE_REGION_SIZE;
+ #endif
+ #if defined(__USE_SHMEM)
+ #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
+ extern uint32_t Image$$RPMSG_SH_MEM$$Base[];
+ /* RPMSG_SH_MEM_unused is a auxiliary region which is used to get the whole size of RPMSG_SH_MEM section */
+ extern uint32_t Image$$RPMSG_SH_MEM_unused$$Base[];
+ extern uint32_t Image$$RPMSG_SH_MEM_unused$$ZI$$Limit[];
+ uint32_t rpmsgShmemStart = (uint32_t) Image$$RPMSG_SH_MEM$$Base;
+ uint32_t rpmsgShmemSize = (uint32_t) Image$$RPMSG_SH_MEM_unused$$ZI$$Limit - rpmsgShmemStart;
+ #elif defined(__MCUXPRESSO)
+ extern uint32_t __base_rpmsg_sh_mem;
+ extern uint32_t __top_rpmsg_sh_mem;
+ uint32_t rpmsgShmemStart = (uint32_t) (&__base_rpmsg_sh_mem);
+ uint32_t rpmsgShmemSize = (uint32_t) (&__top_rpmsg_sh_mem) - rpmsgShmemStart;
+ #elif defined(__ICCARM__) || defined(__GNUC__)
+ extern uint32_t __RPMSG_SH_MEM_START[];
+ extern uint32_t __RPMSG_SH_MEM_SIZE[];
+ uint32_t rpmsgShmemStart = (uint32_t) __RPMSG_SH_MEM_START;
+ uint32_t rpmsgShmemSize = (uint32_t) __RPMSG_SH_MEM_SIZE;
+ #endif
+ #endif
+ uint32_t i = 0;
+
+ /* Only config non-cacheable region on system bus */
+ assert(nonCacheStart >= 0x20000000);
+
+ /* Disable code bus cache */
+ if (LMEM_PCCCR_ENCACHE_MASK == (LMEM_PCCCR_ENCACHE_MASK & LMEM->PCCCR)) {
+ /* Enable the processor code bus to push all modified lines. */
+ LMEM->PCCCR |= LMEM_PCCCR_PUSHW0_MASK | LMEM_PCCCR_PUSHW1_MASK | LMEM_PCCCR_GO_MASK;
+ /* Wait until the cache command completes. */
+ while ((LMEM->PCCCR & LMEM_PCCCR_GO_MASK) != 0U) {
+ }
+ /* As a precaution clear the bits to avoid inadvertently re-running this command. */
+ LMEM->PCCCR &= ~(LMEM_PCCCR_PUSHW0_MASK | LMEM_PCCCR_PUSHW1_MASK);
+ /* Now disable the cache. */
+ LMEM->PCCCR &= ~LMEM_PCCCR_ENCACHE_MASK;
+ }
+
+ /* Disable system bus cache */
+ if (LMEM_PSCCR_ENCACHE_MASK == (LMEM_PSCCR_ENCACHE_MASK & LMEM->PSCCR)) {
+ /* Enable the processor system bus to push all modified lines. */
+ LMEM->PSCCR |= LMEM_PSCCR_PUSHW0_MASK | LMEM_PSCCR_PUSHW1_MASK | LMEM_PSCCR_GO_MASK;
+ /* Wait until the cache command completes. */
+ while ((LMEM->PSCCR & LMEM_PSCCR_GO_MASK) != 0U) {
+ }
+ /* As a precaution clear the bits to avoid inadvertently re-running this command. */
+ LMEM->PSCCR &= ~(LMEM_PSCCR_PUSHW0_MASK | LMEM_PSCCR_PUSHW1_MASK);
+ /* Now disable the cache. */
+ LMEM->PSCCR &= ~LMEM_PSCCR_ENCACHE_MASK;
+ }
+
+ /* Disable MPU */
+ ARM_MPU_Disable();
+
+ #if defined(CACHE_MODE_WRITE_THROUGH) && CACHE_MODE_WRITE_THROUGH
+ /* Region 0 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(0, 0x20200000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_1MB);
+
+ /* Region 1 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(1, 0x20300000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_512KB);
+
+ /* Region 2 setting: Memory with Normal type, not shareable, write through */
+ MPU->RBAR = ARM_MPU_RBAR(2, 0x80000000U);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_64MB);
+
+ while ((nonCacheSize >> i) > 0x1U) {
+ i++;
+ }
+
+ if (i != 0) {
+ /* The MPU region size should be 2^N, 5<=N<=32, region base should be multiples of size. */
+ assert(!(nonCacheStart % nonCacheSize));
+ assert(nonCacheSize == (uint32_t) (1 << i));
+ assert(i >= 5);
+
+ /* Region 3 setting: Memory with device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(3, nonCacheStart);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, i - 1);
+ }
+
+ #if defined(__USE_SHMEM)
+ i = 0;
+
+ while ((rpmsgShmemSize >> i) > 0x1U) {
+ i++;
+ }
+
+ if (i != 0) {
+ /* The MPU region size should be 2^N, 5<=N<=32, region base should be multiples of size. */
+ assert(!(rpmsgShmemStart % rpmsgShmemSize));
+ assert(rpmsgShmemSize == (uint32_t) (1 << i));
+ assert(i >= 5);
+
+ /* Region 4 setting: Memory with device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(4, rpmsgShmemStart);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, i - 1);
+ }
+ #endif
+ #else
+ while ((nonCacheSize >> i) > 0x1U) {
+ i++;
+ }
+
+ if (i != 0) {
+ /* The MPU region size should be 2^N, 5<=N<=32, region base should be multiples of size. */
+ assert(!(nonCacheStart % nonCacheSize));
+ assert(nonCacheSize == (uint32_t) (1 << i));
+ assert(i >= 5);
+
+ /* Region 0 setting: Memory with device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(0, nonCacheStart);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, i - 1);
+ }
+
+ #if defined(__USE_SHMEM)
+ i = 0;
+
+ while ((rpmsgShmemSize >> i) > 0x1U) {
+ i++;
+ }
+
+ if (i != 0) {
+ /* The MPU region size should be 2^N, 5<=N<=32, region base should be multiples of size. */
+ assert(!(rpmsgShmemStart % rpmsgShmemSize));
+ assert(rpmsgShmemSize == (uint32_t) (1 << i));
+ assert(i >= 5);
+
+ /* Region 1 setting: Memory with device type, not shareable, non-cacheable */
+ MPU->RBAR = ARM_MPU_RBAR(1, rpmsgShmemStart);
+ MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, i - 1);
+ }
+ #endif
+ #endif
+
+ /* Enable MPU */
+ ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_HFNMIENA_Msk);
+
+ /* Enables the processor system bus to invalidate all lines in both ways.
+ and Initiate the processor system bus cache command. */
+ LMEM->PSCCR |= LMEM_PSCCR_INVW0_MASK | LMEM_PSCCR_INVW1_MASK | LMEM_PSCCR_GO_MASK;
+ /* Wait until the cache command completes */
+ while ((LMEM->PSCCR & LMEM_PSCCR_GO_MASK) != 0U) {
+ }
+ /* As a precaution clear the bits to avoid inadvertently re-running this command. */
+ LMEM->PSCCR &= ~(LMEM_PSCCR_INVW0_MASK | LMEM_PSCCR_INVW1_MASK);
+ /* Now enable the system bus cache. */
+ LMEM->PSCCR |= LMEM_PSCCR_ENCACHE_MASK;
+
+ /* Enables the processor code bus to invalidate all lines in both ways.
+ and Initiate the processor code bus code cache command. */
+ LMEM->PCCCR |= LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_GO_MASK;
+ /* Wait until the cache command completes. */
+ while ((LMEM->PCCCR & LMEM_PCCCR_GO_MASK) != 0U) {
+ }
+ /* As a precaution clear the bits to avoid inadvertently re-running this command. */
+ LMEM->PCCCR &= ~(LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_INVW1_MASK);
+ /* Now enable the code bus cache. */
+ LMEM->PCCCR |= LMEM_PCCCR_ENCACHE_MASK;
+}
#endif
diff --git a/hw/bsp/imxrt/family.cmake b/hw/bsp/imxrt/family.cmake
index d917e9777e..27a5f26aa1 100644
--- a/hw/bsp/imxrt/family.cmake
+++ b/hw/bsp/imxrt/family.cmake
@@ -8,7 +8,9 @@ include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
set(MCU_VARIANT_WITH_CORE ${MCU_VARIANT}${MCU_CORE})
# toolchain set up
-set(CMAKE_SYSTEM_PROCESSOR cortex-m7 CACHE INTERNAL "System Processor")
+if (NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ set(CMAKE_SYSTEM_PROCESSOR cortex-m7 CACHE INTERNAL "System Processor")
+endif ()
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
set(FAMILY_MCUS MIMXRT1XXX CACHE INTERNAL "")
@@ -25,13 +27,13 @@ function(add_board_target BOARD_TARGET)
# LD_FILE and STARTUP_FILE can be defined in board.cmake
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
set(LD_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx${MCU_CORE}_flexspi_nor.ld)
- #set(LD_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx_flexspi_nor.ld)
+ set(LD_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/iar/${MCU_VARIANT}xxxxx${MCU_CORE}_flexspi_nor.icf)
endif ()
set(LD_FILE_Clang ${LD_FILE_GNU})
if (NOT DEFINED STARTUP_FILE_${CMAKE_C_COMPILER_ID})
set(STARTUP_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT_WITH_CORE}.S)
- #set(STARTUP_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT_WITH_CORE}.S)
+ set(STARTUP_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/iar/startup_${MCU_VARIANT_WITH_CORE}.s)
endif ()
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
@@ -58,13 +60,21 @@ function(add_board_target BOARD_TARGET)
endif()
endforeach()
+
target_compile_definitions(${BOARD_TARGET} PUBLIC
- __ARMVFP__=0
- __ARMFPV5__=0
- XIP_EXTERNAL_FLASH=1
- XIP_BOOT_HEADER_ENABLE=1
__STARTUP_CLEAR_BSS
+ CFG_TUSB_MEM_SECTION=__attribute__\(\(section\(\"NonCacheable\"\)\)\)
)
+
+ if (NOT M4 STREQUAL "1")
+ target_compile_definitions(${BOARD_TARGET} PUBLIC
+ __ARMVFP__=0
+ __ARMFPV5__=0
+ XIP_EXTERNAL_FLASH=1
+ XIP_BOOT_HEADER_ENABLE=1
+ )
+ endif ()
+
target_include_directories(${BOARD_TARGET} PUBLIC
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/board
@@ -140,6 +150,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
#family_flash_pyocd(${TARGET})
diff --git a/hw/bsp/imxrt/family.mk b/hw/bsp/imxrt/family.mk
index f00afb6a43..0cf84a4ae9 100644
--- a/hw/bsp/imxrt/family.mk
+++ b/hw/bsp/imxrt/family.mk
@@ -8,13 +8,18 @@ CPU_CORE ?= cortex-m7
MCU_VARIANT_WITH_CORE = ${MCU_VARIANT}${MCU_CORE}
MCU_DIR = $(SDK_DIR)/devices/$(MCU_VARIANT)
+CFLAGS += \
+ -D__STARTUP_CLEAR_BSS \
+ -DCFG_TUSB_MCU=OPT_MCU_MIMXRT1XXX \
+ -DCFG_TUSB_MEM_SECTION='__attribute__((section("NonCacheable")))' \
+
+ifneq ($(M4), 1)
CFLAGS += \
-D__ARMVFP__=0 \
-D__ARMFPV5__=0 \
- -D__STARTUP_CLEAR_BSS \
-DXIP_EXTERNAL_FLASH=1 \
- -DXIP_BOOT_HEADER_ENABLE=1 \
- -DCFG_TUSB_MCU=OPT_MCU_MIMXRT1XXX
+ -DXIP_BOOT_HEADER_ENABLE=1
+endif
ifdef BOARD_TUD_RHPORT
CFLAGS += -DBOARD_TUD_RHPORT=$(BOARD_TUD_RHPORT)
diff --git a/hw/bsp/kinetis_k/boards/frdm_k64f/board.h b/hw/bsp/kinetis_k/boards/frdm_k64f/board.h
index ae8c661828..75a10f9612 100644
--- a/hw/bsp/kinetis_k/boards/frdm_k64f/board.h
+++ b/hw/bsp/kinetis_k/boards/frdm_k64f/board.h
@@ -22,6 +22,11 @@
* THE SOFTWARE.
*/
+/* metadata:
+ name: Freedom K64F
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:FRDM-K64F
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/kinetis_k/boards/teensy_35/board.h b/hw/bsp/kinetis_k/boards/teensy_35/board.h
index f8173447a1..4718a02419 100644
--- a/hw/bsp/kinetis_k/boards/teensy_35/board.h
+++ b/hw/bsp/kinetis_k/boards/teensy_35/board.h
@@ -22,6 +22,11 @@
* THE SOFTWARE.
*/
+/* metadata:
+ name: Teensy 3.5
+ url: https://www.pjrc.com/store/teensy35.html
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/kinetis_k/family.c b/hw/bsp/kinetis_k/family.c
index 30dfe6d761..59d80fa182 100644
--- a/hw/bsp/kinetis_k/family.c
+++ b/hw/bsp/kinetis_k/family.c
@@ -23,6 +23,10 @@
* THE SOFTWARE.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include "fsl_device_registers.h"
diff --git a/hw/bsp/kinetis_k/family.cmake b/hw/bsp/kinetis_k/family.cmake
index c302686295..c621de3881 100644
--- a/hw/bsp/kinetis_k/family.cmake
+++ b/hw/bsp/kinetis_k/family.cmake
@@ -108,6 +108,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
if (DEFINED TEENSY_MCU)
diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h b/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h
index 16f8327225..9e25343074 100644
--- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h
+++ b/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Freedom K32L2A4S
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-K32L2A4S
+*/
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h b/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h
index 790d6fcb00..854340d6d9 100644
--- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h
+++ b/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Freedom K32L2B3
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3
+*/
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/board.h b/hw/bsp/kinetis_k32l2/boards/kuiic/board.h
index ec37023766..f5895fc65d 100644
--- a/hw/bsp/kinetis_k32l2/boards/kuiic/board.h
+++ b/hw/bsp/kinetis_k32l2/boards/kuiic/board.h
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Kuiic
+ url: https://github.com/nxf58843/kuiic
+*/
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/kinetis_k32l2/family.c b/hw/bsp/kinetis_k32l2/family.c
index 92f5ba6d3a..2fcc1b2afd 100644
--- a/hw/bsp/kinetis_k32l2/family.c
+++ b/hw/bsp/kinetis_k32l2/family.c
@@ -25,6 +25,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "fsl_gpio.h"
#include "fsl_port.h"
#include "fsl_clock.h"
diff --git a/hw/bsp/kinetis_k32l2/family.cmake b/hw/bsp/kinetis_k32l2/family.cmake
index 406ae99d3b..e0843b5a4c 100644
--- a/hw/bsp/kinetis_k32l2/family.cmake
+++ b/hw/bsp/kinetis_k32l2/family.cmake
@@ -104,9 +104,9 @@ function(family_configure_example TARGET RTOS)
# Flashing
family_flash_jlink(${TARGET})
+ family_add_bin_hex(${TARGET})
if (DEFINED TEENSY_MCU)
- family_add_bin_hex(${TARGET})
family_flash_teensy(${TARGET})
endif ()
endfunction()
diff --git a/hw/bsp/kinetis_kl/boards/frdm_kl25z/board.h b/hw/bsp/kinetis_kl/boards/frdm_kl25z/board.h
index 23f144666d..b03fe91a86 100644
--- a/hw/bsp/kinetis_kl/boards/frdm_kl25z/board.h
+++ b/hw/bsp/kinetis_kl/boards/frdm_kl25z/board.h
@@ -22,6 +22,11 @@
* THE SOFTWARE.
*/
+/* metadata:
+ name: fomu
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/kinetis_kl/family.c b/hw/bsp/kinetis_kl/family.c
index 254a951765..fe864f3a04 100644
--- a/hw/bsp/kinetis_kl/family.c
+++ b/hw/bsp/kinetis_kl/family.c
@@ -23,6 +23,10 @@
* THE SOFTWARE.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include "fsl_device_registers.h"
diff --git a/hw/bsp/kinetis_kl/family.cmake b/hw/bsp/kinetis_kl/family.cmake
index 85a913d54e..21a264e539 100644
--- a/hw/bsp/kinetis_kl/family.cmake
+++ b/hw/bsp/kinetis_kl/family.cmake
@@ -107,5 +107,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc11/boards/lpcxpresso11u37/board.h b/hw/bsp/lpc11/boards/lpcxpresso11u37/board.h
index 930462f288..c8a48eecb5 100644
--- a/hw/bsp/lpc11/boards/lpcxpresso11u37/board.h
+++ b/hw/bsp/lpc11/boards/lpcxpresso11u37/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: LPCXpresso11U37
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/OM13074
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/lpc11/boards/lpcxpresso11u68/board.h b/hw/bsp/lpc11/boards/lpcxpresso11u68/board.h
index a12fcbef14..50141e4a51 100644
--- a/hw/bsp/lpc11/boards/lpcxpresso11u68/board.h
+++ b/hw/bsp/lpc11/boards/lpcxpresso11u68/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: LPCXpresso11U68
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/OM13058
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/lpc11/family.c b/hw/bsp/lpc11/family.c
index e75bc49190..566449ca0c 100644
--- a/hw/bsp/lpc11/family.c
+++ b/hw/bsp/lpc11/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
diff --git a/hw/bsp/lpc11/family.cmake b/hw/bsp/lpc11/family.cmake
index 8186006564..13ed4c9222 100644
--- a/hw/bsp/lpc11/family.cmake
+++ b/hw/bsp/lpc11/family.cmake
@@ -100,6 +100,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc13/boards/lpcxpresso1347/board.h b/hw/bsp/lpc13/boards/lpcxpresso1347/board.h
index 71e608b46c..acf29fdc61 100644
--- a/hw/bsp/lpc13/boards/lpcxpresso1347/board.h
+++ b/hw/bsp/lpc13/boards/lpcxpresso1347/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: LPCXpresso1347
+ url: https://www.nxp.com/products/no-longer-manufactured/lpcxpresso-board-for-lpc1347:OM13045
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/lpc13/family.c b/hw/bsp/lpc13/family.c
index 7e04c1cf5a..1faa544858 100644
--- a/hw/bsp/lpc13/family.c
+++ b/hw/bsp/lpc13/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "chip.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/lpc13/family.cmake b/hw/bsp/lpc13/family.cmake
index f7f5c0180a..4d0f0110f3 100644
--- a/hw/bsp/lpc13/family.cmake
+++ b/hw/bsp/lpc13/family.cmake
@@ -97,6 +97,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc15/boards/lpcxpresso1549/board.h b/hw/bsp/lpc15/boards/lpcxpresso1549/board.h
index 5ed5b75b2a..1be2045a9d 100644
--- a/hw/bsp/lpc15/boards/lpcxpresso1549/board.h
+++ b/hw/bsp/lpc15/boards/lpcxpresso1549/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso1549
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/OM13056
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc15/family.c b/hw/bsp/lpc15/family.c
index b9ce396486..e23fdec43c 100644
--- a/hw/bsp/lpc15/family.c
+++ b/hw/bsp/lpc15/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
diff --git a/hw/bsp/lpc15/family.cmake b/hw/bsp/lpc15/family.cmake
index 61b47d8523..c87001943c 100644
--- a/hw/bsp/lpc15/family.cmake
+++ b/hw/bsp/lpc15/family.cmake
@@ -99,6 +99,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc17/boards/lpcxpresso1769/board.h b/hw/bsp/lpc17/boards/lpcxpresso1769/board.h
index d6aa98ed91..6f5c128540 100644
--- a/hw/bsp/lpc17/boards/lpcxpresso1769/board.h
+++ b/hw/bsp/lpc17/boards/lpcxpresso1769/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso1769
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/OM13000
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc17/boards/mbed1768/board.h b/hw/bsp/lpc17/boards/mbed1768/board.h
index 2b3ddc9054..2c75cede47 100644
--- a/hw/bsp/lpc17/boards/mbed1768/board.h
+++ b/hw/bsp/lpc17/boards/mbed1768/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: mbed 1768
+ url: https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1700-arm-cortex-m3/arm-mbed-lpc1768-board:OM11043
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc17/family.c b/hw/bsp/lpc17/family.c
index 79281ba410..7d3231f6a9 100644
--- a/hw/bsp/lpc17/family.c
+++ b/hw/bsp/lpc17/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "chip.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/lpc17/family.cmake b/hw/bsp/lpc17/family.cmake
index cccfdac9f2..0f7485f0f6 100644
--- a/hw/bsp/lpc17/family.cmake
+++ b/hw/bsp/lpc17/family.cmake
@@ -98,6 +98,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc18/boards/lpcxpresso18s37/board.h b/hw/bsp/lpc18/boards/lpcxpresso18s37/board.h
index f4c85ddc9a..2cf4dbdf89 100644
--- a/hw/bsp/lpc18/boards/lpcxpresso18s37/board.h
+++ b/hw/bsp/lpc18/boards/lpcxpresso18s37/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso18s37
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso18s37-development-board:OM13076
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc18/boards/mcb1800/board.h b/hw/bsp/lpc18/boards/mcb1800/board.h
index 93b3cd112e..dba7a62a3a 100644
--- a/hw/bsp/lpc18/boards/mcb1800/board.h
+++ b/hw/bsp/lpc18/boards/mcb1800/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Keil MCB1800
+ url: https://www.keil.com/arm/mcb1800/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc18/family.c b/hw/bsp/lpc18/family.c
index 55ef31ee4f..8f6dbcd4a9 100644
--- a/hw/bsp/lpc18/family.c
+++ b/hw/bsp/lpc18/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "chip.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/lpc18/family.cmake b/hw/bsp/lpc18/family.cmake
index 309186667d..ed948c6e87 100644
--- a/hw/bsp/lpc18/family.cmake
+++ b/hw/bsp/lpc18/family.cmake
@@ -96,5 +96,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc40/boards/ea4088_quickstart/board.h b/hw/bsp/lpc40/boards/ea4088_quickstart/board.h
index d5489c1546..ede0a306de 100644
--- a/hw/bsp/lpc40/boards/ea4088_quickstart/board.h
+++ b/hw/bsp/lpc40/boards/ea4088_quickstart/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Embedded Artists LPC4088 QuickStart Board
+ url: https://www.embeddedartists.com/products/lpc4088-quickstart-board/
+*/
+
#ifndef EA4088QS__BOARD_H
#define EA4088QS__BOARD_H
diff --git a/hw/bsp/lpc40/family.c b/hw/bsp/lpc40/family.c
index d6c8ef32a4..b8bc99452a 100644
--- a/hw/bsp/lpc40/family.c
+++ b/hw/bsp/lpc40/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "chip.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/lpc40/family.cmake b/hw/bsp/lpc40/family.cmake
index 4c14da8a7f..f1e8fa50d0 100644
--- a/hw/bsp/lpc40/family.cmake
+++ b/hw/bsp/lpc40/family.cmake
@@ -99,6 +99,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc43/boards/ea4357/board.h b/hw/bsp/lpc43/boards/ea4357/board.h
index fb52e32a71..fca6173618 100644
--- a/hw/bsp/lpc43/boards/ea4357/board.h
+++ b/hw/bsp/lpc43/boards/ea4357/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Embedded Artists LPC4357 Development Kit
+ url: https://www.embeddedartists.com/products/lpc4357-developers-kit/
+*/
+
#ifndef _BOARD_EA4357_H
#define _BOARD_EA4357_H
diff --git a/hw/bsp/lpc43/boards/lpcxpresso43s67/board.h b/hw/bsp/lpc43/boards/lpcxpresso43s67/board.h
index 4dd90fe297..4427905e82 100644
--- a/hw/bsp/lpc43/boards/lpcxpresso43s67/board.h
+++ b/hw/bsp/lpc43/boards/lpcxpresso43s67/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso43S67
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso43s67-development-board:OM13084
+*/
+
#ifndef _BOARD_LPCXPRESSO43S67_H_
#define _BOARD_LPCXPRESSO43S67_H_
diff --git a/hw/bsp/lpc43/family.c b/hw/bsp/lpc43/family.c
index dfee9f5eaa..fe6c7b0c8a 100644
--- a/hw/bsp/lpc43/family.c
+++ b/hw/bsp/lpc43/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
// Suppress warning caused by mcu driver
#ifdef __GNUC__
#pragma GCC diagnostic push
diff --git a/hw/bsp/lpc43/family.cmake b/hw/bsp/lpc43/family.cmake
index 2bacd9ea44..73842c7e72 100644
--- a/hw/bsp/lpc43/family.cmake
+++ b/hw/bsp/lpc43/family.cmake
@@ -104,5 +104,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/lpc51/boards/lpcxpresso51u68/board.h b/hw/bsp/lpc51/boards/lpcxpresso51u68/board.h
index 0a3b37fda5..151fae24b8 100644
--- a/hw/bsp/lpc51/boards/lpcxpresso51u68/board.h
+++ b/hw/bsp/lpc51/boards/lpcxpresso51u68/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: LPCXpresso51u68
+ url: https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpcxpresso51u68-for-the-lpc51u68-mcus:OM40005
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/lpc51/family.c b/hw/bsp/lpc51/family.c
index a0667a7411..0afe33d410 100644
--- a/hw/bsp/lpc51/family.c
+++ b/hw/bsp/lpc51/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "fsl_device_registers.h"
#include "fsl_gpio.h"
#include "fsl_power.h"
diff --git a/hw/bsp/lpc51/family.cmake b/hw/bsp/lpc51/family.cmake
index b9dd8829eb..bd72c60671 100644
--- a/hw/bsp/lpc51/family.cmake
+++ b/hw/bsp/lpc51/family.cmake
@@ -116,6 +116,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
#family_flash_pyocd(${TARGET})
diff --git a/hw/bsp/lpc54/boards/lpcxpresso54114/board.h b/hw/bsp/lpc54/boards/lpcxpresso54114/board.h
index b1ad4258c4..c43ca9d7d3 100644
--- a/hw/bsp/lpc54/boards/lpcxpresso54114/board.h
+++ b/hw/bsp/lpc54/boards/lpcxpresso54114/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso54114
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54114-board:OM13089
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc54/boards/lpcxpresso54608/board.h b/hw/bsp/lpc54/boards/lpcxpresso54608/board.h
index 8bbe181557..e985e97e00 100644
--- a/hw/bsp/lpc54/boards/lpcxpresso54608/board.h
+++ b/hw/bsp/lpc54/boards/lpcxpresso54608/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso54608
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-development-board-for-lpc5460x-mcus:OM13092
+*/
+
#ifndef BOARD_LPCXPRESSO54608_H_
#define BOARD_LPCXPRESSO54608_H_
diff --git a/hw/bsp/lpc54/boards/lpcxpresso54628/board.h b/hw/bsp/lpc54/boards/lpcxpresso54628/board.h
index 6702775125..837d26aef1 100644
--- a/hw/bsp/lpc54/boards/lpcxpresso54628/board.h
+++ b/hw/bsp/lpc54/boards/lpcxpresso54628/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso54628
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso54628-development-board:OM13098
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc54/family.c b/hw/bsp/lpc54/family.c
index 5e6ff22316..9b9b5841bc 100644
--- a/hw/bsp/lpc54/family.c
+++ b/hw/bsp/lpc54/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "fsl_device_registers.h"
#include "fsl_gpio.h"
#include "fsl_power.h"
diff --git a/hw/bsp/lpc54/family.cmake b/hw/bsp/lpc54/family.cmake
index 5c61a07f00..0e4994ab19 100644
--- a/hw/bsp/lpc54/family.cmake
+++ b/hw/bsp/lpc54/family.cmake
@@ -149,6 +149,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
#family_flash_pyocd(${TARGET})
diff --git a/hw/bsp/lpc55/boards/double_m33_express/board.h b/hw/bsp/lpc55/boards/double_m33_express/board.h
index 975e74e92a..dc11e47fc6 100644
--- a/hw/bsp/lpc55/boards/double_m33_express/board.h
+++ b/hw/bsp/lpc55/boards/double_m33_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Double M33 Express
+ url: https://www.crowdsupply.com/steiert-solutions/double-m33-express
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc55/boards/lpcxpresso55s28/board.h b/hw/bsp/lpc55/boards/lpcxpresso55s28/board.h
index f85701b083..907aee6a49 100644
--- a/hw/bsp/lpc55/boards/lpcxpresso55s28/board.h
+++ b/hw/bsp/lpc55/boards/lpcxpresso55s28/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso55s28
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s28-development-board:LPC55S28-EVK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h
index f85701b083..e18d5bbadb 100644
--- a/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h
+++ b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: LPCXpresso55s69
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc55/boards/mcu_link/board.h b/hw/bsp/lpc55/boards/mcu_link/board.h
index 5e17cf9fd4..1d71b3e79f 100644
--- a/hw/bsp/lpc55/boards/mcu_link/board.h
+++ b/hw/bsp/lpc55/boards/mcu_link/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MCU Link
+ url: https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/lpc55/family.c b/hw/bsp/lpc55/family.c
index 68ccf52d52..dbf8d71b75 100644
--- a/hw/bsp/lpc55/family.c
+++ b/hw/bsp/lpc55/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include "fsl_device_registers.h"
diff --git a/hw/bsp/lpc55/family.cmake b/hw/bsp/lpc55/family.cmake
index 21c57fc1fd..367cb3bbdb 100644
--- a/hw/bsp/lpc55/family.cmake
+++ b/hw/bsp/lpc55/family.cmake
@@ -150,6 +150,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
#family_flash_pyocd(${TARGET})
diff --git a/hw/bsp/max32650/boards/max32650evkit/board.h b/hw/bsp/max32650/boards/max32650evkit/board.h
index 196abdaca7..65ed2659e1 100644
--- a/hw/bsp/max32650/boards/max32650evkit/board.h
+++ b/hw/bsp/max32650/boards/max32650evkit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32650 EVKIT
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650-evkit.html#eb-overview
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32650/boards/max32650fthr/board.h b/hw/bsp/max32650/boards/max32650fthr/board.h
index d80a8fcae4..755fa15b5a 100644
--- a/hw/bsp/max32650/boards/max32650fthr/board.h
+++ b/hw/bsp/max32650/boards/max32650fthr/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32650 Feather
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32650fthr.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32650/boards/max32651evkit/board.h b/hw/bsp/max32650/boards/max32651evkit/board.h
index 196abdaca7..0b49ff3096 100644
--- a/hw/bsp/max32650/boards/max32651evkit/board.h
+++ b/hw/bsp/max32650/boards/max32651evkit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32651 EVKIT
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32651-evkit.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32650/family.c b/hw/bsp/max32650/family.c
index bb382cdd42..8f0e567343 100644
--- a/hw/bsp/max32650/family.c
+++ b/hw/bsp/max32650/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Analog Devices
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes" // _mxc_crit_get_state()
diff --git a/hw/bsp/max32650/family.cmake b/hw/bsp/max32650/family.cmake
index 48853b92c6..3545e1c3ae 100644
--- a/hw/bsp/max32650/family.cmake
+++ b/hw/bsp/max32650/family.cmake
@@ -147,6 +147,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_openocd_adi(${TARGET})
diff --git a/hw/bsp/max32666/boards/max32666evkit/board.h b/hw/bsp/max32666/boards/max32666evkit/board.h
index 0ab1483b8c..54589444d0 100644
--- a/hw/bsp/max32666/boards/max32666evkit/board.h
+++ b/hw/bsp/max32666/boards/max32666evkit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32666 EVKIT
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666evkit.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32666/boards/max32666fthr/board.h b/hw/bsp/max32666/boards/max32666fthr/board.h
index c719b748a2..0caea59348 100644
--- a/hw/bsp/max32666/boards/max32666fthr/board.h
+++ b/hw/bsp/max32666/boards/max32666fthr/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32666 Feather
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32666fthr.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32666/family.c b/hw/bsp/max32666/family.c
index f96393fe11..05306c6c9d 100644
--- a/hw/bsp/max32666/family.c
+++ b/hw/bsp/max32666/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Analog Devices
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes" // _mxc_crit_get_state()
diff --git a/hw/bsp/max32666/family.cmake b/hw/bsp/max32666/family.cmake
index fb8c322954..b921b71ce8 100644
--- a/hw/bsp/max32666/family.cmake
+++ b/hw/bsp/max32666/family.cmake
@@ -142,6 +142,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_openocd_adi(${TARGET})
endfunction()
diff --git a/hw/bsp/max32690/boards/apard32690/board.h b/hw/bsp/max32690/boards/apard32690/board.h
index f94097ca9a..87b9c4e88a 100644
--- a/hw/bsp/max32690/boards/apard32690/board.h
+++ b/hw/bsp/max32690/boards/apard32690/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: APARD32690-SL
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/ad-apard32690-sl.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32690/boards/max32690evkit/board.h b/hw/bsp/max32690/boards/max32690evkit/board.h
index 05d60f2205..aa8dbb1de3 100644
--- a/hw/bsp/max32690/boards/max32690evkit/board.h
+++ b/hw/bsp/max32690/boards/max32690evkit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX32690 EVKIT
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max32690evkit.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max32690/family.c b/hw/bsp/max32690/family.c
index 2418168d41..7ba5fbef3d 100644
--- a/hw/bsp/max32690/family.c
+++ b/hw/bsp/max32690/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Analog Devices
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes" // _mxc_crit_get_state()
diff --git a/hw/bsp/max32690/family.cmake b/hw/bsp/max32690/family.cmake
index 96dcfedffd..9ce8892f16 100644
--- a/hw/bsp/max32690/family.cmake
+++ b/hw/bsp/max32690/family.cmake
@@ -147,6 +147,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_openocd_adi(${TARGET})
endfunction()
diff --git a/hw/bsp/max78002/boards/max78002evkit/board.h b/hw/bsp/max78002/boards/max78002evkit/board.h
index f8102c3946..85d55d7de8 100644
--- a/hw/bsp/max78002/boards/max78002evkit/board.h
+++ b/hw/bsp/max78002/boards/max78002evkit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MAX78002 EVKIT
+ url: https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/max78002evkit.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/max78002/family.c b/hw/bsp/max78002/family.c
index 8d51f141c4..5c23f40f9e 100644
--- a/hw/bsp/max78002/family.c
+++ b/hw/bsp/max78002/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Analog Devices
+*/
+
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes" // _mxc_crit_get_state()
diff --git a/hw/bsp/max78002/family.cmake b/hw/bsp/max78002/family.cmake
index 446930bd88..4c9bf806bf 100644
--- a/hw/bsp/max78002/family.cmake
+++ b/hw/bsp/max78002/family.cmake
@@ -148,6 +148,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_msdk(${TARGET})
endfunction()
diff --git a/hw/bsp/mcx/boards/frdm_mcxa153/board.h b/hw/bsp/mcx/boards/frdm_mcxa153/board.h
index e207d89d9e..fb12900885 100644
--- a/hw/bsp/mcx/boards/frdm_mcxa153/board.h
+++ b/hw/bsp/mcx/boards/frdm_mcxa153/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Freedom MCXA153
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXA153
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/mcx/boards/frdm_mcxn947/board.h b/hw/bsp/mcx/boards/frdm_mcxn947/board.h
index acb73363f7..a35b6818af 100644
--- a/hw/bsp/mcx/boards/frdm_mcxn947/board.h
+++ b/hw/bsp/mcx/boards/frdm_mcxn947/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Freedom MCXN947
+ url: https://www.nxp.com/design/design-center/development-boards-and-designs/FRDM-MCXN947
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/mcx/boards/mcxn947brk/board.h b/hw/bsp/mcx/boards/mcxn947brk/board.h
index eae98bfa70..eef281787e 100644
--- a/hw/bsp/mcx/boards/mcxn947brk/board.h
+++ b/hw/bsp/mcx/boards/mcxn947brk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MCXN947 Breakout
+ url: n/a
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/mcx/family.c b/hw/bsp/mcx/family.c
index ce54097fe1..2b9c60bebb 100644
--- a/hw/bsp/mcx/family.c
+++ b/hw/bsp/mcx/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: NXP
+*/
+
#include "bsp/board_api.h"
#include "fsl_device_registers.h"
#include "fsl_gpio.h"
diff --git a/hw/bsp/mcx/family.cmake b/hw/bsp/mcx/family.cmake
index 223afb9eca..b1d2a18ec0 100644
--- a/hw/bsp/mcx/family.cmake
+++ b/hw/bsp/mcx/family.cmake
@@ -125,6 +125,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
#family_flash_nxplink(${TARGET})
#family_flash_pyocd(${TARGET})
diff --git a/hw/bsp/mm32/boards/mm32f327x_mb39/board.h b/hw/bsp/mm32/boards/mm32f327x_mb39/board.h
index 3ac048cf13..ee08000308 100644
--- a/hw/bsp/mm32/boards/mm32f327x_mb39/board.h
+++ b/hw/bsp/mm32/boards/mm32f327x_mb39/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: MM32F3273G9P MB-039
+ url: https://www.mindmotion.com.cn/support/development_tools/evaluation_boards/evboard/mm32f3273g9p/
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/mm32/boards/mm32f327x_pitaya_lite/board.h b/hw/bsp/mm32/boards/mm32f327x_pitaya_lite/board.h
index 2b3f54a601..522d494a8c 100644
--- a/hw/bsp/mm32/boards/mm32f327x_pitaya_lite/board.h
+++ b/hw/bsp/mm32/boards/mm32f327x_pitaya_lite/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: DshanMCU Pitaya Lite with MM32F3273G8P
+ url: https://gitee.com/weidongshan/DshanMCU-Pitaya-c
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/mm32/family.c b/hw/bsp/mm32/family.c
index f0fd6d334d..979efb6caa 100644
--- a/hw/bsp/mm32/family.c
+++ b/hw/bsp/mm32/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: MindMotion
+*/
+
#include "hal_conf.h"
#include "mm32_device.h"
diff --git a/hw/bsp/mm32/family.cmake b/hw/bsp/mm32/family.cmake
index bf315acaa9..93f297b8e1 100644
--- a/hw/bsp/mm32/family.cmake
+++ b/hw/bsp/mm32/family.cmake
@@ -97,5 +97,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/msp430/boards/msp_exp430f5529lp/board.h b/hw/bsp/msp430/boards/msp_exp430f5529lp/board.h
index ccfe321c20..8fbe5cc493 100644
--- a/hw/bsp/msp430/boards/msp_exp430f5529lp/board.h
+++ b/hw/bsp/msp430/boards/msp_exp430f5529lp/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MSP430F5529 LaunchPad
+ url: https://www.ti.com/tool/MSP-EXP430F5529LP
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/msp430/family.c b/hw/bsp/msp430/family.c
index 5bb3d38666..a45bd5f931 100644
--- a/hw/bsp/msp430/family.c
+++ b/hw/bsp/msp430/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Texas Instruments
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include "msp430.h"
diff --git a/hw/bsp/msp432e4/boards/msp_exp432e401y/board.h b/hw/bsp/msp432e4/boards/msp_exp432e401y/board.h
index 3130d663b0..6206bb247d 100644
--- a/hw/bsp/msp432e4/boards/msp_exp432e401y/board.h
+++ b/hw/bsp/msp432e4/boards/msp_exp432e401y/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: MSP432E401Y LaunchPad
+ url: https://www.ti.com/tool/MSP-EXP432E401Y
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/msp432e4/family.c b/hw/bsp/msp432e4/family.c
index d5ef7f930d..9a3b48b660 100644
--- a/hw/bsp/msp432e4/family.c
+++ b/hw/bsp/msp432e4/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Texas Instruments
+*/
+
#include "bsp/board_api.h"
#include "board.h"
#include "msp.h"
diff --git a/hw/bsp/nrf/boards/adafruit_clue/board.h b/hw/bsp/nrf/boards/adafruit_clue/board.h
index 8d6df786e6..a5d90f608a 100644
--- a/hw/bsp/nrf/boards/adafruit_clue/board.h
+++ b/hw/bsp/nrf/boards/adafruit_clue/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit CLUE
+ url: https://www.adafruit.com/product/4500
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/arduino_nano33_ble/board.h b/hw/bsp/nrf/boards/arduino_nano33_ble/board.h
index 00fa8d8ea2..6e6a079aba 100644
--- a/hw/bsp/nrf/boards/arduino_nano33_ble/board.h
+++ b/hw/bsp/nrf/boards/arduino_nano33_ble/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Arduino Nano 33 BLE
+ url: https://store.arduino.cc/arduino-nano-33-ble
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/circuitplayground_bluefruit/board.h b/hw/bsp/nrf/boards/circuitplayground_bluefruit/board.h
index 3dd354efa2..4cdac5f9f7 100644
--- a/hw/bsp/nrf/boards/circuitplayground_bluefruit/board.h
+++ b/hw/bsp/nrf/boards/circuitplayground_bluefruit/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Circuit Playground Bluefruit
+ url: https://www.adafruit.com/product/4333
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/feather_nrf52840_express/board.h b/hw/bsp/nrf/boards/feather_nrf52840_express/board.h
index 3d59516d83..bfbb986777 100644
--- a/hw/bsp/nrf/boards/feather_nrf52840_express/board.h
+++ b/hw/bsp/nrf/boards/feather_nrf52840_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather nRF52840 Express
+ url: https://www.adafruit.com/product/4062
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/feather_nrf52840_sense/board.h b/hw/bsp/nrf/boards/feather_nrf52840_sense/board.h
index 605deea246..288a1b52e2 100644
--- a/hw/bsp/nrf/boards/feather_nrf52840_sense/board.h
+++ b/hw/bsp/nrf/boards/feather_nrf52840_sense/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather nRF52840 Sense
+ url: https://www.adafruit.com/product/4516
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/itsybitsy_nrf52840/board.h b/hw/bsp/nrf/boards/itsybitsy_nrf52840/board.h
index 33c370f53b..5f065eec0b 100644
--- a/hw/bsp/nrf/boards/itsybitsy_nrf52840/board.h
+++ b/hw/bsp/nrf/boards/itsybitsy_nrf52840/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit ItsyBitsy nRF52840 Express
+ url: https://www.adafruit.com/product/4481
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/pca10056/board.h b/hw/bsp/nrf/boards/pca10056/board.h
index 24d3faa65a..ec632e769c 100644
--- a/hw/bsp/nrf/boards/pca10056/board.h
+++ b/hw/bsp/nrf/boards/pca10056/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Nordic nRF52840DK
+ url: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/pca10059/board.h b/hw/bsp/nrf/boards/pca10059/board.h
index ea3f4030d1..3b95481ad1 100644
--- a/hw/bsp/nrf/boards/pca10059/board.h
+++ b/hw/bsp/nrf/boards/pca10059/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Nordic nRF52840 Dongle
+ url: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/pca10095/board.h b/hw/bsp/nrf/boards/pca10095/board.h
index 846c2ee5bc..1c79810491 100644
--- a/hw/bsp/nrf/boards/pca10095/board.h
+++ b/hw/bsp/nrf/boards/pca10095/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Nordic nRF5340 DK
+ url: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/boards/pca10100/board.h b/hw/bsp/nrf/boards/pca10100/board.h
index 2b25797326..8aca6dce91 100644
--- a/hw/bsp/nrf/boards/pca10100/board.h
+++ b/hw/bsp/nrf/boards/pca10100/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Nordic nRF52833 DK
+ url: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52833-DK
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/nrf/family.c b/hw/bsp/nrf/family.c
index 885910f9ad..f3132eeb11 100644
--- a/hw/bsp/nrf/family.c
+++ b/hw/bsp/nrf/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Nordic Semiconductor
+*/
+
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/nrf/family.cmake b/hw/bsp/nrf/family.cmake
index 9e86374dc2..7a433d82d2 100644
--- a/hw/bsp/nrf/family.cmake
+++ b/hw/bsp/nrf/family.cmake
@@ -141,6 +141,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
# family_flash_adafruit_nrfutil(${TARGET})
endfunction()
diff --git a/hw/bsp/pic32mz/boards/olimex_emz64/board.h b/hw/bsp/pic32mz/boards/olimex_emz64/board.h
new file mode 100644
index 0000000000..7f42e024fd
--- /dev/null
+++ b/hw/bsp/pic32mz/boards/olimex_emz64/board.h
@@ -0,0 +1,43 @@
+/*
+* The MIT License (MIT)
+ *
+ * Copyright (c) 2020, Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+/* metadata:
+ name: Olimex PIC32-EMZ64
+ url: https://www.olimex.com/Products/PIC/Development/PIC32-EMZ64/open-source-hardware
+*/
+
+#ifndef BOARD_H_
+#define BOARD_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_H_ */
diff --git a/hw/bsp/pic32mz/boards/olimex_hmz144/board.h b/hw/bsp/pic32mz/boards/olimex_hmz144/board.h
new file mode 100644
index 0000000000..c9c07bf771
--- /dev/null
+++ b/hw/bsp/pic32mz/boards/olimex_hmz144/board.h
@@ -0,0 +1,43 @@
+/*
+* The MIT License (MIT)
+ *
+ * Copyright (c) 2020, Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+/* metadata:
+ name: Olimex PIC32-HMZ144
+ url: https://www.olimex.com/Products/PIC/Development/PIC32-HMZ144/open-source-hardware
+*/
+
+#ifndef BOARD_H_
+#define BOARD_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_H_ */
diff --git a/hw/bsp/pic32mz/family.c b/hw/bsp/pic32mz/family.c
index 895e238997..da97f67a96 100644
--- a/hw/bsp/pic32mz/family.c
+++ b/hw/bsp/pic32mz/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include
#include
#include
diff --git a/hw/bsp/ra/board_cfg.h b/hw/bsp/ra/board_cfg.h
index baed46b5fb..825f8cd329 100644
--- a/hw/bsp/ra/board_cfg.h
+++ b/hw/bsp/ra/board_cfg.h
@@ -1,45 +1,13 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2023 Ha Thach (tinyusb.org)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-
-#ifndef _BOARD_CFG_H
-#define _BOARD_CFG_H
-
+/* generated configuration header file - do not edit */
+#ifndef BOARD_CFG_H_
+#define BOARD_CFG_H_
#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(BSP_MCU_GROUP_RA6M5) || defined(BSP_MCU_GROUP_RA6M3) || (BSP_CFG_MCU_PART_SERIES == 8)
- #define BOARD_HAS_USB_HIGHSPEED
-#endif
+ extern "C" {
+ #endif
-// for SystemInit()
-void bsp_init(void * p_args);
-
-
-#ifdef __cplusplus
-}
-#endif
+ void bsp_init(void * p_args);
-#endif
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BOARD_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/board.cmake b/hw/bsp/ra/boards/portenta_c33/board.cmake
index 1837d8450e..520686daa5 100644
--- a/hw/bsp/ra/boards/portenta_c33/board.cmake
+++ b/hw/bsp/ra/boards/portenta_c33/board.cmake
@@ -4,22 +4,13 @@ set(MCU_VARIANT ra6m5)
set(JLINK_DEVICE R7FA6M5BH)
set(DFU_UTIL_VID_PID 2341:0368)
-set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/${BOARD}.ld)
-
-# Device port default to PORT1 Highspeed
-if (NOT DEFINED PORT)
-set(PORT 1)
+# device default to PORT 1 High Speed
+if (NOT DEFINED RHPORT_DEVICE)
+ set(RHPORT_DEVICE 1)
+endif()
+if (NOT DEFINED RHPORT_HOST)
+ set(RHPORT_HOST 0)
endif()
-
-# Host port will be the other port
-set(HOST_PORT $)
function(update_board TARGET)
- target_compile_definitions(${TARGET} PUBLIC
- BOARD_TUD_RHPORT=${PORT}
- BOARD_TUH_RHPORT=${HOST_PORT}
- # port 0 is fullspeed, port 1 is highspeed
- BOARD_TUD_MAX_SPEED=$
- BOARD_TUH_MAX_SPEED=$
- )
endfunction()
diff --git a/hw/bsp/ra/boards/portenta_c33/board.h b/hw/bsp/ra/boards/portenta_c33/board.h
index 7841ec8b84..7853c2dbd0 100644
--- a/hw/bsp/ra/boards/portenta_c33/board.h
+++ b/hw/bsp/ra/boards/portenta_c33/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Arduino Portenta C33
+ url: https://www.arduino.cc/pro/hardware-product-portenta-c33/
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,36 +36,9 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_01_PIN_07 // Red LED
#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_04_PIN_08 // D12
#define BUTTON_STATE_ACTIVE 0
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- { .pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_PORT_OUTPUT_LOW },
- { .pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT },
-
- // USB FS
- { .pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH },
- { .pin = BSP_IO_PORT_05_PIN_00, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH},
- { .pin = BSP_IO_PORT_05_PIN_01, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH},
-
- // USB HS
- { .pin = BSP_IO_PORT_07_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS },
- { .pin = BSP_IO_PORT_11_PIN_00, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS | IOPORT_CFG_DRIVE_HIGH},
- { .pin = BSP_IO_PORT_11_PIN_01, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS | IOPORT_CFG_DRIVE_HIGH},
-
- // ETM Trace
- #ifdef TRACE_ETM
- { .pin = BSP_IO_PORT_02_PIN_08, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_09, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_10, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_11, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_14, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- #endif
-};
-
#ifdef __cplusplus
}
#endif
diff --git a/hw/bsp/ra/boards/portenta_c33/board.mk b/hw/bsp/ra/boards/portenta_c33/board.mk
index 6a5c2ffce8..ab814cda6c 100644
--- a/hw/bsp/ra/boards/portenta_c33/board.mk
+++ b/hw/bsp/ra/boards/portenta_c33/board.mk
@@ -1,10 +1,9 @@
CPU_CORE = cortex-m33
MCU_VARIANT = ra6m5
-LD_FILE = ${BOARD_PATH}/${BOARD}.ld
-
# Port 1 is highspeed
-PORT ?= 1
+RHPORT_DEVICE ?= 1
+RHPORT_HOST ?= 0
JLINK_DEVICE = R7FA6M5BH
DFU_UTIL_OPTION = -d 2341:0368 -a 0
diff --git a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 33d3818501..0000000000
--- a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#define RA_NOT_DEFINED 0
-#ifndef BSP_CFG_RTOS
-#if (RA_NOT_DEFINED) != (2)
-#define BSP_CFG_RTOS (2)
-#elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
- #define BSP_CFG_RTOS (1)
-#else
- #define BSP_CFG_RTOS (0)
-#endif
-#endif
-#ifndef BSP_CFG_RTC_USED
-#define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
-#endif
-#undef RA_NOT_DEFINED
-#if defined(_RA_BOOT_IMAGE)
- #define BSP_CFG_BOOT_IMAGE (1)
-#endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x1000)
-#define BSP_CFG_HEAP_BYTES (0x1000)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-#endif
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 6845183db5..0000000000
--- a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA6M5BH3CFC
-#define BSP_MCU_FEATURE_SET ('B')
-#define BSP_ROM_SIZE_BYTES (2097152)
-#define BSP_RAM_SIZE_BYTES (524288)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (176)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/portenta_c33.ld b/hw/bsp/ra/boards/portenta_c33/portenta_c33.ld
deleted file mode 100644
index ba15588e61..0000000000
--- a/hw/bsp/ra/boards/portenta_c33/portenta_c33.ld
+++ /dev/null
@@ -1,25 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x80000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x200000;
-DATA_FLASH_START = 0x08000000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x0100A100;
-OPTION_SETTING_LENGTH = 0x100;
-OPTION_SETTING_S_START = 0x0100A200;
-OPTION_SETTING_S_LENGTH = 0x100;
-ID_CODE_START = 0x00000000;
-ID_CODE_LENGTH = 0x0;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x4000000;
-OSPI_DEVICE_0_START = 0x68000000;
-OSPI_DEVICE_0_LENGTH = 0x8000000;
-OSPI_DEVICE_1_START = 0x70000000;
-OSPI_DEVICE_1_LENGTH = 0x10000000;
-
-/* Board has bootloader */
-FLASH_IMAGE_START = 0x10000;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..90afbdef3d
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x1000)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..e532478f8f
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA6M5BH3CFC
+ #define BSP_MCU_FEATURE_SET ('B')
+ #define BSP_ROM_SIZE_BYTES (2097152)
+ #define BSP_RAM_SIZE_BYTES (524288)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (176)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
similarity index 56%
rename from hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
rename to hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
index d5428540fb..c01219377a 100644
--- a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -5,80 +5,80 @@
extern "C" {
#endif
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "../../../ra/fsp/src/bsp/mcu/ra6m5/bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-
-#define BSP_MCU_GROUP_RA6M5 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
-#define BSP_HOCO_HZ (16000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 1
- #define BSP_HOCO_HZ (18000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (20000000)
-#else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
-#endif
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra6m5/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA6M5 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (16000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 1
+ #define BSP_HOCO_HZ (18000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (20000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
-#define BSP_CFG_FLL_ENABLE (0)
+ #define BSP_CFG_FLL_ENABLE (0)
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
-#if defined(_RA_TZ_SECURE)
+ #if defined(_RA_TZ_SECURE)
#define BSP_TZ_SECURE_BUILD (1)
#define BSP_TZ_NONSECURE_BUILD (0)
#elif defined(_RA_TZ_NONSECURE)
#define BSP_TZ_SECURE_BUILD (0)
#define BSP_TZ_NONSECURE_BUILD (1)
#else
-#define BSP_TZ_SECURE_BUILD (0)
-#define BSP_TZ_NONSECURE_BUILD (0)
-#endif
-
-/* TrustZone Settings */
-#define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
-#define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
-#define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
-
-/* CMSIS TrustZone Settings */
-#define SCB_CSR_AIRCR_INIT (1)
-#define SCB_AIRCR_BFHFNMINS_VAL (0)
-#define SCB_AIRCR_SYSRESETREQS_VAL (1)
-#define SCB_AIRCR_PRIS_VAL (0)
-#define TZ_FPU_NS_USAGE (1)
+ #define BSP_TZ_SECURE_BUILD (0)
+ #define BSP_TZ_NONSECURE_BUILD (0)
+ #endif
+
+ /* TrustZone Settings */
+ #define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
+ #define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
+ #define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
+
+ /* CMSIS TrustZone Settings */
+ #define SCB_CSR_AIRCR_INIT (1)
+ #define SCB_AIRCR_BFHFNMINS_VAL (0)
+ #define SCB_AIRCR_SYSRESETREQS_VAL (1)
+ #define SCB_AIRCR_PRIS_VAL (0)
+ #define TZ_FPU_NS_USAGE (1)
#ifndef SCB_NSACR_CP10_11_VAL
-#define SCB_NSACR_CP10_11_VAL (3U)
+ #define SCB_NSACR_CP10_11_VAL (3U)
#endif
#ifndef FPU_FPCCR_TS_VAL
-#define FPU_FPCCR_TS_VAL (1U)
+ #define FPU_FPCCR_TS_VAL (1U)
#endif
-#define FPU_FPCCR_CLRONRETS_VAL (1)
+ #define FPU_FPCCR_CLRONRETS_VAL (1)
#ifndef FPU_FPCCR_CLRONRET_VAL
-#define FPU_FPCCR_CLRONRET_VAL (1)
+ #define FPU_FPCCR_CLRONRET_VAL (1)
#endif
-/* The C-Cache line size that is configured during startup. */
+ /* The C-Cache line size that is configured during startup. */
#ifndef BSP_CFG_C_CACHE_LINE_SIZE
-#define BSP_CFG_C_CACHE_LINE_SIZE (1U)
+ #define BSP_CFG_C_CACHE_LINE_SIZE (1U)
#endif
-/* Type 1 Peripheral Security Attribution */
+ /* Type 1 Peripheral Security Attribution */
-/* Peripheral Security Attribution Register (PSAR) Settings */
+ /* Peripheral Security Attribution Register (PSAR) Settings */
#ifndef BSP_TZ_CFG_PSARB
#define BSP_TZ_CFG_PSARB (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CAN1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* CAN0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* IIC1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* IIC0 */ | \
- (((1 > 0) ? 0U : 1U) << 11) /* USBFS */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* USBFS */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* SCI9 */ | \
@@ -146,19 +146,19 @@ extern "C" {
0xfffffffc) /* Unused */
#endif
-/* Type 2 Peripheral Security Attribution */
+ /* Type 2 Peripheral Security Attribution */
-/* Security attribution for Cache registers. */
+ /* Security attribution for Cache registers. */
#ifndef BSP_TZ_CFG_CSAR
#define BSP_TZ_CFG_CSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for RSTSRn registers. */
+ /* Security attribution for RSTSRn registers. */
#ifndef BSP_TZ_CFG_RSTSAR
#define BSP_TZ_CFG_RSTSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for registers of LVD channels. */
+ /* Security attribution for registers of LVD channels. */
#ifndef BSP_TZ_CFG_LVDSAR
#define BSP_TZ_CFG_LVDSAR (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) | /* LVD Channel 1 */ \
@@ -166,16 +166,16 @@ extern "C" {
0xFFFFFFFCU)
#endif
-/* Security attribution for LPM registers. */
+ /* Security attribution for LPM registers. */
#ifndef BSP_TZ_CFG_LPMSAR
#define BSP_TZ_CFG_LPMSAR ((RA_NOT_DEFINED > 0) ? 0xFFFFFCEAU : 0xFFFFFFFFU)
#endif
-/* Deep Standby Interrupt Factor Security Attribution Register. */
+ /* Deep Standby Interrupt Factor Security Attribution Register. */
#ifndef BSP_TZ_CFG_DPFSAR
#define BSP_TZ_CFG_DPFSAR ((RA_NOT_DEFINED > 0) ? 0xF2E00000U : 0xFFFFFFFFU)
#endif
-/* Security attribution for CGC registers. */
+ /* Security attribution for CGC registers. */
#ifndef BSP_TZ_CFG_CGFSAR
#if BSP_CFG_CLOCKS_SECURE
/* Protect all CGC registers from Non-secure write access. */
@@ -186,12 +186,12 @@ extern "C" {
#endif
#endif
-/* Security attribution for Battery Backup registers. */
+ /* Security attribution for Battery Backup registers. */
#ifndef BSP_TZ_CFG_BBFSAR
#define BSP_TZ_CFG_BBFSAR (0x00FFFFFF)
#endif
-/* Security attribution for registers for IRQ channels. */
+ /* Security attribution for registers for IRQ channels. */
#ifndef BSP_TZ_CFG_ICUSARA
#define BSP_TZ_CFG_ICUSARA (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \
@@ -213,12 +213,12 @@ extern "C" {
0xFFFF0000U)
#endif
-/* Security attribution for NMI registers. */
+ /* Security attribution for NMI registers. */
#ifndef BSP_TZ_CFG_ICUSARB
#define BSP_TZ_CFG_ICUSARB (0 | 0xFFFFFFFEU) /* Should match AIRCR.BFHFNMINS. */
#endif
-/* Security attribution for registers for DMAC channels */
+ /* Security attribution for registers for DMAC channels */
#ifndef BSP_TZ_CFG_ICUSARC
#define BSP_TZ_CFG_ICUSARC (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \
@@ -232,29 +232,29 @@ extern "C" {
0xFFFFFF00U)
#endif
-/* Security attribution registers for SELSR0. */
+ /* Security attribution registers for SELSR0. */
#ifndef BSP_TZ_CFG_ICUSARD
#define BSP_TZ_CFG_ICUSARD ((RA_NOT_DEFINED > 0) ? 0xFFFFFFFEU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN0. */
+ /* Security attribution registers for WUPEN0. */
#ifndef BSP_TZ_CFG_ICUSARE
#define BSP_TZ_CFG_ICUSARE ((RA_NOT_DEFINED > 0) ? 0x04F2FFFFU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN1. */
+ /* Security attribution registers for WUPEN1. */
#ifndef BSP_TZ_CFG_ICUSARF
#define BSP_TZ_CFG_ICUSARF ((RA_NOT_DEFINED > 0) ? 0xFFFFFFF8U : 0xFFFFFFFFU)
#endif
-/* Set DTCSTSAR if the Secure program uses the DTC. */
+ /* Set DTCSTSAR if the Secure program uses the DTC. */
#if RA_NOT_DEFINED == RA_NOT_DEFINED
-#define BSP_TZ_CFG_DTC_USED (0U)
+ #define BSP_TZ_CFG_DTC_USED (0U)
#else
#define BSP_TZ_CFG_DTC_USED (1U)
#endif
-/* Security attribution of FLWT and FCKMHZ registers. */
+ /* Security attribution of FLWT and FCKMHZ registers. */
#ifndef BSP_TZ_CFG_FSAR
/* If the CGC registers are only accessible in Secure mode, than there is no
* reason for nonsecure applications to access FLWT and FCKMHZ. */
@@ -267,118 +267,123 @@ extern "C" {
#endif
#endif
-/* Security attribution for SRAM registers. */
+ /* Security attribution for SRAM registers. */
#ifndef BSP_TZ_CFG_SRAMSAR
/* If the CGC registers are only accessible in Secure mode, than there is no reason for Non Secure applications to access
* SRAM0WTEN and therefore there is no reason to access PRCR2. */
-#define BSP_TZ_CFG_SRAMSAR (\
+ #define BSP_TZ_CFG_SRAMSAR (\
1 | \
((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 1U) : 0U) | \
4 | \
0xFFFFFFF8U)
#endif
-/* Security attribution for Standby RAM registers. */
+ /* Security attribution for Standby RAM registers. */
#ifndef BSP_TZ_CFG_STBRAMSAR
-#define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
+ #define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
#endif
-/* Security attribution for the DMAC Bus Master MPU settings. */
+ /* Security attribution for the DMAC Bus Master MPU settings. */
#ifndef BSP_TZ_CFG_MMPUSARA
-/* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
-#define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
+ /* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
+ #define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
#endif
-/* Security Attribution Register A for BUS Control registers. */
+ /* Security Attribution Register A for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARA
-#define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
#endif
-/* Security Attribution Register B for BUS Control registers. */
+ /* Security Attribution Register B for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARB
-#define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
#endif
-/* Enable Uninitialized Non-Secure Application Fallback. */
+ /* Enable Uninitialized Non-Secure Application Fallback. */
#ifndef BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK
-#define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
+ #define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
#endif
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-/* Option Function Select Register 1 Security Attribution */
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+
+ /* Option Function Select Register 1 Security Attribution */
#ifndef BSP_CFG_ROM_REG_OFS1_SEL
#if defined(_RA_TZ_SECURE) || defined(_RA_TZ_NONSECURE)
- #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U) | ((RA_NOT_DEFINED > 0) ? 0U : 0x7U))
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((0U << 0U)) | ((0U << 2U)) | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U))
#else
-#define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
#endif
#endif
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-/* Dual Mode Select Register */
+ /* Dual Mode Select Register */
#ifndef BSP_CFG_ROM_REG_DUALSEL
-#define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (0x7U))
+ #define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (0x7U))
#endif
-/* Block Protection Register 0 */
+ /* Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_BPS0
-#define BSP_CFG_ROM_REG_BPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS0 (~( 0U))
#endif
-/* Block Protection Register 1 */
+ /* Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_BPS1
-#define BSP_CFG_ROM_REG_BPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS1 (~( 0U))
#endif
-/* Block Protection Register 2 */
+ /* Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_BPS2
-#define BSP_CFG_ROM_REG_BPS2 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS2 (~( 0U))
#endif
-/* Block Protection Register 3 */
+ /* Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_BPS3
-#define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
#endif
-/* Permanent Block Protection Register 0 */
+ /* Permanent Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_PBPS0
-#define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
#endif
-/* Permanent Block Protection Register 1 */
+ /* Permanent Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_PBPS1
-#define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
#endif
-/* Permanent Block Protection Register 2 */
+ /* Permanent Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_PBPS2
-#define BSP_CFG_ROM_REG_PBPS2 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS2 (~( 0U))
#endif
-/* Permanent Block Protection Register 3 */
+ /* Permanent Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_PBPS3
-#define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
#endif
-/* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL0
-#define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
+ #define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
#endif
-/* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL1
-#define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
+ #define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
#endif
-/* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL2
-#define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2)
+ #define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2)
#endif
-/* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL3
-#define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3)
+ #define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3)
+#endif
+ /* Security Attribution for Bank Select Register */
+#ifndef BSP_CFG_ROM_REG_BANKSEL_SEL
+ #define BSP_CFG_ROM_REG_BANKSEL_SEL (0xFFFFFFFFU)
#endif
#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
#endif
#ifdef __cplusplus
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..c411386c14
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,17 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define LED1 (BSP_IO_PORT_01_PIN_07)
+#define SW1 (BSP_IO_PORT_04_PIN_08)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* R7FA6M5BH3CFC.pincfg */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/r_ioport_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/r_ioport_cfg.h
similarity index 75%
rename from hw/bsp/ra/r_ioport_cfg.h
rename to hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/r_ioport_cfg.h
index cb7c079326..d2688bf5ba 100644
--- a/hw/bsp/ra/r_ioport_cfg.h
+++ b/hw/bsp/ra/boards/portenta_c33/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -1,7 +1,13 @@
/* generated configuration header file - do not edit */
#ifndef R_IOPORT_CFG_H_
#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+#ifdef __cplusplus
+}
+#endif
#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_gen/bsp_clock_cfg.h b/hw/bsp/ra/boards/portenta_c33/ra_gen/bsp_clock_cfg.h
new file mode 100644
index 0000000000..91b9de11e3
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_gen/bsp_clock_cfg.h
@@ -0,0 +1,35 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CLOCK_CFG_H_
+#define BSP_CLOCK_CFG_H_
+#define BSP_CFG_CLOCKS_SECURE (0)
+#define BSP_CFG_CLOCKS_OVERRIDE (0)
+#define BSP_CFG_XTAL_HZ (24000000) /* XTAL 24000000Hz */
+#define BSP_CFG_HOCO_FREQUENCY (2) /* HOCO 20MHz */
+#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
+#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_3) /* PLL Div /3 */
+#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(25U,0U) /* PLL Mul x25.0 */
+#define BSP_CFG_PLL2_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL2 Src: XTAL */
+#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL2 Div /2 */
+#define BSP_CFG_PLL2_MUL BSP_CLOCKS_PLL_MUL(20U,0U) /* PLL2 Mul x20.0 */
+#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* Clock Src: PLL */
+#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
+#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL2) /* UCLK Src: PLL2 */
+#define BSP_CFG_U60CK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL2) /* U60CK Src: PLL2 */
+#define BSP_CFG_OCTA_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* OCTASPICLK Disabled */
+#define BSP_CFG_CANFDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CANFDCLK Disabled */
+#define BSP_CFG_CECCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CECCLK Disabled */
+#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
+#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKA Div /2 */
+#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKB Div /4 */
+#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKC Div /4 */
+#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */
+#define BSP_CFG_BCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* BCLK Div /2 */
+#define BSP_CFG_BCLK_OUTPUT (2) /* EBCLK Div /2 */
+#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* FCLK Div /4 */
+#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
+#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCLK Div /5 */
+#define BSP_CFG_U60CK_DIV (BSP_CLOCKS_USB60_CLOCK_DIV_4) /* U60CK Div /4 */
+#define BSP_CFG_OCTA_DIV (BSP_CLOCKS_OCTA_CLOCK_DIV_1) /* OCTASPICLK Div /1 */
+#define BSP_CFG_CANFDCLK_DIV (BSP_CLOCKS_CANFD_CLOCK_DIV_1) /* CANFDCLK Div /1 */
+#define BSP_CFG_CECCLK_DIV (BSP_CLOCKS_CEC_CLOCK_DIV_1) /* CECCLK Div /1 */
+#endif /* BSP_CLOCK_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.c b/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.h b/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/ra_gen/pin_data.c b/hw/bsp/ra/boards/portenta_c33/ra_gen/pin_data.c
new file mode 100644
index 0000000000..fad79741a5
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/ra_gen/pin_data.c
@@ -0,0 +1,71 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_01_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_11_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/linker/gcc/fsp.ld b/hw/bsp/ra/boards/portenta_c33/script/fsp.ld
similarity index 78%
rename from hw/bsp/ra/linker/gcc/fsp.ld
rename to hw/bsp/ra/boards/portenta_c33/script/fsp.ld
index 453d46f241..605eef7d2c 100644
--- a/hw/bsp/ra/linker/gcc/fsp.ld
+++ b/hw/bsp/ra/boards/portenta_c33/script/fsp.ld
@@ -1,3 +1,9 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
/*
XIP_SECONDARY_SLOT_IMAGE = 1;
@@ -14,8 +20,6 @@ ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
-NS_OFFSET_START = DEFINED(NS_OFFSET_START) ? NS_OFFSET_START : 0;
-NS_IMAGE_OFFSET = DEFINED(PROJECT_NONSECURE) ? NS_OFFSET_START : 0;
RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
@@ -32,20 +36,21 @@ PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)
USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
- FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
- FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
- FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
__bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
- __bl_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH;
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
@@ -55,7 +60,7 @@ __bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
__bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
-__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
@@ -67,30 +72,34 @@ FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
/* Define memory regions. */
MEMORY
{
- ITCM (rx) : ORIGIN = ITCM_START + NS_IMAGE_OFFSET, LENGTH = ITCM_LENGTH
- DTCM (rwx) : ORIGIN = DTCM_START + NS_IMAGE_OFFSET, LENGTH = DTCM_LENGTH
- FLASH (rx) : ORIGIN = FLASH_ORIGIN + NS_IMAGE_OFFSET, LENGTH = LIMITED_FLASH_LENGTH
- RAM (rwx) : ORIGIN = RAM_START + NS_IMAGE_OFFSET, LENGTH = RAM_LENGTH
- DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START + NS_IMAGE_OFFSET, LENGTH = DATA_FLASH_LENGTH
- QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
- OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
- OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
- OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
- OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
- SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
- OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START + NS_IMAGE_OFFSET, LENGTH = OPTION_SETTING_LENGTH
- OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START + NS_IMAGE_OFFSET, LENGTH = 0x18
- OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + NS_IMAGE_OFFSET + 0x34, LENGTH = OPTION_SETTING_LENGTH - 0x34
- OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START + NS_IMAGE_OFFSET, LENGTH = OPTION_SETTING_S_LENGTH
- ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
}
/* Library configurations */
-GROUP(libgcc.a libc.a libm.a libnosys.a)
+GROUP(libgcc.a libc.a libm.a)
/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
@@ -144,27 +153,6 @@ ENTRY(Reset_Handler)
SECTIONS
{
- /* Initialized ITCM data. */
- .itcm_data :
- {
- /* Start of ITCM Secure Trustzone region. */
- __tz_ITCM_S = ABSOLUTE(ITCM_START);
-
- /* All ITCM data start */
- __itcm_data_start__ = .;
-
- KEEP(*(.itcm_data*))
-
- /* All ITCM data end */
- __itcm_data_end__ = .;
-
- /*
- * Start of the ITCM Non-Secure Trustzone region.
- * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
- */
- __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end__, 8192);
- } > ITCM
-
.text :
{
__tz_FLASH_S = ABSOLUTE(FLASH_START);
@@ -177,6 +165,10 @@ SECTIONS
KEEP(*(.application_vectors*))
__Vectors_End = .;
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
/* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
. = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
KEEP(*(.rom_registers*))
@@ -187,7 +179,6 @@ SECTIONS
/* Allocate flash write-boundary-aligned
* space for sce9 wrapped public keys for mcuboot if the module is used.
*/
- . = ALIGN(128);
KEEP(*(.mcuboot_sce9_key*))
*(.text*)
@@ -233,16 +224,54 @@ SECTIONS
__Vectors_Size = __Vectors_End - __Vectors;
- .ARM.extab :
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
{
- *(.ARM.extab* .gnu.linkonce.armextab.*)
- } > FLASH
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
__exidx_start = .;
- .ARM.exidx :
+ /DISCARD/ :
{
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
- } > FLASH
+ }
__exidx_end = .;
/* To copy multiple ROM to RAM sections,
@@ -337,50 +366,76 @@ SECTIONS
} > RAM AT > FLASH
- /* Start address of the initial values for .dtcm_data. */
- __dtcm_data_init_start = __etext + __data_end__ - __data_start__;
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
/* Initialized DTCM data. */
- .dtcm_data :
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
{
/* Start of DTCM Secure Trustzone region. */
__tz_DTCM_S = ABSOLUTE(DTCM_START);
/* Initialized DTCM data start */
- __dtcm_data_start__ = .;
+ __dtcm_data_start = .;
KEEP(*(.dtcm_data*))
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
/* Initialized DTCM data end */
- __dtcm_data_end__ = .;
- } > DTCM AT > FLASH
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+ . = __dtcm_data_end;
/* Uninitialized DTCM data. */
- .dtcm_noinit (NOLOAD):
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
{
/* Uninitialized DTCM data start */
- __dtcm_noinit_start = .;
+ __dtcm_bss_start = .;
- KEEP(*(.dtcm_noinit*))
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
/* Uninitialized DTCM data end */
- __dtcm_noinit_end = .;
+ __dtcm_bss_end = .;
/*
* Start of the DTCM Non-Secure Trustzone region.
- * DTCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
*/
- __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_noinit_end, 8192);
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
} > DTCM
- /* TrustZone Secure Gateway Stubs Section. */
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
- /* Some arithmetic is needed to eliminate unnecessary FILL for secure projects. */
- /* 1. Get the address to the next block after the .data section in FLASH. */
- DATA_END = LOADADDR(.data) + SIZEOF(.data);
- /* 2. Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block after .data */
- SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(DATA_END, 1024);
- /* 3. Manually specify the start location for .gnu.sgstubs */
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
.gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
{
__tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
@@ -407,8 +462,8 @@ SECTIONS
__qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
/* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
- __qspi_flash_code_addr__ = __etext + (__data_end__ - __data_start__);
- .qspi_non_retentive : AT (__qspi_flash_code_addr__)
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
{
__qspi_non_retentive_start__ = .;
KEEP(*(.qspi_non_retentive*))
@@ -456,8 +511,8 @@ SECTIONS
__ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
/* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
- __ospi_device_0_code_addr__ = __etext + (__data_end__ - __data_start__);
- .ospi_device_0_non_retentive : AT (__ospi_device_0_code_addr__)
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
{
__ospi_device_0_non_retentive_start__ = .;
KEEP(*(.ospi_device_0_non_retentive*))
@@ -486,8 +541,8 @@ SECTIONS
__ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
/* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
- __ospi_device_1_code_addr__ = __etext + (__data_end__ - __data_start__);
- .ospi_device_1_non_retentive : AT (__ospi_device_1_code_addr__)
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
{
__ospi_device_1_non_retentive_start__ = .;
KEEP(*(.ospi_device_1_non_retentive*))
@@ -527,7 +582,6 @@ SECTIONS
{
. = ALIGN(8);
__HeapBase = .;
- PROVIDE(end = .);
/* Place the STD heap here. */
KEEP(*(.heap))
__HeapLimit = .;
@@ -615,7 +669,6 @@ SECTIONS
__ID_Code_End = .;
} > ID_CODE
-
/* Symbol required for RA Configuration tool. */
__tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
diff --git a/hw/bsp/ra/boards/portenta_c33/script/memory_regions.ld b/hw/bsp/ra/boards/portenta_c33/script/memory_regions.ld
new file mode 100644
index 0000000000..74c6483297
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/script/memory_regions.ld
@@ -0,0 +1,25 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x80000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x200000;
+ DATA_FLASH_START = 0x08000000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x0100A100;
+ OPTION_SETTING_LENGTH = 0x100;
+ OPTION_SETTING_S_START = 0x0100A200;
+ OPTION_SETTING_S_LENGTH = 0x100;
+ ID_CODE_START = 0x00000000;
+ ID_CODE_LENGTH = 0x0;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x4000000;
+ OSPI_DEVICE_0_START = 0x68000000;
+ OSPI_DEVICE_0_LENGTH = 0x8000000;
+ OSPI_DEVICE_1_START = 0x70000000;
+ OSPI_DEVICE_1_LENGTH = 0x10000000;
+
+/* Board has bootloader */
+FLASH_IMAGE_START = 0x10000;
diff --git a/hw/bsp/ra/boards/portenta_c33/smart_configurator/configuration.xml b/hw/bsp/ra/boards/portenta_c33/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..fcc9d711d7
--- /dev/null
+++ b/hw/bsp/ra/boards/portenta_c33/smart_configurator/configuration.xml
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ Custom Board Support Files
+ Renesas.RA_board_custom.5.6.0.pack
+
+
+ Board support package for R7FA6M5BH3CFC
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5 - FSP Data
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5 - Events
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra2a1_ek/board.h b/hw/bsp/ra/boards/ra2a1_ek/board.h
index 1c2b666d2d..d925fc551b 100644
--- a/hw/bsp/ra/boards/ra2a1_ek/board.h
+++ b/hw/bsp/ra/boards/ra2a1_ek/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: RA2A1 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra2a1-evaluation-kit-ra2a1-mcu-group
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,21 +36,9 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_02_PIN_05
-#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_02_PIN_06
+#define LED_STATE_ON 1
#define BUTTON_STATE_ACTIVE 0
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- {.pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT},
- {.pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT},
- // USB FS D+, D-, VBus
- {.pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_14, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_15, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
-};
-
#ifdef __cplusplus
}
#endif
diff --git a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 30637c17b1..0000000000
--- a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-#ifdef __cplusplus
- extern "C" {
- #endif
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-#define RA_NOT_DEFINED 0
-#ifndef BSP_CFG_RTOS
-#if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
- #define BSP_CFG_RTOS (2)
- #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
- #define BSP_CFG_RTOS (1)
- #else
-#define BSP_CFG_RTOS (0)
-#endif
-#endif
-#ifndef BSP_CFG_RTC_USED
-#define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
-#endif
-#undef RA_NOT_DEFINED
-#if defined(_RA_BOOT_IMAGE)
- #define BSP_CFG_BOOT_IMAGE (1)
- #endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x400)
-#define BSP_CFG_HEAP_BYTES (0x400)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-#endif
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-#endif
-
-#ifdef __cplusplus
- }
- #endif
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 710e85b28b..0000000000
--- a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA2A1AB3CFM
-#define BSP_MCU_FEATURE_SET ('A')
-#define BSP_ROM_SIZE_BYTES (262144)
-#define BSP_RAM_SIZE_BYTES (32768)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (64)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
deleted file mode 100644
index 6caef62cc6..0000000000
--- a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_FAMILY_CFG_H_
-#define BSP_MCU_FAMILY_CFG_H_
-#ifdef __cplusplus
- extern "C" {
- #endif
-
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "../../../ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-#define BSP_MCU_GROUP_RA2A1 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
-#define BSP_HOCO_HZ (24000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (32000000)
- #elif BSP_CFG_HOCO_FREQUENCY == 4
- #define BSP_HOCO_HZ (48000000)
- #elif BSP_CFG_HOCO_FREQUENCY == 5
- #define BSP_HOCO_HZ (64000000)
- #else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
- #endif
-
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
-
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
-#define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC0_START (0x000FFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC0_END (0x000FFFFF)
-#define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC1_START (0x000FFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC1_END (0x000FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION0_START (0x000FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION0_END (0x000FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
-#endif
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-
-/*
- ID Code
- Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
- WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
- */
-#if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
- #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
- #else
-/* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
-#define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
-#endif
-
-#ifdef __cplusplus
- }
- #endif
-#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..bf1fe0cc68
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x400)
+ #define BSP_CFG_HEAP_BYTES (0x400)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..6970e4c339
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA2A1AB3CFM
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (262144)
+ #define BSP_RAM_SIZE_BYTES (32768)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (64)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
new file mode 100644
index 0000000000..24e3efaa2f
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -0,0 +1,89 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_FAMILY_CFG_H_
+#define BSP_MCU_FAMILY_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA2A1 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (24000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (32000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 4
+ #define BSP_HOCO_HZ (48000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 5
+ #define BSP_HOCO_HZ (64000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
+
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (0)
+
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
+ #define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC0_START (0x000FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC0_END (0x000FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC1_START (0x000FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC1_END (0x000FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_START (0x000FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_END (0x000FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #endif
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+
+ /*
+ ID Code
+ Note: To lock and disable the debug interface define BSP_ID_CODE_LOCKED in compiler settings.
+ WARNING: This will disable debug access to the part. However, ALeRASE command will be accepted, which will clear (reset) the ID code. After clearing ID code, debug access will be enabled.
+ */
+ #if defined(BSP_ID_CODE_LOCKED)
+ #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
+ #else
+ /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
+ #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
+ #endif
+
+ #if (0)
+ #define BSP_SECTION_FLASH_GAP BSP_PLACE_IN_SECTION(".flash_gap")
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..fc48a5809e
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,17 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define LED1 (BSP_IO_PORT_02_PIN_05)
+#define SW1 (BSP_IO_PORT_02_PIN_06)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA2A1-EK.pincfg */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/bsp_clock_cfg.h
similarity index 92%
rename from hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/ra2a1_ek/ra_gen/bsp_clock_cfg.h
index cd9d135f79..6b41669d3c 100644
--- a/hw/bsp/ra/boards/ra2a1_ek/fsp_cfg/bsp_clock_cfg.h
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/bsp_clock_cfg.h
@@ -8,7 +8,7 @@
#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_HOCO) /* Clock Src: HOCO */
#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKB Div /2 */
-#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */
+#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKD Div /1 */
#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* FCLK Div /2 */
#define BSP_CFG_SDADC_CLOCK_SOURCE (0) /* SDADCCLK Src: HOCO */
#define BSP_CFG_SDADCCLK_DIV (7) /* SDADCCLK Div /12 */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra2a1_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..7fed326876
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/ra_gen/pin_data.c
@@ -0,0 +1,115 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra2a1_ek/script/fsp.ld b/hw/bsp/ra/boards/ra2a1_ek/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra2a1_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra2a1_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..2d6992fedb
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/script/memory_regions.ld
@@ -0,0 +1,22 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x8000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x40000;
+ DATA_FLASH_START = 0x40100000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x00000000;
+ OPTION_SETTING_LENGTH = 0x0;
+ OPTION_SETTING_S_START = 0x80000000;
+ OPTION_SETTING_S_LENGTH = 0x0;
+ ID_CODE_START = 0x01010018;
+ ID_CODE_LENGTH = 0x20;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x0;
+ OSPI_DEVICE_0_START = 0x80020000;
+ OSPI_DEVICE_0_LENGTH = 0x0;
+ OSPI_DEVICE_1_START = 0x80030000;
+ OSPI_DEVICE_1_LENGTH = 0x0;
diff --git a/hw/bsp/ra/boards/ra2a1_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra2a1_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..beeeb67f24
--- /dev/null
+++ b/hw/bsp/ra/boards/ra2a1_ek/smart_configurator/configuration.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ RA2A1-EK Board Support Files
+ Renesas.RA_board_ra2a1_ek.5.6.0.pack
+
+
+ Board support package for R7FA2A1AB3CFM
+ Renesas.RA_mcu_ra2a1.5.6.0.pack
+
+
+ Board support package for RA2A1
+ Renesas.RA_mcu_ra2a1.5.6.0.pack
+
+
+ Board support package for RA2A1 - FSP Data
+ Renesas.RA_mcu_ra2a1.5.6.0.pack
+
+
+ Board support package for RA2A1 - Events
+ Renesas.RA_mcu_ra2a1.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra4m1_ek/board.h b/hw/bsp/ra/boards/ra4m1_ek/board.h
index c132387bc3..e146261be7 100644
--- a/hw/bsp/ra/boards/ra4m1_ek/board.h
+++ b/hw/bsp/ra/boards/ra4m1_ek/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: RA4M1 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m1-evaluation-kit-ra4m1-mcu-group
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,21 +36,9 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_01_PIN_06
-#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_01_PIN_05
+#define LED_STATE_ON 1
#define BUTTON_STATE_ACTIVE 0
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- {.pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT},
- {.pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT},
- // USB FS D+, D-, VBus
- {.pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_14, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_15, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
-};
-
#ifdef __cplusplus
}
#endif
diff --git a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 11d5795dfe..0000000000
--- a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#undef RA_NOT_DEFINED
-#define BSP_CFG_RTOS (0)
-#if defined(_RA_BOOT_IMAGE)
-#define BSP_CFG_BOOT_IMAGE (1)
-#endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x800)
-#define BSP_CFG_HEAP_BYTES (0x1000)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index d810dabb2f..0000000000
--- a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA4M1AB3CFP
-#define BSP_MCU_FEATURE_SET ('A')
-#define BSP_ROM_SIZE_BYTES (262144)
-#define BSP_RAM_SIZE_BYTES (32768)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (100)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
deleted file mode 100644
index 72cdb89e67..0000000000
--- a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* generated configuration header file through renesas e2 studio */
-#ifndef BSP_MCU_FAMILY_CFG_H_
-#define BSP_MCU_FAMILY_CFG_H_
-
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-
-#define BSP_MCU_GROUP_RA4M1 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
- #define BSP_HOCO_HZ (24000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (32000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 4
- #define BSP_HOCO_HZ (48000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 5
- #define BSP_HOCO_HZ (64000000)
-#else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
-#endif
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
-
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
-#define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
-#define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC0_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC0_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC1_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC1_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
-#endif
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-
-/*
- ID Code
- Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
- WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
- */
-#if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
- #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
- #else
-/* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
-#define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
-#endif
-
-#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..43b0f5b651
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x800)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..243fad9b63
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA4M1AB3CFP
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (262144)
+ #define BSP_RAM_SIZE_BYTES (32768)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (100)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
new file mode 100644
index 0000000000..3d482b2b6e
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -0,0 +1,84 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_FAMILY_CFG_H_
+#define BSP_MCU_FAMILY_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA4M1 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (24000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (32000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 4
+ #define BSP_HOCO_HZ (48000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 5
+ #define BSP_HOCO_HZ (64000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
+
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
+ #define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
+ #define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC0_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC0_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC1_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC1_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #endif
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+
+ /*
+ ID Code
+ Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
+ WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
+ */
+ #if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
+ #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
+ #else
+ /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
+ #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..f77a5bcec4
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,17 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define SW1 (BSP_IO_PORT_01_PIN_05)
+#define LED1 (BSP_IO_PORT_01_PIN_06)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA4M1-EK.pincfg */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/bsp_clock_cfg.h
similarity index 94%
rename from hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/ra4m1_ek/ra_gen/bsp_clock_cfg.h
index 554126523e..81ac5dc11e 100644
--- a/hw/bsp/ra/boards/ra4m1_ek/fsp_cfg/bsp_clock_cfg.h
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/bsp_clock_cfg.h
@@ -7,7 +7,7 @@
#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
#define BSP_CFG_HOCO_FREQUENCY (0) /* HOCO 24MHz */
#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL Div /2 */
-#define BSP_CFG_PLL_MUL (BSP_CLOCKS_PLL_MUL(8u,0u)) /* PLL Mul x8 */
+#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(8U,0U) /* PLL Mul x8 */
#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* Clock Src: PLL */
#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKA Div /1 */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra4m1_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..baa7134434
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/ra_gen/pin_data.c
@@ -0,0 +1,119 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra4m1_ek/script/fsp.ld b/hw/bsp/ra/boards/ra4m1_ek/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra4m1_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra4m1_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..2d6992fedb
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/script/memory_regions.ld
@@ -0,0 +1,22 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x8000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x40000;
+ DATA_FLASH_START = 0x40100000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x00000000;
+ OPTION_SETTING_LENGTH = 0x0;
+ OPTION_SETTING_S_START = 0x80000000;
+ OPTION_SETTING_S_LENGTH = 0x0;
+ ID_CODE_START = 0x01010018;
+ ID_CODE_LENGTH = 0x20;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x0;
+ OSPI_DEVICE_0_START = 0x80020000;
+ OSPI_DEVICE_0_LENGTH = 0x0;
+ OSPI_DEVICE_1_START = 0x80030000;
+ OSPI_DEVICE_1_LENGTH = 0x0;
diff --git a/hw/bsp/ra/boards/ra4m1_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra4m1_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..2ca7fe5953
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m1_ek/smart_configurator/configuration.xml
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ RA4M1-EK Board Support Files
+ Renesas.RA_board_ra4m1_ek.5.6.0.pack
+
+
+ Board support package for R7FA4M1AB3CFP
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1 - FSP Data
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1 - Events
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra4m3_ek/board.h b/hw/bsp/ra/boards/ra4m3_ek/board.h
index 9dd2545a07..8b277f6f0a 100644
--- a/hw/bsp/ra/boards/ra4m3_ek/board.h
+++ b/hw/bsp/ra/boards/ra4m3_ek/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: RA4M3 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra4m3-evaluation-kit-ra4m3-mcu-group
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
diff --git a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 862ec25b7c..0000000000
--- a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#define RA_NOT_DEFINED 0
-#ifndef BSP_CFG_RTOS
-#if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
-#define BSP_CFG_RTOS (2)
-#elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
-#define BSP_CFG_RTOS (1)
-#else
-#define BSP_CFG_RTOS (0)
-#endif
-#endif
-#ifndef BSP_CFG_RTC_USED
-#define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
-#endif
-#undef RA_NOT_DEFINED
-#if defined(_RA_BOOT_IMAGE)
-#define BSP_CFG_BOOT_IMAGE (1)
-#endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x800)
-#define BSP_CFG_HEAP_BYTES (0x800)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-#endif
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 1a0bc02e26..0000000000
--- a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA4M3AF3CFB
-#define BSP_MCU_FEATURE_SET ('A')
-#define BSP_ROM_SIZE_BYTES (1048576)
-#define BSP_RAM_SIZE_BYTES (131072)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (144)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..96087fa0d6
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x800)
+ #define BSP_CFG_HEAP_BYTES (0x800)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..1aaa4be0af
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA4M3AF3CFB
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (1048576)
+ #define BSP_RAM_SIZE_BYTES (131072)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (144)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
similarity index 57%
rename from hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_family_cfg.h
rename to hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
index d5428540fb..cb9429057f 100644
--- a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -5,80 +5,80 @@
extern "C" {
#endif
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "../../../ra/fsp/src/bsp/mcu/ra6m5/bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-
-#define BSP_MCU_GROUP_RA6M5 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
-#define BSP_HOCO_HZ (16000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 1
- #define BSP_HOCO_HZ (18000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (20000000)
-#else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
-#endif
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra4m3/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA4M3 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (16000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 1
+ #define BSP_HOCO_HZ (18000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (20000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
-#define BSP_CFG_FLL_ENABLE (0)
+ #define BSP_CFG_FLL_ENABLE (0)
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
-#if defined(_RA_TZ_SECURE)
+ #if defined(_RA_TZ_SECURE)
#define BSP_TZ_SECURE_BUILD (1)
#define BSP_TZ_NONSECURE_BUILD (0)
#elif defined(_RA_TZ_NONSECURE)
#define BSP_TZ_SECURE_BUILD (0)
#define BSP_TZ_NONSECURE_BUILD (1)
#else
-#define BSP_TZ_SECURE_BUILD (0)
-#define BSP_TZ_NONSECURE_BUILD (0)
-#endif
-
-/* TrustZone Settings */
-#define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
-#define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
-#define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
-
-/* CMSIS TrustZone Settings */
-#define SCB_CSR_AIRCR_INIT (1)
-#define SCB_AIRCR_BFHFNMINS_VAL (0)
-#define SCB_AIRCR_SYSRESETREQS_VAL (1)
-#define SCB_AIRCR_PRIS_VAL (0)
-#define TZ_FPU_NS_USAGE (1)
+ #define BSP_TZ_SECURE_BUILD (0)
+ #define BSP_TZ_NONSECURE_BUILD (0)
+ #endif
+
+ /* TrustZone Settings */
+ #define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
+ #define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
+ #define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
+
+ /* CMSIS TrustZone Settings */
+ #define SCB_CSR_AIRCR_INIT (1)
+ #define SCB_AIRCR_BFHFNMINS_VAL (0)
+ #define SCB_AIRCR_SYSRESETREQS_VAL (1)
+ #define SCB_AIRCR_PRIS_VAL (0)
+ #define TZ_FPU_NS_USAGE (1)
#ifndef SCB_NSACR_CP10_11_VAL
-#define SCB_NSACR_CP10_11_VAL (3U)
+ #define SCB_NSACR_CP10_11_VAL (3U)
#endif
#ifndef FPU_FPCCR_TS_VAL
-#define FPU_FPCCR_TS_VAL (1U)
+ #define FPU_FPCCR_TS_VAL (1U)
#endif
-#define FPU_FPCCR_CLRONRETS_VAL (1)
+ #define FPU_FPCCR_CLRONRETS_VAL (1)
#ifndef FPU_FPCCR_CLRONRET_VAL
-#define FPU_FPCCR_CLRONRET_VAL (1)
+ #define FPU_FPCCR_CLRONRET_VAL (1)
#endif
-/* The C-Cache line size that is configured during startup. */
+ /* The C-Cache line size that is configured during startup. */
#ifndef BSP_CFG_C_CACHE_LINE_SIZE
-#define BSP_CFG_C_CACHE_LINE_SIZE (1U)
+ #define BSP_CFG_C_CACHE_LINE_SIZE (1U)
#endif
-/* Type 1 Peripheral Security Attribution */
+ /* Type 1 Peripheral Security Attribution */
-/* Peripheral Security Attribution Register (PSAR) Settings */
+ /* Peripheral Security Attribution Register (PSAR) Settings */
#ifndef BSP_TZ_CFG_PSARB
#define BSP_TZ_CFG_PSARB (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CAN1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* CAN0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* IIC1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* IIC0 */ | \
- (((1 > 0) ? 0U : 1U) << 11) /* USBFS */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* USBFS */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* SCI9 */ | \
@@ -146,19 +146,19 @@ extern "C" {
0xfffffffc) /* Unused */
#endif
-/* Type 2 Peripheral Security Attribution */
+ /* Type 2 Peripheral Security Attribution */
-/* Security attribution for Cache registers. */
+ /* Security attribution for Cache registers. */
#ifndef BSP_TZ_CFG_CSAR
#define BSP_TZ_CFG_CSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for RSTSRn registers. */
+ /* Security attribution for RSTSRn registers. */
#ifndef BSP_TZ_CFG_RSTSAR
#define BSP_TZ_CFG_RSTSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for registers of LVD channels. */
+ /* Security attribution for registers of LVD channels. */
#ifndef BSP_TZ_CFG_LVDSAR
#define BSP_TZ_CFG_LVDSAR (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) | /* LVD Channel 1 */ \
@@ -166,16 +166,16 @@ extern "C" {
0xFFFFFFFCU)
#endif
-/* Security attribution for LPM registers. */
+ /* Security attribution for LPM registers. */
#ifndef BSP_TZ_CFG_LPMSAR
#define BSP_TZ_CFG_LPMSAR ((RA_NOT_DEFINED > 0) ? 0xFFFFFCEAU : 0xFFFFFFFFU)
#endif
-/* Deep Standby Interrupt Factor Security Attribution Register. */
+ /* Deep Standby Interrupt Factor Security Attribution Register. */
#ifndef BSP_TZ_CFG_DPFSAR
#define BSP_TZ_CFG_DPFSAR ((RA_NOT_DEFINED > 0) ? 0xF2E00000U : 0xFFFFFFFFU)
#endif
-/* Security attribution for CGC registers. */
+ /* Security attribution for CGC registers. */
#ifndef BSP_TZ_CFG_CGFSAR
#if BSP_CFG_CLOCKS_SECURE
/* Protect all CGC registers from Non-secure write access. */
@@ -186,12 +186,12 @@ extern "C" {
#endif
#endif
-/* Security attribution for Battery Backup registers. */
+ /* Security attribution for Battery Backup registers. */
#ifndef BSP_TZ_CFG_BBFSAR
#define BSP_TZ_CFG_BBFSAR (0x00FFFFFF)
#endif
-/* Security attribution for registers for IRQ channels. */
+ /* Security attribution for registers for IRQ channels. */
#ifndef BSP_TZ_CFG_ICUSARA
#define BSP_TZ_CFG_ICUSARA (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \
@@ -213,12 +213,12 @@ extern "C" {
0xFFFF0000U)
#endif
-/* Security attribution for NMI registers. */
+ /* Security attribution for NMI registers. */
#ifndef BSP_TZ_CFG_ICUSARB
#define BSP_TZ_CFG_ICUSARB (0 | 0xFFFFFFFEU) /* Should match AIRCR.BFHFNMINS. */
#endif
-/* Security attribution for registers for DMAC channels */
+ /* Security attribution for registers for DMAC channels */
#ifndef BSP_TZ_CFG_ICUSARC
#define BSP_TZ_CFG_ICUSARC (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \
@@ -232,29 +232,29 @@ extern "C" {
0xFFFFFF00U)
#endif
-/* Security attribution registers for SELSR0. */
+ /* Security attribution registers for SELSR0. */
#ifndef BSP_TZ_CFG_ICUSARD
#define BSP_TZ_CFG_ICUSARD ((RA_NOT_DEFINED > 0) ? 0xFFFFFFFEU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN0. */
+ /* Security attribution registers for WUPEN0. */
#ifndef BSP_TZ_CFG_ICUSARE
#define BSP_TZ_CFG_ICUSARE ((RA_NOT_DEFINED > 0) ? 0x04F2FFFFU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN1. */
+ /* Security attribution registers for WUPEN1. */
#ifndef BSP_TZ_CFG_ICUSARF
#define BSP_TZ_CFG_ICUSARF ((RA_NOT_DEFINED > 0) ? 0xFFFFFFF8U : 0xFFFFFFFFU)
#endif
-/* Set DTCSTSAR if the Secure program uses the DTC. */
+ /* Set DTCSTSAR if the Secure program uses the DTC. */
#if RA_NOT_DEFINED == RA_NOT_DEFINED
-#define BSP_TZ_CFG_DTC_USED (0U)
+ #define BSP_TZ_CFG_DTC_USED (0U)
#else
#define BSP_TZ_CFG_DTC_USED (1U)
#endif
-/* Security attribution of FLWT and FCKMHZ registers. */
+ /* Security attribution of FLWT and FCKMHZ registers. */
#ifndef BSP_TZ_CFG_FSAR
/* If the CGC registers are only accessible in Secure mode, than there is no
* reason for nonsecure applications to access FLWT and FCKMHZ. */
@@ -267,118 +267,119 @@ extern "C" {
#endif
#endif
-/* Security attribution for SRAM registers. */
+ /* Security attribution for SRAM registers. */
#ifndef BSP_TZ_CFG_SRAMSAR
/* If the CGC registers are only accessible in Secure mode, than there is no reason for Non Secure applications to access
* SRAM0WTEN and therefore there is no reason to access PRCR2. */
-#define BSP_TZ_CFG_SRAMSAR (\
+ #define BSP_TZ_CFG_SRAMSAR (\
1 | \
((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 1U) : 0U) | \
4 | \
0xFFFFFFF8U)
#endif
-/* Security attribution for Standby RAM registers. */
+ /* Security attribution for Standby RAM registers. */
#ifndef BSP_TZ_CFG_STBRAMSAR
-#define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
+ #define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
#endif
-/* Security attribution for the DMAC Bus Master MPU settings. */
+ /* Security attribution for the DMAC Bus Master MPU settings. */
#ifndef BSP_TZ_CFG_MMPUSARA
-/* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
-#define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
+ /* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
+ #define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
#endif
-/* Security Attribution Register A for BUS Control registers. */
+ /* Security Attribution Register A for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARA
-#define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
#endif
-/* Security Attribution Register B for BUS Control registers. */
+ /* Security Attribution Register B for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARB
-#define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
#endif
-/* Enable Uninitialized Non-Secure Application Fallback. */
+ /* Enable Uninitialized Non-Secure Application Fallback. */
#ifndef BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK
-#define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
+ #define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
#endif
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-/* Option Function Select Register 1 Security Attribution */
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+
+ /* Option Function Select Register 1 Security Attribution */
#ifndef BSP_CFG_ROM_REG_OFS1_SEL
#if defined(_RA_TZ_SECURE) || defined(_RA_TZ_NONSECURE)
- #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U) | ((RA_NOT_DEFINED > 0) ? 0U : 0x7U))
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((0U << 0U)) | ((0U << 2U)) | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U))
#else
-#define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
#endif
#endif
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-/* Dual Mode Select Register */
+ /* Dual Mode Select Register */
#ifndef BSP_CFG_ROM_REG_DUALSEL
-#define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (0x7U))
+ #define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFFFU)
#endif
-/* Block Protection Register 0 */
+ /* Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_BPS0
-#define BSP_CFG_ROM_REG_BPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS0 (~( 0U))
#endif
-/* Block Protection Register 1 */
+ /* Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_BPS1
-#define BSP_CFG_ROM_REG_BPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS1 (~( 0U))
#endif
-/* Block Protection Register 2 */
+ /* Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_BPS2
-#define BSP_CFG_ROM_REG_BPS2 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS2 (0xFFFFFFFFU)
#endif
-/* Block Protection Register 3 */
+ /* Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_BPS3
-#define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
#endif
-/* Permanent Block Protection Register 0 */
+ /* Permanent Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_PBPS0
-#define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
#endif
-/* Permanent Block Protection Register 1 */
+ /* Permanent Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_PBPS1
-#define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
#endif
-/* Permanent Block Protection Register 2 */
+ /* Permanent Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_PBPS2
-#define BSP_CFG_ROM_REG_PBPS2 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS2 (0xFFFFFFFFU)
#endif
-/* Permanent Block Protection Register 3 */
+ /* Permanent Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_PBPS3
-#define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
#endif
-/* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL0
-#define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
+ #define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
#endif
-/* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL1
-#define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
+ #define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
#endif
-/* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL2
-#define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2)
+ #define BSP_CFG_ROM_REG_BPS_SEL2 (0xFFFFFFFFU)
#endif
-/* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL3
-#define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3)
+ #define BSP_CFG_ROM_REG_BPS_SEL3 (0xFFFFFFFFU)
#endif
#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
#endif
#ifdef __cplusplus
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..8ed58a11be
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,67 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define ARDUINO_A0_MIKROBUS_AN (BSP_IO_PORT_00_PIN_00)
+#define ARDUINO_A1 (BSP_IO_PORT_00_PIN_01)
+#define ARDUINO_A2 (BSP_IO_PORT_00_PIN_03)
+#define SW1 (BSP_IO_PORT_00_PIN_05)
+#define SW2 (BSP_IO_PORT_00_PIN_06)
+#define ARDUINO_A3 (BSP_IO_PORT_00_PIN_07)
+#define PMOD1_INT (BSP_IO_PORT_00_PIN_08)
+#define ARDUINO_A4 (BSP_IO_PORT_00_PIN_14)
+#define ARDUINO_A5 (BSP_IO_PORT_00_PIN_15)
+#define ARDUINO_RX_MIKROBUS_RX (BSP_IO_PORT_01_PIN_00)
+#define ARDUINO_TX_MIKROBUS_TX (BSP_IO_PORT_01_PIN_01)
+#define ARDUINO_D2 (BSP_IO_PORT_01_PIN_05)
+#define ARDUINO_D3 (BSP_IO_PORT_01_PIN_11)
+#define MIKROBUS_RST (BSP_IO_PORT_01_PIN_15)
+#define ARDUINO_MISO_MIKROBUS_MISO_PMOD1_MISO (BSP_IO_PORT_02_PIN_02)
+#define ARDUINO_MOSI_MIKROBUS_MOSI_PMOD1_MOSI (BSP_IO_PORT_02_PIN_03)
+#define ARDUINO_CLK_MIKROBUS_CLK_PMOD1_CLK (BSP_IO_PORT_02_PIN_04)
+#define ARDUINO_SS_MIKCRBUS_SS (BSP_IO_PORT_02_PIN_05)
+#define PMOD1_SS1 (BSP_IO_PORT_02_PIN_06)
+#define PMOD1_SS2 (BSP_IO_PORT_02_PIN_07)
+#define PMOD1_SS3 (BSP_IO_PORT_03_PIN_02)
+#define ARDUINO_D9 (BSP_IO_PORT_03_PIN_03)
+#define ARDUINO_D7 (BSP_IO_PORT_03_PIN_04)
+#define QSPI_CLK (BSP_IO_PORT_03_PIN_05)
+#define QSPI_SSL (BSP_IO_PORT_03_PIN_06)
+#define QSPI_IO0 (BSP_IO_PORT_03_PIN_07)
+#define QSPI_IO1 (BSP_IO_PORT_03_PIN_08)
+#define QSPI_IO2 (BSP_IO_PORT_03_PIN_09)
+#define QSPI_IO3 (BSP_IO_PORT_03_PIN_10)
+#define PMOD1_RST (BSP_IO_PORT_03_PIN_11)
+#define LED3 (BSP_IO_PORT_04_PIN_00)
+#define LED2 (BSP_IO_PORT_04_PIN_04)
+#define USB_VBUS (BSP_IO_PORT_04_PIN_07)
+#define ARDUINO_D6_MIKROBUS_PWM (BSP_IO_PORT_04_PIN_08)
+#define MIKROBUS_INT (BSP_IO_PORT_04_PIN_09)
+#define PMOD2_INT (BSP_IO_PORT_04_PIN_14)
+#define LED1 (BSP_IO_PORT_04_PIN_15)
+#define USB_VBUS_EN (BSP_IO_PORT_05_PIN_00)
+#define USB_VBUS_OC (BSP_IO_PORT_05_PIN_01)
+#define GROVE2_AN1 (BSP_IO_PORT_05_PIN_05)
+#define GROVE2_AN2 (BSP_IO_PORT_05_PIN_06)
+#define GROVE1_SDA_QWIIC_SDA (BSP_IO_PORT_05_PIN_11)
+#define GROVE1_SCL_QWIIC_SCL (BSP_IO_PORT_05_PIN_12)
+#define ARDUINO_SCL_MIKROBUS_SCL (BSP_IO_PORT_06_PIN_01)
+#define ARDUINO_SDA_MIKROBUS_SDA (BSP_IO_PORT_06_PIN_02)
+#define ARDUINO_D8 (BSP_IO_PORT_06_PIN_11)
+#define ARDUINO_RST (BSP_IO_PORT_06_PIN_12)
+#define PMOD2_RST (BSP_IO_PORT_07_PIN_08)
+#define PMOD2_SS2 (BSP_IO_PORT_07_PIN_09)
+#define PMOD2_SS3 (BSP_IO_PORT_07_PIN_10)
+#define ARDUINO_D5 (BSP_IO_PORT_07_PIN_12)
+#define ARDUINO_D4 (BSP_IO_PORT_07_PIN_13)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA4M3 EK */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/bsp_clock_cfg.h
similarity index 82%
rename from hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/ra4m3_ek/ra_gen/bsp_clock_cfg.h
index 80641945d6..3eac2985ee 100644
--- a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp_clock_cfg.h
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/bsp_clock_cfg.h
@@ -7,10 +7,10 @@
#define BSP_CFG_HOCO_FREQUENCY (2) /* HOCO 20MHz */
#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_3) /* PLL Div /3 */
-#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(24U,0U) /* PLL Mul x24.0 */
+#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(25U,0U) /* PLL Mul x25.0 */
#define BSP_CFG_PLL2_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL2 Src: XTAL */
-#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_3) /* PLL2 Div /3 */
-#define BSP_CFG_PLL2_MUL BSP_CLOCKS_PLL_MUL(24U,0U) /* PLL2 Mul x24.0 */
+#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL2 Div /2 */
+#define BSP_CFG_PLL2_MUL BSP_CLOCKS_PLL_MUL(20U,0U) /* PLL2 Mul x20.0 */
#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* Clock Src: PLL */
#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL2) /* UCLK Src: PLL2 */
@@ -21,5 +21,5 @@
#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */
#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* FCLK Div /4 */
#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
-#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_4) /* UCLK Div /4 */
+#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCLK Div /5 */
#endif /* BSP_CLOCK_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..bf30782cf5
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/ra_gen/pin_data.c
@@ -0,0 +1,263 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_GPT1)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_NMOS_ENABLE | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_NMOS_ENABLE | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_13,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra4m3_ek/script/fsp.ld b/hw/bsp/ra/boards/ra4m3_ek/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra4m3_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra4m3_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..04d7de497d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/script/memory_regions.ld
@@ -0,0 +1,22 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x20000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x100000;
+ DATA_FLASH_START = 0x08000000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x0100A100;
+ OPTION_SETTING_LENGTH = 0x100;
+ OPTION_SETTING_S_START = 0x0100A200;
+ OPTION_SETTING_S_LENGTH = 0x100;
+ ID_CODE_START = 0x00000000;
+ ID_CODE_LENGTH = 0x0;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x4000000;
+ OSPI_DEVICE_0_START = 0x80020000;
+ OSPI_DEVICE_0_LENGTH = 0x0;
+ OSPI_DEVICE_1_START = 0x80030000;
+ OSPI_DEVICE_1_LENGTH = 0x0;
diff --git a/hw/bsp/ra/boards/ra4m3_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra4m3_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..1d75f1b72f
--- /dev/null
+++ b/hw/bsp/ra/boards/ra4m3_ek/smart_configurator/configuration.xml
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ Board support package for R7FA4M3AF3CFB
+ Renesas.RA_mcu_ra4m3.5.6.0.pack
+
+
+ Board support package for RA4M3
+ Renesas.RA_mcu_ra4m3.5.6.0.pack
+
+
+ Board support package for RA4M3 - FSP Data
+ Renesas.RA_mcu_ra4m3.5.6.0.pack
+
+
+ Board support package for RA4M3 - Events
+ Renesas.RA_mcu_ra4m3.5.6.0.pack
+
+
+ RA4M3-EK Board Support Files
+ Renesas.RA_board_ra4m3_ek.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra6m1_ek/board.h b/hw/bsp/ra/boards/ra6m1_ek/board.h
index f73a08fc0b..2024a03359 100644
--- a/hw/bsp/ra/boards/ra6m1_ek/board.h
+++ b/hw/bsp/ra/boards/ra6m1_ek/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: RA6M1 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m1-evaluation-kit-ra6m1-mcu-group
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,19 +36,9 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_01_PIN_12
-#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_04_PIN_15
+#define LED_STATE_ON 1
#define BUTTON_STATE_ACTIVE 0
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- { .pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT },
- { .pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT },
- // USB FS
- { .pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS },
-};
-
#ifdef __cplusplus
}
#endif
diff --git a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 772e5e5b14..0000000000
--- a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#define RA_NOT_DEFINED 0
-#ifndef BSP_CFG_RTOS
-#if (RA_NOT_DEFINED) != (2)
-#define BSP_CFG_RTOS (2)
-#elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
- #define BSP_CFG_RTOS (1)
-#else
- #define BSP_CFG_RTOS (0)
-#endif
-#endif
-
-#ifndef BSP_CFG_RTC_USED
-#define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
-#endif
-
-#undef RA_NOT_DEFINED
-#if defined(_RA_BOOT_IMAGE)
- #define BSP_CFG_BOOT_IMAGE (1)
-#endif
-
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x1000)
-#define BSP_CFG_HEAP_BYTES (0x1000)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-#endif
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 40bb3a3bfc..0000000000
--- a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA6M1AD3CFP
-#define BSP_MCU_FEATURE_SET ('A')
-#define BSP_ROM_SIZE_BYTES (524288)
-#define BSP_RAM_SIZE_BYTES (262144)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (100)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
deleted file mode 100644
index 5fedd754f5..0000000000
--- a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_FAMILY_CFG_H_
-#define BSP_MCU_FAMILY_CFG_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "../../../ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-
-#define BSP_MCU_GROUP_RA6M1 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
-#define BSP_HOCO_HZ (16000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 1
- #define BSP_HOCO_HZ (18000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (20000000)
-#else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
-#endif
-
-#define BSP_CFG_FLL_ENABLE (0)
-
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
-
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
-#define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC0_START (0xFFFFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC0_END (0xFFFFFFFF)
-#define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC1_START (0xFFFFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC1_END (0xFFFFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
-#endif
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-
-/*
- ID Code
- Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
- WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
- */
-#if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
- #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
-#else
- /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
- #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
- #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
- #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
- #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..90afbdef3d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x1000)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..5e78414429
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA6M1AD3CFP
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (524288)
+ #define BSP_RAM_SIZE_BYTES (262144)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (100)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
new file mode 100644
index 0000000000..16349b5ff7
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -0,0 +1,84 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_FAMILY_CFG_H_
+#define BSP_MCU_FAMILY_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA6M1 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (16000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 1
+ #define BSP_HOCO_HZ (18000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (20000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
+
+ #define BSP_CFG_FLL_ENABLE (0)
+
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
+
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
+ #define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC0_START (0xFFFFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC0_END (0xFFFFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC1_START (0xFFFFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC1_END (0xFFFFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #endif
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+
+ /*
+ ID Code
+ Note: To lock and disable the debug interface define BSP_ID_CODE_LOCKED in compiler settings.
+ WARNING: This will disable debug access to the part. However, ALeRASE command will be accepted, which will clear (reset) the ID code. After clearing ID code, debug access will be enabled.
+ */
+ #if defined(BSP_ID_CODE_LOCKED)
+ #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
+ #else
+ /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
+ #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..8ba9aafba9
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,17 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define LED1 (BSP_IO_PORT_01_PIN_12)
+#define SW1 (BSP_IO_PORT_04_PIN_15)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA6M1-EK.pincfg */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/bsp_clock_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra6m1_ek/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/ra6m1_ek/ra_gen/bsp_clock_cfg.h
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra6m1_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..80774b0a55
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/ra_gen/pin_data.c
@@ -0,0 +1,115 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra6m1_ek/script/fsp.ld b/hw/bsp/ra/boards/ra6m1_ek/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra6m1_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra6m1_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..9d973c7370
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/script/memory_regions.ld
@@ -0,0 +1,22 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x1FFE0000;
+ RAM_LENGTH = 0x40000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x80000;
+ DATA_FLASH_START = 0x40100000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x00000000;
+ OPTION_SETTING_LENGTH = 0x0;
+ OPTION_SETTING_S_START = 0x80000000;
+ OPTION_SETTING_S_LENGTH = 0x0;
+ ID_CODE_START = 0x0100A150;
+ ID_CODE_LENGTH = 0x10;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x4000000;
+ OSPI_DEVICE_0_START = 0x80020000;
+ OSPI_DEVICE_0_LENGTH = 0x0;
+ OSPI_DEVICE_1_START = 0x80030000;
+ OSPI_DEVICE_1_LENGTH = 0x0;
diff --git a/hw/bsp/ra/boards/ra6m1_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra6m1_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..4c5d77ed0d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m1_ek/smart_configurator/configuration.xml
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ RA6M1-EK Board Support Files
+ Renesas.RA_board_ra6m1_ek.5.6.0.pack
+
+
+ Board support package for R7FA6M1AD3CFP
+ Renesas.RA_mcu_ra6m1.5.6.0.pack
+
+
+ Board support package for RA6M1
+ Renesas.RA_mcu_ra6m1.5.6.0.pack
+
+
+ Board support package for RA6M1 - FSP Data
+ Renesas.RA_mcu_ra6m1.5.6.0.pack
+
+
+ Board support package for RA6M1 - Events
+ Renesas.RA_mcu_ra6m1.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra6m5_ek/board.cmake b/hw/bsp/ra/boards/ra6m5_ek/board.cmake
index c91d48a326..568d5d78f4 100644
--- a/hw/bsp/ra/boards/ra6m5_ek/board.cmake
+++ b/hw/bsp/ra/boards/ra6m5_ek/board.cmake
@@ -2,21 +2,15 @@ set(CMAKE_SYSTEM_PROCESSOR cortex-m33 CACHE INTERNAL "System Processor")
set(MCU_VARIANT ra6m5)
set(JLINK_DEVICE R7FA6M5BH)
+set(JLINK_OPTION "-USB 000831915224")
-# Device port default to PORT1 Highspeed
-if (NOT DEFINED PORT)
-set(PORT 1)
+# device default to PORT 1 High Speed
+if (NOT DEFINED RHPORT_DEVICE)
+ set(RHPORT_DEVICE 1)
+endif()
+if (NOT DEFINED RHPORT_HOST)
+ set(RHPORT_HOST 0)
endif()
-
-# Host port will be the other port
-set(HOST_PORT $)
function(update_board TARGET)
- target_compile_definitions(${TARGET} PUBLIC
- BOARD_TUD_RHPORT=${PORT}
- BOARD_TUH_RHPORT=${HOST_PORT}
- # port 0 is fullspeed, port 1 is highspeed
- BOARD_TUD_MAX_SPEED=$
- BOARD_TUH_MAX_SPEED=$
- )
endfunction()
diff --git a/hw/bsp/ra/boards/ra6m5_ek/board.h b/hw/bsp/ra/boards/ra6m5_ek/board.h
index 779f718101..32ede3a97d 100644
--- a/hw/bsp/ra/boards/ra6m5_ek/board.h
+++ b/hw/bsp/ra/boards/ra6m5_ek/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: RA6M5 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra6m5-evaluation-kit-ra6m5-mcu-group
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,35 +36,9 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_00_PIN_08
#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_00_PIN_05
#define BUTTON_STATE_ACTIVE 0
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- { .pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_PORT_OUTPUT_LOW },
- { .pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT },
-
- // USB FS
- { .pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH },
- { .pin = BSP_IO_PORT_05_PIN_00, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH},
- { .pin = BSP_IO_PORT_05_PIN_01, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS | IOPORT_CFG_DRIVE_HIGH},
-
- // USB HS
- { .pin = BSP_IO_PORT_07_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS },
- { .pin = BSP_IO_PORT_11_PIN_00, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS | IOPORT_CFG_DRIVE_HIGH},
- { .pin = BSP_IO_PORT_11_PIN_01, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_HS | IOPORT_CFG_DRIVE_HIGH},
-
- // ETM Trace
- #ifdef TRACE_ETM
- { .pin = BSP_IO_PORT_02_PIN_08, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_09, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_10, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_11, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- { .pin = BSP_IO_PORT_02_PIN_14, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_TRACE | IOPORT_CFG_DRIVE_HS_HIGH },
- #endif
-};
#ifdef __cplusplus
}
diff --git a/hw/bsp/ra/boards/ra6m5_ek/board.mk b/hw/bsp/ra/boards/ra6m5_ek/board.mk
index a5c9337645..5fcc1d0f12 100644
--- a/hw/bsp/ra/boards/ra6m5_ek/board.mk
+++ b/hw/bsp/ra/boards/ra6m5_ek/board.mk
@@ -5,6 +5,7 @@ MCU_VARIANT = ra6m5
JLINK_DEVICE = R7FA6M5BH
# Port 1 is highspeed
-PORT ?= 1
+RHPORT_DEVICE ?= 1
+RHPORT_HOST ?= 0
flash: flash-jlink
diff --git a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index 33d3818501..0000000000
--- a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#define RA_NOT_DEFINED 0
-#ifndef BSP_CFG_RTOS
-#if (RA_NOT_DEFINED) != (2)
-#define BSP_CFG_RTOS (2)
-#elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
- #define BSP_CFG_RTOS (1)
-#else
- #define BSP_CFG_RTOS (0)
-#endif
-#endif
-#ifndef BSP_CFG_RTC_USED
-#define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
-#endif
-#undef RA_NOT_DEFINED
-#if defined(_RA_BOOT_IMAGE)
- #define BSP_CFG_BOOT_IMAGE (1)
-#endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x1000)
-#define BSP_CFG_HEAP_BYTES (0x1000)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
-#endif
-
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
-#endif
-#ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 6845183db5..0000000000
--- a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA6M5BH3CFC
-#define BSP_MCU_FEATURE_SET ('B')
-#define BSP_ROM_SIZE_BYTES (2097152)
-#define BSP_RAM_SIZE_BYTES (524288)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_LQFP
-#define BSP_PACKAGE_PINS (176)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp_clock_cfg.h
deleted file mode 100644
index 0eb5e05167..0000000000
--- a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp_clock_cfg.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CLOCK_CFG_H_
-#define BSP_CLOCK_CFG_H_
-
-#define BSP_CFG_CLOCKS_SECURE (0)
-#define BSP_CFG_CLOCKS_OVERRIDE (0)
-#define BSP_CFG_XTAL_HZ (24000000) /* XTAL 24000000Hz */
-#define BSP_CFG_HOCO_FREQUENCY (2) /* HOCO 20MHz */
-#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
-#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_3) /* PLL Div /3 */
-#define BSP_CFG_PLL_MUL (BSP_CLOCKS_PLL_MUL(25U,0U)) /* PLL Mul x25.0 */
-#define BSP_CFG_PLL2_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL2 Src: XTAL */
-#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL2 Div /2 */
-#define BSP_CFG_PLL2_MUL (BSP_CLOCKS_PLL_MUL(20U,0U)) /* PLL2 Mul x20.0 */
-#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* Clock Src: PLL */
-#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
-#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL2) /* UCLK Src: PLL2 */
-#define BSP_CFG_U60CK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL2) /* U60CK Src: PLL2 */
-#define BSP_CFG_OCTA_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* OCTASPICLK Disabled */
-#define BSP_CFG_CANFDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CANFDCLK Disabled */
-#define BSP_CFG_CECCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CECCLK Disabled */
-#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
-#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKA Div /2 */
-#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKB Div /4 */
-#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKC Div /4 */
-#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */
-#define BSP_CFG_BCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* BCLK Div /2 */
-#define BSP_CFG_BCLK_OUTPUT (2) /* EBCLK Div /2 */
-#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* FCLK Div /4 */
-#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
-#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCLK Div /5 */
-#define BSP_CFG_U60CK_DIV (BSP_CLOCKS_USB60_CLOCK_DIV_4) /* U60CK Div /4 */
-#define BSP_CFG_OCTA_DIV (BSP_CLOCKS_OCTA_CLOCK_DIV_1) /* OCTASPICLK Div /1 */
-#define BSP_CFG_CANFDCLK_DIV (BSP_CLOCKS_CANFD_CLOCK_DIV_1) /* CANFDCLK Div /1 */
-#define BSP_CFG_CECCLK_DIV (BSP_CLOCKS_CEC_CLOCK_DIV_1) /* CECCLK Div /1 */
-
-#endif /* BSP_CLOCK_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ozone/ra6m5.jdebug b/hw/bsp/ra/boards/ra6m5_ek/ozone/ra6m5.jdebug
index 7b8ee9c953..ca18fed7cd 100644
--- a/hw/bsp/ra/boards/ra6m5_ek/ozone/ra6m5.jdebug
+++ b/hw/bsp/ra/boards/ra6m5_ek/ozone/ra6m5.jdebug
@@ -20,9 +20,7 @@ void OnProjectLoad (void) {
Project.SetTraceSource ("Trace Pins");
Project.SetTracePortWidth (4);
- //File.Open ("../../../../../../examples/device/cdc_msc/cmake-build-ra6m5/cdc_msc.elf");
- //File.Open ("../../../../../../examples/dual/cmake-build-ra6m5/host_hid_to_device_cdc/host_hid_to_device_cdc.elf");
- File.Open ("../../../../../../examples/cmake-build-ra6m5/host/cdc_msc_hid/cdc_msc_hid.elf");
+ File.Open ("../../../../../../examples/cmake-build-ra6m5_ek/device/cdc_msc/cdc_msc.elf");
}
/*********************************************************************
*
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..90afbdef3d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x1000)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/ra6m5_ek/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..e532478f8f
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA6M5BH3CFC
+ #define BSP_MCU_FEATURE_SET ('B')
+ #define BSP_ROM_SIZE_BYTES (2097152)
+ #define BSP_RAM_SIZE_BYTES (524288)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_LQFP
+ #define BSP_PACKAGE_PINS (176)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
similarity index 55%
rename from hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
rename to hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
index 26e184a94a..c01219377a 100644
--- a/hw/bsp/ra/boards/ra4m3_ek/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -5,17 +5,17 @@
extern "C" {
#endif
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "../../../ra/fsp/src/bsp/mcu/ra4m3/bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-#define BSP_MCU_GROUP_RA4M3 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
-#define BSP_HOCO_HZ (16000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 1
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra6m5/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA6M5 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (16000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 1
#define BSP_HOCO_HZ (18000000)
#elif BSP_CFG_HOCO_FREQUENCY == 2
#define BSP_HOCO_HZ (20000000)
@@ -23,61 +23,62 @@ extern "C" {
#error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
#endif
-#define BSP_CFG_FLL_ENABLE (0)
+ #define BSP_CFG_FLL_ENABLE (0)
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
-#if defined(_RA_TZ_SECURE)
+ #if defined(_RA_TZ_SECURE)
#define BSP_TZ_SECURE_BUILD (1)
#define BSP_TZ_NONSECURE_BUILD (0)
#elif defined(_RA_TZ_NONSECURE)
#define BSP_TZ_SECURE_BUILD (0)
#define BSP_TZ_NONSECURE_BUILD (1)
#else
-#define BSP_TZ_SECURE_BUILD (0)
-#define BSP_TZ_NONSECURE_BUILD (0)
-#endif
-
-/* TrustZone Settings */
-#define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
-#define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
-#define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
+ #define BSP_TZ_SECURE_BUILD (0)
+ #define BSP_TZ_NONSECURE_BUILD (0)
+ #endif
-/* CMSIS TrustZone Settings */
-#define SCB_CSR_AIRCR_INIT (1)
-#define SCB_AIRCR_BFHFNMINS_VAL (0)
-#define SCB_AIRCR_SYSRESETREQS_VAL (1)
-#define SCB_AIRCR_PRIS_VAL (0)
-#define TZ_FPU_NS_USAGE (1)
+ /* TrustZone Settings */
+ #define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
+ #define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
+ #define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
+
+ /* CMSIS TrustZone Settings */
+ #define SCB_CSR_AIRCR_INIT (1)
+ #define SCB_AIRCR_BFHFNMINS_VAL (0)
+ #define SCB_AIRCR_SYSRESETREQS_VAL (1)
+ #define SCB_AIRCR_PRIS_VAL (0)
+ #define TZ_FPU_NS_USAGE (1)
#ifndef SCB_NSACR_CP10_11_VAL
-#define SCB_NSACR_CP10_11_VAL (3U)
+ #define SCB_NSACR_CP10_11_VAL (3U)
#endif
#ifndef FPU_FPCCR_TS_VAL
-#define FPU_FPCCR_TS_VAL (1U)
+ #define FPU_FPCCR_TS_VAL (1U)
#endif
-#define FPU_FPCCR_CLRONRETS_VAL (1)
+ #define FPU_FPCCR_CLRONRETS_VAL (1)
#ifndef FPU_FPCCR_CLRONRET_VAL
-#define FPU_FPCCR_CLRONRET_VAL (1)
+ #define FPU_FPCCR_CLRONRET_VAL (1)
#endif
-/* The C-Cache line size that is configured during startup. */
+ /* The C-Cache line size that is configured during startup. */
#ifndef BSP_CFG_C_CACHE_LINE_SIZE
-#define BSP_CFG_C_CACHE_LINE_SIZE (1U)
+ #define BSP_CFG_C_CACHE_LINE_SIZE (1U)
#endif
-/* Type 1 Peripheral Security Attribution */
+ /* Type 1 Peripheral Security Attribution */
-/* Peripheral Security Attribution Register (PSAR) Settings */
+ /* Peripheral Security Attribution Register (PSAR) Settings */
#ifndef BSP_TZ_CFG_PSARB
#define BSP_TZ_CFG_PSARB (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CAN1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* CAN0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* IIC1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* IIC0 */ | \
- (((1 > 0) ? 0U : 1U) << 11) /* USBFS */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* USBFS */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* SCI9 */ | \
@@ -114,7 +115,7 @@ extern "C" {
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* POEG1 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14) /* POEG0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 15) /* ADC1 */ | \
- (((1 > 0) ? 0U : 1U) << 16) /* ADC0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 16) /* ADC0 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* DAC */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* TSN */ | \
0xffae07f0) /* Unused */
@@ -129,13 +130,13 @@ extern "C" {
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* GPT9 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 23) /* GPT8 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 24) /* GPT7 */ | \
- (((1 > 0) ? 0U : 1U) << 25) /* GPT6 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 25) /* GPT6 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 26) /* GPT5 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* GPT4 */ | \
- (((1 > 0) ? 0U : 1U) << 28) /* GPT3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* GPT3 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 29) /* GPT2 */ | \
- (((1 > 0) ? 0U : 1U) << 30) /* GPT1 */ | \
- (((1 > 0) ? 0U : 1U) << 31) /* GPT0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 30) /* GPT1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* GPT0 */ | \
0x3f3ff8) /* Unused */
#endif
#ifndef BSP_TZ_CFG_MSSAR
@@ -145,19 +146,19 @@ extern "C" {
0xfffffffc) /* Unused */
#endif
-/* Type 2 Peripheral Security Attribution */
+ /* Type 2 Peripheral Security Attribution */
-/* Security attribution for Cache registers. */
+ /* Security attribution for Cache registers. */
#ifndef BSP_TZ_CFG_CSAR
#define BSP_TZ_CFG_CSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for RSTSRn registers. */
+ /* Security attribution for RSTSRn registers. */
#ifndef BSP_TZ_CFG_RSTSAR
#define BSP_TZ_CFG_RSTSAR (0xFFFFFFFFU)
#endif
-/* Security attribution for registers of LVD channels. */
+ /* Security attribution for registers of LVD channels. */
#ifndef BSP_TZ_CFG_LVDSAR
#define BSP_TZ_CFG_LVDSAR (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) | /* LVD Channel 1 */ \
@@ -165,16 +166,16 @@ extern "C" {
0xFFFFFFFCU)
#endif
-/* Security attribution for LPM registers. */
+ /* Security attribution for LPM registers. */
#ifndef BSP_TZ_CFG_LPMSAR
#define BSP_TZ_CFG_LPMSAR ((RA_NOT_DEFINED > 0) ? 0xFFFFFCEAU : 0xFFFFFFFFU)
#endif
-/* Deep Standby Interrupt Factor Security Attribution Register. */
+ /* Deep Standby Interrupt Factor Security Attribution Register. */
#ifndef BSP_TZ_CFG_DPFSAR
#define BSP_TZ_CFG_DPFSAR ((RA_NOT_DEFINED > 0) ? 0xF2E00000U : 0xFFFFFFFFU)
#endif
-/* Security attribution for CGC registers. */
+ /* Security attribution for CGC registers. */
#ifndef BSP_TZ_CFG_CGFSAR
#if BSP_CFG_CLOCKS_SECURE
/* Protect all CGC registers from Non-secure write access. */
@@ -185,12 +186,12 @@ extern "C" {
#endif
#endif
-/* Security attribution for Battery Backup registers. */
+ /* Security attribution for Battery Backup registers. */
#ifndef BSP_TZ_CFG_BBFSAR
#define BSP_TZ_CFG_BBFSAR (0x00FFFFFF)
#endif
-/* Security attribution for registers for IRQ channels. */
+ /* Security attribution for registers for IRQ channels. */
#ifndef BSP_TZ_CFG_ICUSARA
#define BSP_TZ_CFG_ICUSARA (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \
@@ -203,8 +204,8 @@ extern "C" {
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* External IRQ7 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8U) /* External IRQ8 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9U) /* External IRQ9 */ | \
- (((1 > 0) ? 0U : 1U) << 10U) /* External IRQ10 */ | \
- (((1 > 0) ? 0U : 1U) << 11U) /* External IRQ11 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 10U) /* External IRQ10 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11U) /* External IRQ11 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12U) /* External IRQ12 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13U) /* External IRQ13 */ | \
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14U) /* External IRQ14 */ | \
@@ -212,12 +213,12 @@ extern "C" {
0xFFFF0000U)
#endif
-/* Security attribution for NMI registers. */
+ /* Security attribution for NMI registers. */
#ifndef BSP_TZ_CFG_ICUSARB
#define BSP_TZ_CFG_ICUSARB (0 | 0xFFFFFFFEU) /* Should match AIRCR.BFHFNMINS. */
#endif
-/* Security attribution for registers for DMAC channels */
+ /* Security attribution for registers for DMAC channels */
#ifndef BSP_TZ_CFG_ICUSARC
#define BSP_TZ_CFG_ICUSARC (\
(((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \
@@ -231,29 +232,29 @@ extern "C" {
0xFFFFFF00U)
#endif
-/* Security attribution registers for SELSR0. */
+ /* Security attribution registers for SELSR0. */
#ifndef BSP_TZ_CFG_ICUSARD
#define BSP_TZ_CFG_ICUSARD ((RA_NOT_DEFINED > 0) ? 0xFFFFFFFEU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN0. */
+ /* Security attribution registers for WUPEN0. */
#ifndef BSP_TZ_CFG_ICUSARE
#define BSP_TZ_CFG_ICUSARE ((RA_NOT_DEFINED > 0) ? 0x04F2FFFFU : 0xFFFFFFFFU)
#endif
-/* Security attribution registers for WUPEN1. */
+ /* Security attribution registers for WUPEN1. */
#ifndef BSP_TZ_CFG_ICUSARF
#define BSP_TZ_CFG_ICUSARF ((RA_NOT_DEFINED > 0) ? 0xFFFFFFF8U : 0xFFFFFFFFU)
#endif
-/* Set DTCSTSAR if the Secure program uses the DTC. */
+ /* Set DTCSTSAR if the Secure program uses the DTC. */
#if RA_NOT_DEFINED == RA_NOT_DEFINED
-#define BSP_TZ_CFG_DTC_USED (0U)
+ #define BSP_TZ_CFG_DTC_USED (0U)
#else
#define BSP_TZ_CFG_DTC_USED (1U)
#endif
-/* Security attribution of FLWT and FCKMHZ registers. */
+ /* Security attribution of FLWT and FCKMHZ registers. */
#ifndef BSP_TZ_CFG_FSAR
/* If the CGC registers are only accessible in Secure mode, than there is no
* reason for nonsecure applications to access FLWT and FCKMHZ. */
@@ -266,118 +267,123 @@ extern "C" {
#endif
#endif
-/* Security attribution for SRAM registers. */
+ /* Security attribution for SRAM registers. */
#ifndef BSP_TZ_CFG_SRAMSAR
/* If the CGC registers are only accessible in Secure mode, than there is no reason for Non Secure applications to access
* SRAM0WTEN and therefore there is no reason to access PRCR2. */
-#define BSP_TZ_CFG_SRAMSAR (\
+ #define BSP_TZ_CFG_SRAMSAR (\
1 | \
((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 1U) : 0U) | \
4 | \
0xFFFFFFF8U)
#endif
-/* Security attribution for Standby RAM registers. */
+ /* Security attribution for Standby RAM registers. */
#ifndef BSP_TZ_CFG_STBRAMSAR
-#define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
+ #define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U)
#endif
-/* Security attribution for the DMAC Bus Master MPU settings. */
+ /* Security attribution for the DMAC Bus Master MPU settings. */
#ifndef BSP_TZ_CFG_MMPUSARA
-/* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
-#define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
+ /* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
+ #define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC)
#endif
-/* Security Attribution Register A for BUS Control registers. */
+ /* Security Attribution Register A for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARA
-#define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU)
#endif
-/* Security Attribution Register B for BUS Control registers. */
+ /* Security Attribution Register B for BUS Control registers. */
#ifndef BSP_TZ_CFG_BUSSARB
-#define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
+ #define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU)
#endif
-/* Enable Uninitialized Non-Secure Application Fallback. */
+ /* Enable Uninitialized Non-Secure Application Fallback. */
#ifndef BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK
-#define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
+ #define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
#endif
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-/* Option Function Select Register 1 Security Attribution */
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+
+ /* Option Function Select Register 1 Security Attribution */
#ifndef BSP_CFG_ROM_REG_OFS1_SEL
#if defined(_RA_TZ_SECURE) || defined(_RA_TZ_NONSECURE)
- #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U) | ((RA_NOT_DEFINED > 0) ? 0U : 0x7U))
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U | ((0U << 0U)) | ((0U << 2U)) | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0x700U : 0U))
#else
-#define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFF8F8U)
#endif
#endif
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8))
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-/* Dual Mode Select Register */
+ /* Dual Mode Select Register */
#ifndef BSP_CFG_ROM_REG_DUALSEL
-#define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (0x7U))
#endif
-/* Block Protection Register 0 */
+ /* Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_BPS0
-#define BSP_CFG_ROM_REG_BPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS0 (~( 0U))
#endif
-/* Block Protection Register 1 */
+ /* Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_BPS1
-#define BSP_CFG_ROM_REG_BPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_BPS1 (~( 0U))
#endif
-/* Block Protection Register 2 */
+ /* Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_BPS2
-#define BSP_CFG_ROM_REG_BPS2 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS2 (~( 0U))
#endif
-/* Block Protection Register 3 */
+ /* Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_BPS3
-#define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU)
#endif
-/* Permanent Block Protection Register 0 */
+ /* Permanent Block Protection Register 0 */
#ifndef BSP_CFG_ROM_REG_PBPS0
-#define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
#endif
-/* Permanent Block Protection Register 1 */
+ /* Permanent Block Protection Register 1 */
#ifndef BSP_CFG_ROM_REG_PBPS1
-#define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
+ #define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
#endif
-/* Permanent Block Protection Register 2 */
+ /* Permanent Block Protection Register 2 */
#ifndef BSP_CFG_ROM_REG_PBPS2
-#define BSP_CFG_ROM_REG_PBPS2 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_PBPS2 (~( 0U))
#endif
-/* Permanent Block Protection Register 3 */
+ /* Permanent Block Protection Register 3 */
#ifndef BSP_CFG_ROM_REG_PBPS3
-#define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU)
#endif
-/* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL0
-#define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
+ #define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
#endif
-/* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL1
-#define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
+ #define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
#endif
-/* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL2
-#define BSP_CFG_ROM_REG_BPS_SEL2 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2)
#endif
-/* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+ /* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
#ifndef BSP_CFG_ROM_REG_BPS_SEL3
-#define BSP_CFG_ROM_REG_BPS_SEL3 (0xFFFFFFFFU)
+ #define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3)
+#endif
+ /* Security Attribution for Bank Select Register */
+#ifndef BSP_CFG_ROM_REG_BANKSEL_SEL
+ #define BSP_CFG_ROM_REG_BANKSEL_SEL (0xFFFFFFFFU)
#endif
#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
#endif
#ifdef __cplusplus
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..d2eec08aeb
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,99 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define MIKROBUS_AN_ARDUINO_A0 (BSP_IO_PORT_00_PIN_00)
+#define ARDUINO_A1 (BSP_IO_PORT_00_PIN_01)
+#define ARDUINO_A2 (BSP_IO_PORT_00_PIN_02)
+#define ARDUINO_A3 (BSP_IO_PORT_00_PIN_03)
+#define SW2 (BSP_IO_PORT_00_PIN_04)
+#define SW1 (BSP_IO_PORT_00_PIN_05)
+#define LED1 (BSP_IO_PORT_00_PIN_06)
+#define LED2 (BSP_IO_PORT_00_PIN_07)
+#define LED3 (BSP_IO_PORT_00_PIN_08)
+#define ARDUINO_A4 (BSP_IO_PORT_00_PIN_14)
+#define ARDUINO_A5 (BSP_IO_PORT_00_PIN_15)
+#define OSPI_CLK (BSP_IO_PORT_01_PIN_00)
+#define OSPI_SIO7 (BSP_IO_PORT_01_PIN_01)
+#define OSPI_SIO1 (BSP_IO_PORT_01_PIN_02)
+#define OSPI_SIO6 (BSP_IO_PORT_01_PIN_03)
+#define OSPI_DQS (BSP_IO_PORT_01_PIN_04)
+#define OSPI_SIO5 (BSP_IO_PORT_01_PIN_05)
+#define OSPI_SIO0 (BSP_IO_PORT_01_PIN_06)
+#define OSPI_SIO3 (BSP_IO_PORT_01_PIN_07)
+#define MIKROBUS_PWM_ARDUINO_D3_PWM (BSP_IO_PORT_01_PIN_11)
+#define ARDUINO_D4 (BSP_IO_PORT_01_PIN_12)
+#define ARDUINO_D5 (BSP_IO_PORT_01_PIN_13)
+#define ARDUINO_D6 (BSP_IO_PORT_01_PIN_14)
+#define ARDUINO_D9 (BSP_IO_PORT_01_PIN_15)
+#define MIKROBUS_MISO_ARDUINO_MISO_PMOD1_MISO (BSP_IO_PORT_02_PIN_02)
+#define MIKROBUS_MOSI_ARDUINO_MOSI_PMOD1_MOSI (BSP_IO_PORT_02_PIN_03)
+#define MIKROBUS_SCK_ARDUINO_SCK_PMOD1_SCK (BSP_IO_PORT_02_PIN_04)
+#define MIKROBUS_SS_ARDUINO_SS (BSP_IO_PORT_02_PIN_05)
+#define PMOD1_SS (BSP_IO_PORT_02_PIN_06)
+#define ARDUINO_D8 (BSP_IO_PORT_02_PIN_07)
+#define PMOD1_SS2 (BSP_IO_PORT_03_PIN_01)
+#define PMOD1_SS3 (BSP_IO_PORT_03_PIN_02)
+#define MIKROBUS_RESET_ARDUINO_RESET (BSP_IO_PORT_03_PIN_03)
+#define QSPI_CLK (BSP_IO_PORT_03_PIN_05)
+#define QSPI_CS (BSP_IO_PORT_03_PIN_06)
+#define QSPI_IO0 (BSP_IO_PORT_03_PIN_07)
+#define QSPI_IO1 (BSP_IO_PORT_03_PIN_08)
+#define QSPI_IO2 (BSP_IO_PORT_03_PIN_09)
+#define QSPI_IO3 (BSP_IO_PORT_03_PIN_10)
+#define PMOD1_RST (BSP_IO_PORT_03_PIN_11)
+#define PMOD2_INT (BSP_IO_PORT_04_PIN_00)
+#define ETH_MDC (BSP_IO_PORT_04_PIN_01)
+#define ETH_MDIO (BSP_IO_PORT_04_PIN_02)
+#define ETH_RST (BSP_IO_PORT_04_PIN_03)
+#define PMOD2_RST (BSP_IO_PORT_04_PIN_04)
+#define ETH_TXEN (BSP_IO_PORT_04_PIN_05)
+#define ETH_TXD1 (BSP_IO_PORT_04_PIN_06)
+#define USBFS_VBUS (BSP_IO_PORT_04_PIN_07)
+#define PMOD2_SS2 (BSP_IO_PORT_04_PIN_08)
+#define MIKROBUS_INT_ARDUINO_INT0 (BSP_IO_PORT_04_PIN_09)
+#define PMOD2_MISO (BSP_IO_PORT_04_PIN_10)
+#define PMOD2_MOSI (BSP_IO_PORT_04_PIN_11)
+#define PMOD2_SCK (BSP_IO_PORT_04_PIN_12)
+#define PMOS2_SS (BSP_IO_PORT_04_PIN_13)
+#define GROVE1_SDA_QWIIC_SDA (BSP_IO_PORT_04_PIN_14)
+#define GROVE1_SCL_QWIIC_SCL (BSP_IO_PORT_04_PIN_15)
+#define USBFS_VBUS_EN (BSP_IO_PORT_05_PIN_00)
+#define USBFS_OVERCURA (BSP_IO_PORT_05_PIN_01)
+#define GROVE2_SCL (BSP_IO_PORT_05_PIN_05)
+#define GROVE2_SDA (BSP_IO_PORT_05_PIN_06)
+#define MIKROBUS_SDA_ARDUINO_SDA (BSP_IO_PORT_05_PIN_11)
+#define MIKROBUS_SCL_ARDUINO_SCL (BSP_IO_PORT_05_PIN_12)
+#define OSPI_SIO4 (BSP_IO_PORT_06_PIN_00)
+#define OSPI_SIO2 (BSP_IO_PORT_06_PIN_01)
+#define OSPI_CS1 (BSP_IO_PORT_06_PIN_02)
+#define ARDUINO_D7 (BSP_IO_PORT_06_PIN_08)
+#define CAN_TXD (BSP_IO_PORT_06_PIN_09)
+#define CAN_RDX (BSP_IO_PORT_06_PIN_10)
+#define CAN_STBY (BSP_IO_PORT_06_PIN_11)
+#define MIKROBUS_TX_ARDUINO_TX (BSP_IO_PORT_06_PIN_13)
+#define MIKROBUS_RX_ARDUINO_RX (BSP_IO_PORT_06_PIN_14)
+#define OSPI_RST (BSP_IO_PORT_06_PIN_15)
+#define ETH_TXD0 (BSP_IO_PORT_07_PIN_00)
+#define ETH_50REF (BSP_IO_PORT_07_PIN_01)
+#define ETH_RXD0 (BSP_IO_PORT_07_PIN_02)
+#define ETH_RXD1 (BSP_IO_PORT_07_PIN_03)
+#define ETH_RXERR (BSP_IO_PORT_07_PIN_04)
+#define ETH_CRSDV (BSP_IO_PORT_07_PIN_05)
+#define ETH_INT (BSP_IO_PORT_07_PIN_06)
+#define USBHS_OVERCURA (BSP_IO_PORT_07_PIN_07)
+#define PMOD2_SS3 (BSP_IO_PORT_07_PIN_08)
+#define PMOD1_INT (BSP_IO_PORT_09_PIN_05)
+#define USBHS_VBUS_EN (BSP_IO_PORT_11_PIN_00)
+#define USBHS_VBUS (BSP_IO_PORT_11_PIN_01)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA6M5 EK */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/bsp_clock_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/portenta_c33/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/ra6m5_ek/ra_gen/bsp_clock_cfg.h
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra6m5_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..6b814d74ac
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/ra_gen/pin_data.c
@@ -0,0 +1,411 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_GPT1)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_13,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_QSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_13,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_NMOS_ENABLE | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_NMOS_ENABLE | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CAN)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CAN)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_13,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_ETHER_RMII)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+ {
+ .pin = BSP_IO_PORT_07_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_11_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+ {
+ .pin = BSP_IO_PORT_11_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra6m5_ek/script/fsp.ld b/hw/bsp/ra/boards/ra6m5_ek/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra6m5_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra6m5_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..19864683f4
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/script/memory_regions.ld
@@ -0,0 +1,22 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x80000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x200000;
+ DATA_FLASH_START = 0x08000000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x0100A100;
+ OPTION_SETTING_LENGTH = 0x100;
+ OPTION_SETTING_S_START = 0x0100A200;
+ OPTION_SETTING_S_LENGTH = 0x100;
+ ID_CODE_START = 0x00000000;
+ ID_CODE_LENGTH = 0x0;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x4000000;
+ OSPI_DEVICE_0_START = 0x68000000;
+ OSPI_DEVICE_0_LENGTH = 0x8000000;
+ OSPI_DEVICE_1_START = 0x70000000;
+ OSPI_DEVICE_1_LENGTH = 0x10000000;
diff --git a/hw/bsp/ra/boards/ra6m5_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra6m5_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..4544d0f2a7
--- /dev/null
+++ b/hw/bsp/ra/boards/ra6m5_ek/smart_configurator/configuration.xml
@@ -0,0 +1,670 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ RA6M5-EK Board Support Files
+ Renesas.RA_board_ra6m5_ek.5.6.0.pack
+
+
+ Board support package for R7FA6M5BH3CFC
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5 - FSP Data
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+ Board support package for RA6M5 - Events
+ Renesas.RA_mcu_ra6m5.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/ra8m1_ek/board.cmake b/hw/bsp/ra/boards/ra8m1_ek/board.cmake
new file mode 100644
index 0000000000..9c797c3b7c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/board.cmake
@@ -0,0 +1,16 @@
+set(CMAKE_SYSTEM_PROCESSOR cortex-m85 CACHE INTERNAL "System Processor")
+set(MCU_VARIANT ra8m1)
+
+set(JLINK_DEVICE R7FA8M1AH)
+#set(JLINK_OPTION "-USB 001083115236")
+
+# device default to PORT 1 High Speed
+if (NOT DEFINED RHPORT_DEVICE)
+ set(RHPORT_DEVICE 1)
+endif()
+if (NOT DEFINED RHPORT_HOST)
+ set(RHPORT_HOST 0)
+endif()
+
+function(update_board TARGET)
+endfunction()
diff --git a/hw/bsp/ra/boards/ra8m1_ek/board.h b/hw/bsp/ra/boards/ra8m1_ek/board.h
new file mode 100644
index 0000000000..54672452f7
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/board.h
@@ -0,0 +1,47 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2023 Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+/* metadata:
+ name: RA8M1 EK
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ek-ra8m1-evaluation-kit-ra8m1-mcu-group
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LED_STATE_ON 1
+#define BUTTON_STATE_ACTIVE 0
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/hw/bsp/ra/boards/ra8m1_ek/board.mk b/hw/bsp/ra/boards/ra8m1_ek/board.mk
new file mode 100644
index 0000000000..2e56b37812
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/board.mk
@@ -0,0 +1,11 @@
+CPU_CORE = cortex-m85
+MCU_VARIANT = ra8m1
+
+# For flash-jlink target
+JLINK_DEVICE = R7FA8M1AH
+
+# Port 1 is highspeed
+RHPORT_DEVICE ?= 1
+RHPORT_HOST ?= 0
+
+flash: flash-jlink
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ozone/Renesas_RA8_TracePins.pex b/hw/bsp/ra/boards/ra8m1_ek/ozone/Renesas_RA8_TracePins.pex
new file mode 100644
index 0000000000..70dd323ecb
Binary files /dev/null and b/hw/bsp/ra/boards/ra8m1_ek/ozone/Renesas_RA8_TracePins.pex differ
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ozone/ra8m1.jdebug b/hw/bsp/ra/boards/ra8m1_ek/ozone/ra8m1.jdebug
new file mode 100644
index 0000000000..242a15db9a
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ozone/ra8m1.jdebug
@@ -0,0 +1,231 @@
+
+/*********************************************************************
+*
+* OnProjectLoad
+*
+* Function description
+* Project load routine. Required.
+*
+**********************************************************************
+*/
+void OnProjectLoad (void) {
+ Project.SetTraceSource ("Trace Pins");
+ Project.SetDevice ("R7FA8M1AH");
+ Project.SetHostIF ("USB", "");
+ Project.SetTargetIF ("SWD");
+ Project.SetTIFSpeed ("50 MHz");
+
+ Project.AddSvdFile ("$(InstallDir)/Config/CPU/Cortex-M85F.svd");
+ Project.AddSvdFile ("../../../../../../../cmsis-svd-data/data/Renesas/R7FA6M5BH.svd");
+
+ File.Open ("../../../../../../examples/cmake-build-ra8m1_ek/device/cdc_msc/cdc_msc.elf");
+}
+/*********************************************************************
+*
+* BeforeTargetConnect
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+void BeforeTargetConnect (void) {
+ // Trace pin init is done by J-Link script file as J-Link script files are IDE independent
+ //Project.SetJLinkScript("../../../debug.jlinkscript");
+ Project.SetJLinkScript ("$(ProjectDir)/Renesas_RA8_TracePins.pex");
+}
+
+/*********************************************************************
+*
+* AfterTargetConnect
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void AfterTargetConnect (void) {
+//}
+
+/*********************************************************************
+*
+* TargetDownload
+*
+* Function description
+* Replaces the default program download routine. Optional.
+*
+**********************************************************************
+*/
+//void TargetDownload (void) {
+//}
+
+/*********************************************************************
+*
+* BeforeTargetDownload
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void BeforeTargetDownload (void) {
+//}
+
+/*********************************************************************
+*
+* AfterTargetDownload
+*
+* Function description
+* Event handler routine. Optional.
+* The default implementation initializes SP and PC to reset values.
+*
+**********************************************************************
+*/
+void AfterTargetDownload (void) {
+ _SetupTarget();
+}
+
+/*********************************************************************
+*
+* BeforeTargetDisconnect
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void BeforeTargetDisconnect (void) {
+//}
+
+/*********************************************************************
+*
+* AfterTargetDisconnect
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void AfterTargetDisconnect (void) {
+//}
+
+/*********************************************************************
+*
+* AfterTargetHalt
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void AfterTargetHalt (void) {
+//}
+
+/*********************************************************************
+*
+* BeforeTargetResume
+*
+* Function description
+* Event handler routine. Optional.
+*
+**********************************************************************
+*/
+//void BeforeTargetResume (void) {
+//}
+
+/*********************************************************************
+*
+* OnSnapshotLoad
+*
+* Function description
+* Called upon loading a snapshot. Optional.
+*
+* Additional information
+* This function is used to restore the target state in cases
+* where values cannot simply be written to the target.
+* Typical use: GPIO clock needs to be enabled, before
+* GPIO is configured.
+*
+**********************************************************************
+*/
+//void OnSnapshotLoad (void) {
+//}
+
+/*********************************************************************
+*
+* OnSnapshotSave
+*
+* Function description
+* Called upon saving a snapshot. Optional.
+*
+* Additional information
+* This function is usually used to save values of the target
+* state which can either not be trivially read,
+* or need to be restored in a specific way or order.
+* Typically use: Memory Mapped Registers,
+* such as PLL and GPIO configuration.
+*
+**********************************************************************
+*/
+//void OnSnapshotSave (void) {
+//}
+
+/*********************************************************************
+*
+* OnError
+*
+* Function description
+* Called when an error occurred. Optional.
+*
+**********************************************************************
+*/
+//void OnError (void) {
+//}
+
+/*********************************************************************
+*
+* AfterProjectLoad
+*
+* Function description
+* After Project load routine. Optional.
+*
+**********************************************************************
+*/
+//void AfterProjectLoad (void) {
+//}
+
+/*********************************************************************
+*
+* _SetupTarget
+*
+* Function description
+* Setup the target.
+* Called by AfterTargetReset() and AfterTargetDownload().
+*
+* Auto-generated function. May be overridden by Ozone.
+*
+**********************************************************************
+*/
+void _SetupTarget(void) {
+ unsigned int SP;
+ unsigned int PC;
+ unsigned int VectorTableAddr;
+
+ VectorTableAddr = Elf.GetBaseAddr();
+ //
+ // Set up initial stack pointer
+ //
+ SP = Target.ReadU32(VectorTableAddr);
+ if (SP != 0xFFFFFFFF) {
+ Target.SetReg("SP", SP);
+ }
+ //
+ // Set up entry point PC
+ //
+ PC = Elf.GetEntryPointPC();
+ if (PC != 0xFFFFFFFF) {
+ Target.SetReg("PC", PC);
+ } else {
+ Util.Error("Project script error: failed to set up entry point PC", 1);
+ }
+}
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..90afbdef3d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x1000)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
new file mode 100644
index 0000000000..92e7ddcdb6
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
@@ -0,0 +1,5 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_CFG_H_
+#define BSP_MCU_DEVICE_CFG_H_
+#define BSP_CFG_MCU_PART_SERIES (8)
+#endif /* BSP_MCU_DEVICE_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..a22da075de
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA8M1AHECBD
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (2064384)
+ #define BSP_RAM_SIZE_BYTES (917504)
+ #define BSP_DATA_FLASH_SIZE_BYTES (12288)
+ #define BSP_PACKAGE_BGA
+ #define BSP_PACKAGE_PINS (224)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
new file mode 100644
index 0000000000..94f09c61fb
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -0,0 +1,526 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_FAMILY_CFG_H_
+#define BSP_MCU_FAMILY_CFG_H_
+#include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra8m1/bsp_override.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra8m1/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA8M1 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (0)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (16000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 1
+ #define BSP_HOCO_HZ (18000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (20000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 4
+ #define BSP_HOCO_HZ (32000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 7
+ #define BSP_HOCO_HZ (48000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
+
+ #define BSP_CFG_FLL_ENABLE (0)
+
+ #define BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE (1)
+ #define BSP_CFG_SLEEP_MODE_DELAY_ENABLE (1)
+ #define BSP_CFG_MSTP_CHANGE_DELAY_ENABLE (1)
+ #define BSP_CFG_RTOS_IDLE_SLEEP (0)
+ #define BSP_CFG_CLOCK_SETTLING_DELAY_US (150)
+
+ #if defined(BSP_PACKAGE_LQFP) && (BSP_PACKAGE_PINS == 100)
+ #define BSP_MAX_CLOCK_CHANGE_THRESHOLD (180000000U)
+ #elif defined(BSP_PACKAGE_LQFP)
+ #define BSP_MAX_CLOCK_CHANGE_THRESHOLD (200000000U)
+ #else
+ #define BSP_MAX_CLOCK_CHANGE_THRESHOLD (240000000U)
+ #endif
+
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
+
+ #if defined(_RA_TZ_SECURE)
+ #define BSP_TZ_SECURE_BUILD (1)
+ #define BSP_TZ_NONSECURE_BUILD (0)
+ #elif defined(_RA_TZ_NONSECURE)
+ #define BSP_TZ_SECURE_BUILD (0)
+ #define BSP_TZ_NONSECURE_BUILD (1)
+ #else
+ #define BSP_TZ_SECURE_BUILD (0)
+ #define BSP_TZ_NONSECURE_BUILD (0)
+ #endif
+
+ /* TrustZone Settings */
+ #define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE))
+ #define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY)
+ #define BSP_TZ_CFG_EXCEPTION_RESPONSE (0)
+
+ /* CMSIS TrustZone Settings */
+ #define SCB_CSR_AIRCR_INIT (1)
+ #define SCB_AIRCR_BFHFNMINS_VAL (0)
+ #define SCB_AIRCR_SYSRESETREQS_VAL (1)
+ #define SCB_AIRCR_PRIS_VAL (0)
+ #define TZ_FPU_NS_USAGE (1)
+#ifndef SCB_NSACR_CP10_11_VAL
+ #define SCB_NSACR_CP10_11_VAL (3U)
+#endif
+
+#ifndef FPU_FPCCR_TS_VAL
+ #define FPU_FPCCR_TS_VAL (1U)
+#endif
+ #define FPU_FPCCR_CLRONRETS_VAL (1)
+
+#ifndef FPU_FPCCR_CLRONRET_VAL
+ #define FPU_FPCCR_CLRONRET_VAL (1)
+#endif
+
+ /* Type 1 Peripheral Security Attribution */
+
+ /* Peripheral Security Attribution Register (PSAR) Settings */
+#ifndef BSP_TZ_CFG_PSARB
+#define BSP_TZ_CFG_PSARB (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4) /* I3C */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* IIC1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* IIC0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* USBFS */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12) /* USBHS */ | \
+ (1 << 15) /* ETHERC/EDMAC */ | \
+ (1 << 16) /* OSPI */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* SCI9 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* SCI4 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* SCI3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 29) /* SCI2 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 30) /* SCI1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* SCI0 */)
+#endif
+#ifndef BSP_TZ_CFG_PSARC
+#define BSP_TZ_CFG_PSARC (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* CAC */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CRC */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7) /* SSIE1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* SSIE0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* SDHI1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12) /* SDHI0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* DOC */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 16) /* CEU */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 26) /* CANFD1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* CANFD0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* RSIP-E51A */)
+#endif
+#ifndef BSP_TZ_CFG_PSARD
+#define BSP_TZ_CFG_PSARD (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4) /* AGT1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 5) /* AGT0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* POEG3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12) /* POEG2 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* POEG1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14) /* POEG0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 15) /* ADC121 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 16) /* ADC120 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* DAC120 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* TSN */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* ACMPHS1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* ACMPHS0 */)
+#endif
+#ifndef BSP_TZ_CFG_PSARE
+#define BSP_TZ_CFG_PSARE (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* WDT */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* IWDT */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3) /* RTC */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* ULPT1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9) /* ULPT0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* GPT13 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* GPT12 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* GPT11 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 21) /* GPT10 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* GPT9 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 23) /* GPT8 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 24) /* GPT7 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 25) /* GPT6 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 26) /* GPT5 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* GPT4 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* GPT3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 29) /* GPT2 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 30) /* GPT1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* GPT0 */)
+#endif
+#ifndef BSP_TZ_CFG_MSSAR
+#define BSP_TZ_CFG_MSSAR (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* DTC_DMAC */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* ELC */)
+#endif
+
+ /* Type 2 Peripheral Security Attribution */
+
+ /* Security attribution for RSTSRn registers. */
+#ifndef BSP_TZ_CFG_RSTSAR
+#define BSP_TZ_CFG_RSTSAR (0x00000007U)
+#endif
+
+ /* Security attribution for registers of LVD channels. */
+#ifndef BSP_TZ_CFG_LVDSAR
+ /* The LVD driver needs to access both channels. This means that the security attribution for both channels must be the same. */
+#if (RA_NOT_DEFINED > 0) || (RA_NOT_DEFINED > 0)
+#define BSP_TZ_CFG_LVDSAR (0U)
+#else
+#define BSP_TZ_CFG_LVDSAR (3U)
+#endif
+#endif
+
+ /* Security attribution for LPM registers.
+ * - OPCCR based on clock security.
+ * - Set remaining registers based on LPM security.
+ */
+#ifndef BSP_TZ_CFG_LPMSAR
+#define BSP_TZ_CFG_LPMSAR ((RA_NOT_DEFINED > 0) ? BSP_CFG_CLOCKS_SECURE == 0 : (\
+ 0x002E0106U | \
+ (BSP_CFG_CLOCKS_SECURE == 0)))
+#endif
+ /* Deep Standby Interrupt Factor Security Attribution Register. */
+#ifndef BSP_TZ_CFG_DPFSAR
+#define BSP_TZ_CFG_DPFSAR ((RA_NOT_DEFINED > 0) ? 0U : 0xAF1FFFFFU)
+#endif
+ /* RAM Standby Control Security Attribution Register. */
+#ifndef BSP_TZ_CFG_RSCSAR
+#define BSP_TZ_CFG_RSCSAR ((RA_NOT_DEFINED > 0) ? 0U : 0x00037FFFU)
+#endif
+
+ /* Security attribution for CGC registers. */
+#ifndef BSP_TZ_CFG_CGFSAR
+#if BSP_CFG_CLOCKS_SECURE
+/* Protect all CGC registers from Non-secure write access. */
+#define BSP_TZ_CFG_CGFSAR (0U)
+#else
+/* Allow Secure and Non-secure write access. */
+#define BSP_TZ_CFG_CGFSAR (0x047F3BFDU)
+#endif
+#endif
+
+ /* Security attribution for Battery Backup registers. */
+#ifndef BSP_TZ_CFG_BBFSAR
+#if 0
+#define BSP_TZ_CFG_BBFSAR (0U)
+#else
+#define BSP_TZ_CFG_BBFSAR (0x1FU)
+#endif
+#endif
+
+ /* Security attribution for Battery Backup registers (VBTBKRn). */
+#ifndef BSP_TZ_CFG_VBRSABAR
+#if 0
+#define BSP_TZ_CFG_VBRSABAR (0xFFE0)
+#else
+#define BSP_TZ_CFG_VBRSABAR (0xED00)
+#endif
+#endif
+
+ /* Security attribution for registers for IRQ channels. */
+#ifndef BSP_TZ_CFG_ICUSARA
+#define BSP_TZ_CFG_ICUSARA (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* External IRQ1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* External IRQ2 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* External IRQ3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* External IRQ4 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* External IRQ5 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* External IRQ6 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* External IRQ7 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8U) /* External IRQ8 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9U) /* External IRQ9 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 10U) /* External IRQ10 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11U) /* External IRQ11 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12U) /* External IRQ12 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13U) /* External IRQ13 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14U) /* External IRQ14 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 15U) /* External IRQ15 */)
+#endif
+
+ /* Security attribution for NMI registers. */
+#ifndef BSP_TZ_CFG_ICUSARB
+#define BSP_TZ_CFG_ICUSARB (0 | 0U) /* Should match AIRCR.BFHFNMINS. */
+#endif
+
+ /* Security attribution for registers for DMAC channels */
+#ifndef BSP_TZ_CFG_DMACCHSAR
+#define BSP_TZ_CFG_DMACCHSAR (\
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* DMAC Channel 1 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* DMAC Channel 2 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* DMAC Channel 3 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* DMAC Channel 4 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* DMAC Channel 5 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* DMAC Channel 6 */ | \
+ (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* DMAC Channel 7 */)
+#endif
+
+ /* Security attribution registers for WUPEN0. */
+#ifndef BSP_TZ_CFG_ICUSARE
+#define BSP_TZ_CFG_ICUSARE ((RA_NOT_DEFINED > 0) ? 0U : 0xFF1D0000U)
+#endif
+
+ /* Security attribution registers for WUPEN1. */
+#ifndef BSP_TZ_CFG_ICUSARF
+#define BSP_TZ_CFG_ICUSARF ((RA_NOT_DEFINED > 0) ? 0U : 0x00007F08U)
+#endif
+
+ /* Trusted Event Route Control Register for IELSR, DMAC.DELSR and ELC.ELSR. Note that currently Trusted Event Route Control is not supported. */
+#ifndef BSP_TZ_CFG_TEVTRCR
+#define BSP_TZ_CFG_TEVTRCR (0)
+#endif
+
+ /* Security attribution register for ELCR, ELSEGR0, ELSEGR1 Security Attribution. */
+#ifndef BSP_TZ_CFG_ELCSARA
+ #define BSP_TZ_CFG_ELCSARA (0x00000007U)
+#endif
+
+ /* Set DTCSTSAR if the Secure program uses the DTC. */
+#if RA_NOT_DEFINED == RA_NOT_DEFINED
+ #define BSP_TZ_CFG_DTC_USED (0U)
+#else
+ #define BSP_TZ_CFG_DTC_USED (1U)
+#endif
+
+ /* Security attribution of FLWT and FCKMHZ registers. */
+#ifndef BSP_TZ_CFG_FSAR
+/* If the CGC registers are only accessible in Secure mode, than there is no
+ * reason for nonsecure applications to access FLWT and FCKMHZ. */
+#define BSP_TZ_CFG_FSAR (\
+ ((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 0) : 0U) | /* FLWTSA */\
+ ((RA_NOT_DEFINED) > 0 ? 0U: (1U << 1)) | /* FCACHESA */\
+ ((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 8) : 0U) | /* FCKMHZSA */ \
+ ((RA_NOT_DEFINED) > 0 ? 0U : (1U << 9U)) | /* FACICMISA */\
+ ((RA_NOT_DEFINED) > 0 ? 0U: (1U << 10U)) /* FACICMRSA */)
+#endif
+
+ /* Security attribution for SRAM registers. */
+#ifndef BSP_TZ_CFG_SRAMSAR
+/* If the CGC registers are only accessible in Secure mode, than there is no reason for Non Secure applications to access
+ * SRAM0WTEN and therefore there is no reason to access PRCR2. */
+ #define BSP_TZ_CFG_SRAMSAR (\
+ ((1U) << 0U) | /* SRAMSA0 */\
+ ((1U) << 1U) | /* SRAMSA1 */\
+ ((1U) << 7U) | /* STBRAMSA */\
+ ((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 8U) : 0U) /* SRAMWTSA */)
+#endif
+
+ /* Security attribution for the DMAC Bus Master MPU settings. */
+#ifndef BSP_TZ_CFG_MMPUSARA
+ /* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */
+ #define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_DMACCHSAR)
+#endif
+
+ /* Security Attribution Register A for BUS Control registers. */
+#ifndef BSP_TZ_CFG_BUSSARA
+ #define BSP_TZ_CFG_BUSSARA (1U)
+#endif
+ /* Security Attribution Register B for BUS Control registers. */
+#ifndef BSP_TZ_CFG_BUSSARB
+ #define BSP_TZ_CFG_BUSSARB (1U)
+#endif
+ /* Security Attribution Register C for BUS Control registers. */
+#ifndef BSP_TZ_CFG_BUSSARC
+ #define BSP_TZ_CFG_BUSSARC (1U)
+#endif
+
+ /* Enable Uninitialized Non-Secure Application Fallback. */
+#ifndef BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK
+ #define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U)
+#endif
+
+
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+
+ #define BSP_CFG_ROM_REG_OFS2 ((1 << 0) | 0xFFFFFFFEU)
+
+ /* Option Function Select Register 1 Security Attribution */
+#ifndef BSP_CFG_ROM_REG_OFS1_SEL
+#if defined(_RA_TZ_SECURE) || defined(_RA_TZ_NONSECURE)
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0x00000000U | ((0U << 0U)) | ((0U << 3U)) | ((0U << 5U)) | ((BSP_CFG_CLOCKS_SECURE == 0) ? 0xF00U : 0U) | ((0U << 24U)) | ((0U << 25U)))
+#else
+ #define BSP_CFG_ROM_REG_OFS1_SEL (0x00000000U)
+#endif
+#endif
+ #define BSP_CFG_ROM_REG_OFS1_INITECCEN (0 << 25)
+ #define BSP_CFG_ROM_REG_OFS1 (0xFCFFFED0 | (1 << 3) | (7) | (1 << 5) | (1 << 8) | (1 << 24) | (BSP_CFG_ROM_REG_OFS1_INITECCEN))
+
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+
+ /* Dual Mode Select Register */
+#ifndef BSP_CFG_ROM_REG_DUALSEL
+ #define BSP_CFG_ROM_REG_DUALSEL (0xFFFFFFF8U | (0x7U))
+#endif
+
+ /* Block Protection Register 0 */
+#ifndef BSP_CFG_ROM_REG_BPS0
+ #define BSP_CFG_ROM_REG_BPS0 (~( 0U))
+#endif
+ /* Block Protection Register 1 */
+#ifndef BSP_CFG_ROM_REG_BPS1
+ #define BSP_CFG_ROM_REG_BPS1 (~( 0U))
+#endif
+ /* Block Protection Register 2 */
+#ifndef BSP_CFG_ROM_REG_BPS2
+ #define BSP_CFG_ROM_REG_BPS2 (~( 0U))
+#endif
+ /* Block Protection Register 3 */
+#ifndef BSP_CFG_ROM_REG_BPS3
+ #define BSP_CFG_ROM_REG_BPS3 (~( 0U))
+#endif
+ /* Permanent Block Protection Register 0 */
+#ifndef BSP_CFG_ROM_REG_PBPS0
+ #define BSP_CFG_ROM_REG_PBPS0 (~( 0U))
+#endif
+ /* Permanent Block Protection Register 1 */
+#ifndef BSP_CFG_ROM_REG_PBPS1
+ #define BSP_CFG_ROM_REG_PBPS1 (~( 0U))
+#endif
+ /* Permanent Block Protection Register 2 */
+#ifndef BSP_CFG_ROM_REG_PBPS2
+ #define BSP_CFG_ROM_REG_PBPS2 (~( 0U))
+#endif
+ /* Permanent Block Protection Register 3 */
+#ifndef BSP_CFG_ROM_REG_PBPS3
+ #define BSP_CFG_ROM_REG_PBPS3 (~( 0U))
+#endif
+ /* Security Attribution for Block Protection Register 0 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+#ifndef BSP_CFG_ROM_REG_BPS_SEL0
+ #define BSP_CFG_ROM_REG_BPS_SEL0 (BSP_CFG_ROM_REG_BPS0 & BSP_CFG_ROM_REG_PBPS0)
+#endif
+ /* Security Attribution for Block Protection Register 1 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+#ifndef BSP_CFG_ROM_REG_BPS_SEL1
+ #define BSP_CFG_ROM_REG_BPS_SEL1 (BSP_CFG_ROM_REG_BPS1 & BSP_CFG_ROM_REG_PBPS1)
+#endif
+ /* Security Attribution for Block Protection Register 2 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+#ifndef BSP_CFG_ROM_REG_BPS_SEL2
+ #define BSP_CFG_ROM_REG_BPS_SEL2 (BSP_CFG_ROM_REG_BPS2 & BSP_CFG_ROM_REG_PBPS2)
+#endif
+ /* Security Attribution for Block Protection Register 3 (If any blocks are marked as protected in the secure application, then mark them as secure) */
+#ifndef BSP_CFG_ROM_REG_BPS_SEL3
+ #define BSP_CFG_ROM_REG_BPS_SEL3 (BSP_CFG_ROM_REG_BPS3 & BSP_CFG_ROM_REG_PBPS3)
+#endif
+ /* Security Attribution for Bank Select Register */
+#ifndef BSP_CFG_ROM_REG_BANKSEL_SEL
+ #define BSP_CFG_ROM_REG_BANKSEL_SEL (0xFFFFFFFFU)
+#endif
+#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+#endif
+
+ /* FSBL Control Register 0 */
+#ifndef BSP_CFG_ROM_REG_FSBLCTRL0
+#define BSP_CFG_ROM_REG_FSBLCTRL0 ( \
+ (7 << R_OFS_DATAFLASH_FSBLCTRL0_FSBLEN_Pos) | \
+ (7 << R_OFS_DATAFLASH_FSBLCTRL0_FSBLSKIPSW_Pos) | \
+ (7 << R_OFS_DATAFLASH_FSBLCTRL0_FSBLSKIPDS_Pos) | \
+ (7 << R_OFS_DATAFLASH_FSBLCTRL0_FSBLCLK_Pos) | \
+ 0xFFFFF000)
+#endif
+
+ /* FSBL Control Register 1 */
+#ifndef BSP_CFG_ROM_REG_FSBLCTRL1
+#define BSP_CFG_ROM_REG_FSBLCTRL1 ( \
+ (3 << R_OFS_DATAFLASH_FSBLCTRL1_FSBLEXMD_Pos) | \
+ 0xFFFFFFFC)
+#endif
+
+ /* FSBL Control Register 2 */
+#ifndef BSP_CFG_ROM_REG_FSBLCTRL2
+#define BSP_CFG_ROM_REG_FSBLCTRL2 ( \
+ (15 << R_OFS_DATAFLASH_FSBLCTRL2_PORTPN_Pos) | \
+ (0x1F << R_OFS_DATAFLASH_FSBLCTRL2_PORTGN_Pos) | \
+ 0xFFFFFE00)
+#endif
+
+ /* Start Address of Code Certificate Register 0 */
+#ifndef BSP_CFG_ROM_REG_SACC0
+#define BSP_CFG_ROM_REG_SACC0 (0xFFFFFFFF)
+#endif
+
+ /* Start Address of Code Certificate Register 1 */
+#ifndef BSP_CFG_ROM_REG_SACC1
+#define BSP_CFG_ROM_REG_SACC1 (0xFFFFFFFF)
+#endif
+
+ /* Start Address of Measurement Report Register */
+#ifndef BSP_CFG_ROM_REG_SAMR
+#define BSP_CFG_ROM_REG_SAMR (0xFFFFFFFF)
+#endif
+
+#ifndef BSP_CFG_DCACHE_ENABLED
+#define BSP_CFG_DCACHE_ENABLED (0)
+#endif
+
+
+#ifndef BSP_CFG_SDRAM_ENABLED
+ #define BSP_CFG_SDRAM_ENABLED (0)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TRAS
+ #define BSP_CFG_SDRAM_TRAS (6)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TRCD
+ #define BSP_CFG_SDRAM_TRCD (3)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TRP
+ #define BSP_CFG_SDRAM_TRP (3)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TWR
+ #define BSP_CFG_SDRAM_TWR (2)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TCL
+ #define BSP_CFG_SDRAM_TCL (3)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TRFC
+ #define BSP_CFG_SDRAM_TRFC (937)
+#endif
+
+#ifndef BSP_CFG_SDRAM_TREFW
+ #define BSP_CFG_SDRAM_TREFW (8)
+#endif
+
+#ifndef BSP_CFG_SDRAM_INIT_ARFI
+ #define BSP_CFG_SDRAM_INIT_ARFI (10)
+#endif
+
+#ifndef BSP_CFG_SDRAM_INIT_ARFC
+ #define BSP_CFG_SDRAM_INIT_ARFC (8)
+#endif
+
+#ifndef BSP_CFG_SDRAM_INIT_PRC
+ #define BSP_CFG_SDRAM_INIT_PRC (3)
+#endif
+
+#ifndef BSP_CFG_SDRAM_MULTIPLEX_ADDR_SHIFT
+ #define BSP_CFG_SDRAM_MULTIPLEX_ADDR_SHIFT (1)
+#endif
+
+#ifndef BSP_CFG_SDRAM_ENDIAN_MODE
+ #define BSP_CFG_SDRAM_ENDIAN_MODE (0)
+#endif
+
+#ifndef BSP_CFG_SDRAM_ACCESS_MODE
+ #define BSP_CFG_SDRAM_ACCESS_MODE (1)
+#endif
+
+#ifndef BSP_CFG_SDRAM_BUS_WIDTH
+ #define BSP_CFG_SDRAM_BUS_WIDTH (0)
+#endif
+#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..8833634378
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,127 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define ENET_RMII_INT (BSP_IO_PORT_00_PIN_00)
+#define ARDUINO_A3 (BSP_IO_PORT_00_PIN_01)
+#define GROVE2_AN102 (BSP_IO_PORT_00_PIN_02)
+#define ARDUINO_A1 (BSP_IO_PORT_00_PIN_03)
+#define ARDUINO_A0_MIKROBUS_AN000 (BSP_IO_PORT_00_PIN_04)
+#define GROVE2_AN001 (BSP_IO_PORT_00_PIN_05)
+#define PMOD1_IRQ11 (BSP_IO_PORT_00_PIN_06)
+#define ARDUINO_A004 (BSP_IO_PORT_00_PIN_07)
+#define USER_S2 (BSP_IO_PORT_00_PIN_08)
+#define SW1 (BSP_IO_PORT_00_PIN_09)
+#define MIKROBUS_IRQ14 (BSP_IO_PORT_00_PIN_10)
+#define ARDUINO_A4 (BSP_IO_PORT_00_PIN_14)
+#define ARDUINO_A5 (BSP_IO_PORT_00_PIN_15)
+#define OSPI_DQ0 (BSP_IO_PORT_01_PIN_00)
+#define OSPI_DQ3 (BSP_IO_PORT_01_PIN_01)
+#define OSPI_DQ4 (BSP_IO_PORT_01_PIN_02)
+#define OSPI_DQ2 (BSP_IO_PORT_01_PIN_03)
+#define OSPI_CS (BSP_IO_PORT_01_PIN_04)
+#define OSPI_INT (BSP_IO_PORT_01_PIN_05)
+#define OSPI_RESET (BSP_IO_PORT_01_PIN_06)
+#define LED3 (BSP_IO_PORT_01_PIN_07)
+#define ETH_A_RMII_RMII_RXDV (BSP_IO_PORT_01_PIN_12)
+#define ETH_A_LINKSTA (BSP_IO_PORT_01_PIN_14)
+#define MPLX_CTRL (BSP_IO_PORT_01_PIN_15)
+#define NMI (BSP_IO_PORT_02_PIN_00)
+#define MD (BSP_IO_PORT_02_PIN_01)
+#define CAN_STB (BSP_IO_PORT_02_PIN_07)
+#define TDI (BSP_IO_PORT_02_PIN_08)
+#define TDO (BSP_IO_PORT_02_PIN_09)
+#define SWDIO (BSP_IO_PORT_02_PIN_10)
+#define SWCLK (BSP_IO_PORT_02_PIN_11)
+#define EXTAL (BSP_IO_PORT_02_PIN_12)
+#define XTAL (BSP_IO_PORT_02_PIN_13)
+#define ETH_A_RXER (BSP_IO_PORT_03_PIN_00)
+#define ETH_A_RXD1 (BSP_IO_PORT_03_PIN_01)
+#define ETH_A_RXD0 (BSP_IO_PORT_03_PIN_02)
+#define ETH_A_REFCLK (BSP_IO_PORT_03_PIN_03)
+#define ETH_A_TXD0 (BSP_IO_PORT_03_PIN_04)
+#define ETH_A_TXD1 (BSP_IO_PORT_03_PIN_05)
+#define ETH_A_TXEN (BSP_IO_PORT_03_PIN_06)
+#define ETH_A_MDIO (BSP_IO_PORT_03_PIN_07)
+#define ETH_A_MDC (BSP_IO_PORT_03_PIN_08)
+#define ARDUINO_D0_MIKROBUS_RXD3 (BSP_IO_PORT_03_PIN_09)
+#define ARDUINO_D1_MIKROBUS_TXD3 (BSP_IO_PORT_03_PIN_10)
+#define CAN_RXD (BSP_IO_PORT_03_PIN_11)
+#define CAN_TXD (BSP_IO_PORT_03_PIN_12)
+#define I3C_SCL0_ARDUINO_MIKROBUS_PMOD1_3_qwiic (BSP_IO_PORT_04_PIN_00)
+#define I3C_SDA0_ARDUINO_MIKROBUS_PMOD1_4_qwiic (BSP_IO_PORT_04_PIN_01)
+#define ETH_B_MDIO (BSP_IO_PORT_04_PIN_02)
+#define ETH_B_LINKSTA (BSP_IO_PORT_04_PIN_03)
+#define ETH_B_RST_N (BSP_IO_PORT_04_PIN_04)
+#define ETH_B_TXEN (BSP_IO_PORT_04_PIN_05)
+#define ETH_B_TXD1 (BSP_IO_PORT_04_PIN_06)
+#define USBFS_VBUS (BSP_IO_PORT_04_PIN_07)
+#define USBHS_VBUSEN (BSP_IO_PORT_04_PIN_08)
+#define USBHS_OVRCURA (BSP_IO_PORT_04_PIN_09)
+#define MISOB_B_ARDUINO_MIKROBUS (BSP_IO_PORT_04_PIN_10)
+#define MOSIB_B_ARDUINO_MIKROBUS (BSP_IO_PORT_04_PIN_11)
+#define RSPCKB_B_ARDUINO_MIKROBUS (BSP_IO_PORT_04_PIN_12)
+#define SSLB0_B_ARDUINO_D10_MIKROBUS (BSP_IO_PORT_04_PIN_13)
+#define LED2 (BSP_IO_PORT_04_PIN_14)
+#define USBFS_VBUS_EN (BSP_IO_PORT_05_PIN_00)
+#define USBFS_OVERCURA (BSP_IO_PORT_05_PIN_01)
+#define MIKROBUS_RESET (BSP_IO_PORT_05_PIN_02)
+#define PMOD2_7_IRQ1 (BSP_IO_PORT_05_PIN_08)
+#define GROVE2_IIC_SDA1 (BSP_IO_PORT_05_PIN_11)
+#define GROVE2_IIC_SCL1 (BSP_IO_PORT_05_PIN_12)
+#define LED1 (BSP_IO_PORT_06_PIN_00)
+#define ARDUINO_D5 (BSP_IO_PORT_06_PIN_01)
+#define ARDUINO_D6 (BSP_IO_PORT_06_PIN_02)
+#define ARDUINO_D9 (BSP_IO_PORT_06_PIN_03)
+#define PMOD1_3_MISO0_RXD0_SCL0 (BSP_IO_PORT_06_PIN_09)
+#define PMOD1_2_MOSI0_TXD0 (BSP_IO_PORT_06_PIN_10)
+#define PMOD1_4_SCK0 (BSP_IO_PORT_06_PIN_11)
+#define PMOD1_1_SSL0_CTS_RTS (BSP_IO_PORT_06_PIN_12)
+#define PMOD1_1_CTS0 (BSP_IO_PORT_06_PIN_13)
+#define PMOD1_9_GPIO (BSP_IO_PORT_06_PIN_14)
+#define PMOD1_10_GPIO (BSP_IO_PORT_06_PIN_15)
+#define ETH_B_TXD0 (BSP_IO_PORT_07_PIN_00)
+#define ETH_B_REFCLK (BSP_IO_PORT_07_PIN_01)
+#define ETH_B_RXD0 (BSP_IO_PORT_07_PIN_02)
+#define ETH_B_RXD1 (BSP_IO_PORT_07_PIN_03)
+#define ETH_B_RXER (BSP_IO_PORT_07_PIN_04)
+#define ETH_B_RMII_RXDV (BSP_IO_PORT_07_PIN_05)
+#define I3C_SDA0_PULLUP (BSP_IO_PORT_07_PIN_11)
+#define OSPI_DQ5 (BSP_IO_PORT_08_PIN_00)
+#define OSPI_DS (BSP_IO_PORT_08_PIN_01)
+#define OSPI_DQ6 (BSP_IO_PORT_08_PIN_02)
+#define OSPI_DQ1 (BSP_IO_PORT_08_PIN_03)
+#define OSPI_DQ7 (BSP_IO_PORT_08_PIN_04)
+#define OSPI_CK (BSP_IO_PORT_08_PIN_08)
+#define PMOD2_8_RESET (BSP_IO_PORT_08_PIN_09)
+#define PMOD2_9_GPIO (BSP_IO_PORT_08_PIN_10)
+#define PMOD2_10_GPIO (BSP_IO_PORT_08_PIN_11)
+#define ARDUINO_RESET (BSP_IO_PORT_08_PIN_12)
+#define USBFS_P (BSP_IO_PORT_08_PIN_14)
+#define USBFS_N (BSP_IO_PORT_08_PIN_15)
+#define ARDUINO_D4 (BSP_IO_PORT_09_PIN_05)
+#define ARDUINO_D2 (BSP_IO_PORT_09_PIN_06)
+#define ARDUINO_D3_MIKROBUS_GTIOC13A (BSP_IO_PORT_09_PIN_07)
+#define ARDUINO_D7 (BSP_IO_PORT_09_PIN_08)
+#define ARDUINO_D8 (BSP_IO_PORT_09_PIN_09)
+#define PMOD2_3_MISO2_RXD2 (BSP_IO_PORT_10_PIN_02)
+#define PMOD2_2_MOSI2_TXD2 (BSP_IO_PORT_10_PIN_03)
+#define PMOD2_4_SCK2 (BSP_IO_PORT_10_PIN_04)
+#define PMOD2_1_CTS_RTS_SSL2 (BSP_IO_PORT_10_PIN_05)
+#define PMOD2_1_CTS2 (BSP_IO_PORT_10_PIN_06)
+#define PMOD1_8_RESET (BSP_IO_PORT_10_PIN_08)
+#define JLOB_COMS_TX (BSP_IO_PORT_10_PIN_14)
+#define JLOB_COMS_RX (BSP_IO_PORT_10_PIN_15)
+#define I3C_SCL0_PULLUP (BSP_IO_PORT_11_PIN_00)
+#define USBHS_VBUS (BSP_IO_PORT_11_PIN_01)
+extern const ioport_cfg_t g_bsp_pin_cfg; /* RA8M1 EK */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_gen/bsp_clock_cfg.h b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/bsp_clock_cfg.h
new file mode 100644
index 0000000000..f2f1ae0c9c
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/bsp_clock_cfg.h
@@ -0,0 +1,56 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CLOCK_CFG_H_
+#define BSP_CLOCK_CFG_H_
+#define BSP_CFG_CLOCKS_SECURE (0)
+#define BSP_CFG_CLOCKS_OVERRIDE (0)
+#define BSP_CFG_XTAL_HZ (20000000) /* XTAL 20000000Hz */
+#define BSP_CFG_HOCO_FREQUENCY (7) /* HOCO 48MHz */
+#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
+#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL Div /2 */
+#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(96,0) /* PLL Mul x80-99|Mul x96|PLL Mul x96.00 */
+#define BSP_CFG_PLL_FREQUENCY_HZ (960000000) /* PLL 960000000Hz */
+#define BSP_CFG_PLODIVP (BSP_CLOCKS_PLL_DIV_2) /* PLL1P Div /2 */
+#define BSP_CFG_PLL1P_FREQUENCY_HZ (480000000) /* PLL1P 480000000Hz */
+#define BSP_CFG_PLODIVQ (BSP_CLOCKS_PLL_DIV_4) /* PLL1Q Div /4 */
+#define BSP_CFG_PLL1Q_FREQUENCY_HZ (240000000) /* PLL1Q 240000000Hz */
+#define BSP_CFG_PLODIVR (BSP_CLOCKS_PLL_DIV_2) /* PLL1R Div /2 */
+#define BSP_CFG_PLL1R_FREQUENCY_HZ (480000000) /* PLL1R 480000000Hz */
+#define BSP_CFG_PLL2_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* PLL2 Disabled */
+#define BSP_CFG_PLL2_DIV (BSP_CLOCKS_PLL_DIV_2) /* PLL2 Div /2 */
+#define BSP_CFG_PLL2_MUL BSP_CLOCKS_PLL_MUL(96,0) /* PLL2 Mul x80-99|Mul x96|PLL2 Mul x96.00 */
+#define BSP_CFG_PLL2_FREQUENCY_HZ (0) /* PLL2 0Hz */
+#define BSP_CFG_PL2ODIVP (BSP_CLOCKS_PLL_DIV_2) /* PLL2P Div /2 */
+#define BSP_CFG_PLL2P_FREQUENCY_HZ (0) /* PLL2P 0Hz */
+#define BSP_CFG_PL2ODIVQ (BSP_CLOCKS_PLL_DIV_2) /* PLL2Q Div /2 */
+#define BSP_CFG_PLL2Q_FREQUENCY_HZ (0) /* PLL2Q 0Hz */
+#define BSP_CFG_PL2ODIVR (BSP_CLOCKS_PLL_DIV_2) /* PLL2R Div /2 */
+#define BSP_CFG_PLL2R_FREQUENCY_HZ (0) /* PLL2R 0Hz */
+#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL1P) /* Clock Src: PLL1P */
+#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
+#define BSP_CFG_SCICLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* SCICLK Disabled */
+#define BSP_CFG_SPICLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* SPICLK Disabled */
+#define BSP_CFG_CANFDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CANFDCLK Disabled */
+#define BSP_CFG_I3CCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* I3CCLK Disabled */
+#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL1Q) /* UCK Src: PLL1Q */
+#define BSP_CFG_U60CK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL1P) /* U60CK Src: PLL1P */
+#define BSP_CFG_OCTA_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* OCTASPICLK Disabled */
+#define BSP_CFG_CPUCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CPUCLK Div /1 */
+#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* ICLK Div /2 */
+#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKA Div /4 */
+#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* PCLKB Div /8 */
+#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* PCLKC Div /8 */
+#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKD Div /4 */
+#define BSP_CFG_PCLKE_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKE Div /2 */
+#define BSP_CFG_SDCLK_OUTPUT (1) /* SDCLK Enabled */
+#define BSP_CFG_BCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* BCLK Div /4 */
+#define BSP_CFG_BCLK_OUTPUT (2) /* EBCLK Div /2 */
+#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_8) /* FCLK Div /8 */
+#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
+#define BSP_CFG_SCICLK_DIV (BSP_CLOCKS_SCI_CLOCK_DIV_4) /* SCICLK Div /4 */
+#define BSP_CFG_SPICLK_DIV (BSP_CLOCKS_SPI_CLOCK_DIV_4) /* SPICLK Div /4 */
+#define BSP_CFG_CANFDCLK_DIV (BSP_CLOCKS_CANFD_CLOCK_DIV_8) /* CANFDCLK Div /8 */
+#define BSP_CFG_I3CCLK_DIV (BSP_CLOCKS_I3C_CLOCK_DIV_3) /* I3CCLK Div /3 */
+#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCK Div /5 */
+#define BSP_CFG_U60CK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_8) /* U60CK Div /8 */
+#define BSP_CFG_OCTA_DIV (BSP_CLOCKS_OCTA_CLOCK_DIV_4) /* OCTASPICLK Div /4 */
+#endif /* BSP_CLOCK_CFG_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.c b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.h b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/ra8m1_ek/ra_gen/pin_data.c b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/pin_data.c
new file mode 100644
index 0000000000..b924217397
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/ra_gen/pin_data.c
@@ -0,0 +1,275 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_00_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_00_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_02_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_TRACE)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_13,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_05_PIN_12,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC)
+ },
+ {
+ .pin = BSP_IO_PORT_06_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HS_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_OSPI)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_09,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_08_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_02,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_03,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_04,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_05,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_06,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_10_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9)
+ },
+ {
+ .pin = BSP_IO_PORT_11_PIN_01,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_HS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/ra8m1_ek/script/fsp.ld b/hw/bsp/ra/boards/ra8m1_ek/script/fsp.ld
new file mode 100644
index 0000000000..d7f78a9158
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/script/fsp.ld
@@ -0,0 +1,823 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+OPTION_SETTING_DATA_FLASH_S_START = DEFINED(OPTION_SETTING_DATA_FLASH_S_START) ? OPTION_SETTING_DATA_FLASH_S_START : 0;
+OPTION_SETTING_DATA_FLASH_S_LENGTH = DEFINED(OPTION_SETTING_DATA_FLASH_S_LENGTH) ? OPTION_SETTING_DATA_FLASH_S_LENGTH : 0;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_DATA_FLASH = PROJECT_SECURE_OR_FLAT && (OPTION_SETTING_DATA_FLASH_S_LENGTH != 0);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ OPTION_SETTING_DATA_FLASH_S (r) : ORIGIN = OPTION_SETTING_DATA_FLASH_S_START, LENGTH = OPTION_SETTING_DATA_FLASH_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __FLASH_NSC_START = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ . = .;
+ __nocache_pre_location = .;
+ .nocache ALIGN(32) (NOLOAD):
+ {
+ __nocache_start = .;
+
+ KEEP(*(.nocache))
+
+ . = ALIGN(32);
+ __nocache_end = .;
+ } > RAM
+ . = (SIZEOF(.nocache) > 0) ? __nocache_end : __nocache_pre_location;
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __RAM_NSC_START = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(FLASH_BOOTLOADER_LENGTH) ? (RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH) : DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_NSC_START, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ . = .;
+ __nocache_sdram_pre_location = .;
+ .nocache_sdram ALIGN(32) (NOLOAD):
+ {
+ __nocache_sdram_start = .;
+
+ KEEP(*(.nocache_sdram))
+
+ . = ALIGN(32);
+ __nocache_sdram_end = .;
+ } > SDRAM
+ . = (SIZEOF(.nocache_sdram) > 0) ? __nocache_sdram_end : __nocache_sdram_pre_location;
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_DATA_FLASH_S_S = ORIGIN(OPTION_SETTING_DATA_FLASH_S);
+
+ .option_setting_data_flash_s :
+ {
+ __OPTION_SETTING_DATA_FLASH_S_Start = .;
+ KEEP(*(.option_setting_data_flash_fsblctrl0))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x04 : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_fsblctrl1))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x08 : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_fsblctrl2))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x0C : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_sacc0))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x10 : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_sacc1))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x14 : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_samr))
+ . = USE_OPTION_SETTING_DATA_FLASH ? __OPTION_SETTING_DATA_FLASH_S_Start + 0x2E0 : __OPTION_SETTING_DATA_FLASH_S_Start;
+ KEEP(*(.option_setting_data_flash_hoemrtpk))
+ __OPTION_SETTING_DATA_FLASH_S_End = .;
+ } > OPTION_SETTING_DATA_FLASH_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_DATA_FLASH_S_N = __OPTION_SETTING_DATA_FLASH_S_End;
+}
diff --git a/hw/bsp/ra/boards/ra8m1_ek/script/memory_regions.ld b/hw/bsp/ra/boards/ra8m1_ek/script/memory_regions.ld
new file mode 100644
index 0000000000..2bc162511f
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/script/memory_regions.ld
@@ -0,0 +1,30 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x22000000;
+ RAM_LENGTH = 0xE0000;
+ FLASH_START = 0x02000000;
+ FLASH_LENGTH = 0x1F8000;
+ DATA_FLASH_START = 0x27000000;
+ DATA_FLASH_LENGTH = 0x3000;
+ OPTION_SETTING_START = 0x0300A100;
+ OPTION_SETTING_LENGTH = 0x100;
+ OPTION_SETTING_S_START = 0x0300A200;
+ OPTION_SETTING_S_LENGTH = 0x100;
+ OPTION_SETTING_DATA_FLASH_S_START = 0x27030080;
+ OPTION_SETTING_DATA_FLASH_S_LENGTH = 0x800;
+ ID_CODE_START = 0x00000000;
+ ID_CODE_LENGTH = 0x0;
+ SDRAM_START = 0x68000000;
+ SDRAM_LENGTH = 0x8000000;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x0;
+ OSPI_DEVICE_0_START = 0x80000000;
+ OSPI_DEVICE_0_LENGTH = 0x10000000;
+ OSPI_DEVICE_1_START = 0x90000000;
+ OSPI_DEVICE_1_LENGTH = 0x10000000;
+ ITCM_START = 0x00000000;
+ ITCM_LENGTH = 0x10000;
+ DTCM_START = 0x20000000;
+ DTCM_LENGTH = 0x10000;
+ NS_OFFSET_START = 0x10000000;
+ NS_OFFSET_LENGTH = 0x0;
diff --git a/hw/bsp/ra/boards/ra8m1_ek/smart_configurator/configuration.xml b/hw/bsp/ra/boards/ra8m1_ek/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..0f83b4a11d
--- /dev/null
+++ b/hw/bsp/ra/boards/ra8m1_ek/smart_configurator/configuration.xml
@@ -0,0 +1,680 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simple application that blinks an LED. No RTOS included.
+ Renesas.RA_baremetal_blinky.5.6.0.pack
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ RA8M1-EK Board Support Files
+ Renesas.RA_board_ra8m1_ek.5.6.0.pack
+
+
+ Board support package for R7FA8M1AHECBD
+ Renesas.RA_mcu_ra8m1.5.6.0.pack
+
+
+ Board support package for RA8M1
+ Renesas.RA_mcu_ra8m1.5.6.0.pack
+
+
+ Board support package for RA8M1 - FSP Data
+ Renesas.RA_mcu_ra8m1.5.6.0.pack
+
+
+ Board support package for RA8M1 - Events
+ Renesas.RA_mcu_ra8m1.5.6.0.pack
+
+
+ USB Basic
+ Renesas.RA.5.6.0.pack
+
+
+ USB Peripheral Communications Device Class
+ Renesas.RA.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/uno_r4/board.cmake b/hw/bsp/ra/boards/uno_r4/board.cmake
index 9d59bc4f77..3aa6045be0 100644
--- a/hw/bsp/ra/boards/uno_r4/board.cmake
+++ b/hw/bsp/ra/boards/uno_r4/board.cmake
@@ -1,13 +1,9 @@
set(CMAKE_SYSTEM_PROCESSOR cortex-m4 CACHE INTERNAL "System Processor")
set(MCU_VARIANT ra4m1)
-
set(JLINK_DEVICE R7FA4M1AB)
-set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/${BOARD}.ld)
function(update_board TARGET)
target_compile_definitions(${TARGET} PUBLIC
CFG_EXAMPLE_VIDEO_READONLY
)
-# target_sources(${TARGET} PRIVATE)
-# target_include_directories(${BOARD_TARGET} PUBLIC)
endfunction()
diff --git a/hw/bsp/ra/boards/uno_r4/board.h b/hw/bsp/ra/boards/uno_r4/board.h
index 72abda27f9..4e7ebb5ceb 100644
--- a/hw/bsp/ra/boards/uno_r4/board.h
+++ b/hw/bsp/ra/boards/uno_r4/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Arduino UNO R4
+ url: https://store-usa.arduino.cc/pages/uno-r4
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
@@ -31,20 +36,8 @@
extern "C" {
#endif
-#define LED1 BSP_IO_PORT_01_PIN_11 // D13
-#define LED_STATE_ON 1
-
-#define SW1 BSP_IO_PORT_01_PIN_10 // D12
-#define BUTTON_STATE_ACTIVE 0
-
-static const ioport_pin_cfg_t board_pin_cfg[] = {
- {.pin = LED1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_OUTPUT},
- {.pin = SW1, .pin_cfg = IOPORT_CFG_PORT_DIRECTION_INPUT},
- // USB FS D+, D-, VBus
- {.pin = BSP_IO_PORT_04_PIN_07, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_14, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
- {.pin = BSP_IO_PORT_09_PIN_15, .pin_cfg = IOPORT_CFG_PERIPHERAL_PIN | IOPORT_PERIPHERAL_USB_FS},
-};
+#define LED_STATE_ON 1
+#define BUTTON_STATE_ACTIVE 0
#ifdef __cplusplus
}
diff --git a/hw/bsp/ra/boards/uno_r4/board.mk b/hw/bsp/ra/boards/uno_r4/board.mk
index b7075eec0b..f257c0000f 100644
--- a/hw/bsp/ra/boards/uno_r4/board.mk
+++ b/hw/bsp/ra/boards/uno_r4/board.mk
@@ -1,8 +1,6 @@
CPU_CORE = cortex-m4
MCU_VARIANT = ra4m1
-LD_FILE = ${BOARD_PATH}/${BOARD}.ld
-
# For flash-jlink target
JLINK_DEVICE = R7FA4M1AB
diff --git a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_cfg.h
deleted file mode 100644
index c1d1022cc1..0000000000
--- a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_cfg.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_CFG_H_
-#define BSP_CFG_H_
-
-#include "bsp_clock_cfg.h"
-#include "bsp_mcu_family_cfg.h"
-#include "board_cfg.h"
-
-#undef RA_NOT_DEFINED
-#define BSP_CFG_RTOS (0)
-#if defined(_RA_BOOT_IMAGE)
-#define BSP_CFG_BOOT_IMAGE (1)
-#endif
-#define BSP_CFG_MCU_VCC_MV (3300)
-#define BSP_CFG_STACK_MAIN_BYTES (0x800)
-#define BSP_CFG_HEAP_BYTES (0x1000)
-#define BSP_CFG_PARAM_CHECKING_ENABLE (1)
-#define BSP_CFG_ASSERT (0)
-#define BSP_CFG_ERROR_LOG (0)
-
-#define BSP_CFG_PFS_PROTECT ((1))
-
-#define BSP_CFG_C_RUNTIME_INIT ((1))
-#define BSP_CFG_EARLY_INIT ((0))
-
-#define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
-
-#define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (0)
-
-#define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
-#define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
-#define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (0)
-#define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
-
-#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
deleted file mode 100644
index 336918800f..0000000000
--- a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* generated configuration header file - do not edit */
-#ifndef BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_DEVICE_PN_CFG_H_
-#define BSP_MCU_R7FA4M1AB3CNE
-#define BSP_MCU_FEATURE_SET ('A')
-#define BSP_ROM_SIZE_BYTES (262144)
-#define BSP_RAM_SIZE_BYTES (32768)
-#define BSP_DATA_FLASH_SIZE_BYTES (8192)
-#define BSP_PACKAGE_QFN
-#define BSP_PACKAGE_PINS (48)
-#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_family_cfg.h
deleted file mode 100644
index fc604eb3b1..0000000000
--- a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_family_cfg.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* generated configuration header file through renesas e2 studio */
-#ifndef BSP_MCU_FAMILY_CFG_H_
-#define BSP_MCU_FAMILY_CFG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "bsp_mcu_device_pn_cfg.h"
-#include "bsp_mcu_device_cfg.h"
-#include "bsp_mcu_info.h"
-#include "bsp_clock_cfg.h"
-
-#define BSP_MCU_GROUP_RA4M1 (1)
-#define BSP_LOCO_HZ (32768)
-#define BSP_MOCO_HZ (8000000)
-#define BSP_SUB_CLOCK_HZ (32768)
-#if BSP_CFG_HOCO_FREQUENCY == 0
- #define BSP_HOCO_HZ (24000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 2
- #define BSP_HOCO_HZ (32000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 4
- #define BSP_HOCO_HZ (48000000)
-#elif BSP_CFG_HOCO_FREQUENCY == 5
- #define BSP_HOCO_HZ (64000000)
-#else
- #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
-#endif
-#define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
-#define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
-#define BSP_MCU_VBATT_SUPPORT (1)
-
-#define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
-#define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
-#define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
-#define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
-#define OFS_SEQ5 (1 << 28) | (1 << 30)
-#define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
-#define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
-#define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
-#define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC0_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC0_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_PC1_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_PC1_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
-#define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
-#define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
-#define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
-#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
-#define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
-#endif
-/* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
-#define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
-
-/*
- ID Code
- Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
- WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
- */
-#if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
- #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
- #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
- #else
-/* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
-#define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
-#define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
new file mode 100644
index 0000000000..4eef62a0e6
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_cfg.h
@@ -0,0 +1,62 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_CFG_H_
+#define BSP_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_clock_cfg.h"
+ #include "bsp_mcu_family_cfg.h"
+ #include "board_cfg.h"
+ #define RA_NOT_DEFINED 0
+ #ifndef BSP_CFG_RTOS
+ #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (2)
+ #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED)
+ #define BSP_CFG_RTOS (1)
+ #else
+ #define BSP_CFG_RTOS (0)
+ #endif
+ #endif
+ #ifndef BSP_CFG_RTC_USED
+ #define BSP_CFG_RTC_USED (RA_NOT_DEFINED)
+ #endif
+ #undef RA_NOT_DEFINED
+ #if defined(_RA_BOOT_IMAGE)
+ #define BSP_CFG_BOOT_IMAGE (1)
+ #endif
+ #define BSP_CFG_MCU_VCC_MV (3300)
+ #define BSP_CFG_STACK_MAIN_BYTES (0x800)
+ #define BSP_CFG_HEAP_BYTES (0x1000)
+ #define BSP_CFG_PARAM_CHECKING_ENABLE (0)
+ #define BSP_CFG_ASSERT (0)
+ #define BSP_CFG_ERROR_LOG (0)
+
+ #define BSP_CFG_PFS_PROTECT ((1))
+
+ #define BSP_CFG_C_RUNTIME_INIT ((1))
+ #define BSP_CFG_EARLY_INIT ((0))
+
+ #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0))
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED
+ #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (0)
+ #endif
+
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE
+ #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE
+ #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED
+ #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (0)
+ #endif
+ #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS
+ #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
similarity index 100%
rename from hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp/bsp_mcu_device_cfg.h
rename to hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h
diff --git a/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
new file mode 100644
index 0000000000..3f1d02b0db
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h
@@ -0,0 +1,11 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_DEVICE_PN_CFG_H_
+#define BSP_MCU_R7FA4M1AB3CNE
+ #define BSP_MCU_FEATURE_SET ('A')
+ #define BSP_ROM_SIZE_BYTES (262144)
+ #define BSP_RAM_SIZE_BYTES (32768)
+ #define BSP_DATA_FLASH_SIZE_BYTES (8192)
+ #define BSP_PACKAGE_QFN
+ #define BSP_PACKAGE_PINS (48)
+#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
new file mode 100644
index 0000000000..3d482b2b6e
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h
@@ -0,0 +1,84 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_MCU_FAMILY_CFG_H_
+#define BSP_MCU_FAMILY_CFG_H_
+#ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ #include "bsp_mcu_device_pn_cfg.h"
+ #include "bsp_mcu_device_cfg.h"
+ #include "../../../ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h"
+ #include "bsp_clock_cfg.h"
+ #define BSP_MCU_GROUP_RA4M1 (1)
+ #define BSP_LOCO_HZ (32768)
+ #define BSP_MOCO_HZ (8000000)
+ #define BSP_SUB_CLOCK_HZ (32768)
+ #if BSP_CFG_HOCO_FREQUENCY == 0
+ #define BSP_HOCO_HZ (24000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 2
+ #define BSP_HOCO_HZ (32000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 4
+ #define BSP_HOCO_HZ (48000000)
+ #elif BSP_CFG_HOCO_FREQUENCY == 5
+ #define BSP_HOCO_HZ (64000000)
+ #else
+ #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h"
+ #endif
+ #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U)
+ #define BSP_VECTOR_TABLE_MAX_ENTRIES (48U)
+ #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1)
+
+ #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2)
+ #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10)
+ #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17)
+ #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26)
+ #define OFS_SEQ5 (1 << 28) | (1 << 30)
+ #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5)
+ #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEC3 | (1 << 2) | (3 << 3) | (0 << 8))
+ #define BSP_CFG_USE_LOW_VOLTAGE_MODE ((0))
+ #define BSP_CFG_ROM_REG_MPU_PC0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC0_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC0_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_PC1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_PC1_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_PC1_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_START (0x00FFFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION0_END (0x00FFFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_START (0x200FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION1_END (0x200FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_START (0x407FFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION2_END (0x407FFFFF)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_ENABLE (1)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_START (0x400DFFFC)
+ #define BSP_CFG_ROM_REG_MPU_REGION3_END (0x400DFFFF)
+ #ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT
+ #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9)
+ #endif
+ /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */
+ #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector)
+
+ /*
+ ID Code
+ Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings.
+ WARNING: This will disable debug access to the part and cannot be reversed by a debug probe.
+ */
+ #if defined(BSP_ID_CODE_PERMANENTLY_LOCKED)
+ #define BSP_CFG_ID_CODE_LONG_1 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_2 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_3 (0x00000000)
+ #define BSP_CFG_ID_CODE_LONG_4 (0x00000000)
+ #else
+ /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */
+ #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF)
+ #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF)
+ #endif
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif /* BSP_MCU_FAMILY_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
new file mode 100644
index 0000000000..5440b293b3
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h
@@ -0,0 +1,17 @@
+/* generated configuration header file - do not edit */
+#ifndef BSP_PIN_CFG_H_
+#define BSP_PIN_CFG_H_
+#include "r_ioport.h"
+
+/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
+FSP_HEADER
+
+#define SW1 (BSP_IO_PORT_01_PIN_10) /* active low */
+#define LED1 (BSP_IO_PORT_01_PIN_11) /* active high */
+extern const ioport_cfg_t g_bsp_pin_cfg; /* R7FA4M1AB3CNE.pincfg */
+
+void BSP_PinConfigSecurityInit();
+
+/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
+FSP_FOOTER
+#endif /* BSP_PIN_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/r_ioport_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/r_ioport_cfg.h
new file mode 100644
index 0000000000..d2688bf5ba
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_cfg/fsp_cfg/r_ioport_cfg.h
@@ -0,0 +1,13 @@
+/* generated configuration header file - do not edit */
+#ifndef R_IOPORT_CFG_H_
+#define R_IOPORT_CFG_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE)
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* R_IOPORT_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp_clock_cfg.h b/hw/bsp/ra/boards/uno_r4/ra_gen/bsp_clock_cfg.h
similarity index 92%
rename from hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp_clock_cfg.h
rename to hw/bsp/ra/boards/uno_r4/ra_gen/bsp_clock_cfg.h
index 63618ec4bb..559000a7a7 100644
--- a/hw/bsp/ra/boards/uno_r4/fsp_cfg/bsp_clock_cfg.h
+++ b/hw/bsp/ra/boards/uno_r4/ra_gen/bsp_clock_cfg.h
@@ -4,10 +4,10 @@
#define BSP_CFG_CLOCKS_SECURE (0)
#define BSP_CFG_CLOCKS_OVERRIDE (0)
#define BSP_CFG_XTAL_HZ (0) /* XTAL 0Hz */
-#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* PLL Src: XTAL */
+#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* PLL Src: Disabled */
#define BSP_CFG_HOCO_FREQUENCY (4) /* HOCO 48MHz */
#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_4) /* PLL Div /4 */
-#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(12, 0) /* PLL Mul x12 */
+#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(12U,0U) /* PLL Mul x12 */
#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_HOCO) /* Clock Src: HOCO */
#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKA Div /1 */
@@ -15,7 +15,7 @@
#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKC Div /1 */
#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKD Div /1 */
#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* FCLK Div /2 */
-#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Src: SUBCLK */
+#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */
#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */
#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_HOCO) /* UCLK Src: HOCO */
#endif /* BSP_CLOCK_CFG_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.c b/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.c
new file mode 100644
index 0000000000..50036c0adc
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.c
@@ -0,0 +1,11 @@
+/* generated common source file - do not edit */
+#include "common_data.h"
+ioport_instance_ctrl_t g_ioport_ctrl;
+const ioport_instance_t g_ioport =
+ {
+ .p_api = &g_ioport_on_ioport,
+ .p_ctrl = &g_ioport_ctrl,
+ .p_cfg = &g_bsp_pin_cfg,
+ };
+void g_common_init(void) {
+}
diff --git a/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.h b/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.h
new file mode 100644
index 0000000000..6a08cbee09
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_gen/common_data.h
@@ -0,0 +1,20 @@
+/* generated common header file - do not edit */
+#ifndef COMMON_DATA_H_
+#define COMMON_DATA_H_
+#include
+#include "bsp_api.h"
+#include "r_ioport.h"
+#include "bsp_pin_cfg.h"
+FSP_HEADER
+#define IOPORT_CFG_NAME g_bsp_pin_cfg
+#define IOPORT_CFG_OPEN R_IOPORT_Open
+#define IOPORT_CFG_CTRL g_ioport_ctrl
+
+/* IOPORT Instance */
+extern const ioport_instance_t g_ioport;
+
+/* IOPORT control structure. */
+extern ioport_instance_ctrl_t g_ioport_ctrl;
+void g_common_init(void);
+FSP_FOOTER
+#endif /* COMMON_DATA_H_ */
diff --git a/hw/bsp/ra/boards/uno_r4/ra_gen/pin_data.c b/hw/bsp/ra/boards/uno_r4/ra_gen/pin_data.c
new file mode 100644
index 0000000000..58262de8b5
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/ra_gen/pin_data.c
@@ -0,0 +1,75 @@
+/* generated pin source file - do not edit */
+#include "bsp_api.h"
+#include "r_ioport.h"
+
+
+const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = {
+ {
+ .pin = BSP_IO_PORT_01_PIN_08,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_10,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT | (uint32_t) IOPORT_CFG_PULLUP_ENABLE)
+ },
+ {
+ .pin = BSP_IO_PORT_01_PIN_11,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW)
+ },
+ {
+ .pin = BSP_IO_PORT_03_PIN_00,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG)
+ },
+ {
+ .pin = BSP_IO_PORT_04_PIN_07,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_14,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+ {
+ .pin = BSP_IO_PORT_09_PIN_15,
+ .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS)
+ },
+};
+
+const ioport_cfg_t g_bsp_pin_cfg = {
+ .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t),
+ .p_pin_cfg_data = &g_bsp_pin_cfg_data[0],
+};
+
+#if BSP_TZ_SECURE_BUILD
+
+void R_BSP_PinCfgSecurityInit(void);
+
+/* Initialize SAR registers for secure pins. */
+void R_BSP_PinCfgSecurityInit(void)
+{
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #else
+ uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR];
+ #endif
+ memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0]));
+
+
+ for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++)
+ {
+ uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin;
+ uint32_t port = port_pin >> 8U;
+ uint32_t pin = port_pin & 0xFFU;
+ pmsar[port] &= (uint16_t) ~(1U << pin);
+ }
+
+ for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++)
+ {
+ #if (2U == BSP_FEATURE_IOPORT_VERSION)
+ R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i];
+ #else
+ R_PMISC->PMSAR[i].PMSAR = pmsar[i];
+ #endif
+ }
+
+}
+#endif
diff --git a/hw/bsp/ra/boards/uno_r4/script/fsp.ld b/hw/bsp/ra/boards/uno_r4/script/fsp.ld
new file mode 100644
index 0000000000..605eef7d2c
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/script/fsp.ld
@@ -0,0 +1,769 @@
+/*
+ Linker File for Renesas FSP
+*/
+
+INCLUDE memory_regions.ld
+
+/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/
+/*
+ XIP_SECONDARY_SLOT_IMAGE = 1;
+*/
+
+QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH);
+OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH);
+OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH);
+
+/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */
+__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0);
+
+ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0;
+ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0;
+DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0;
+DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0;
+RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0;
+RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0;
+RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH;
+RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH;
+
+OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80;
+
+/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings.
+ * Bootloader images do not configure option settings because they are owned by the bootloader.
+ * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */
+__bl_FSP_BOOTABLE_IMAGE = 1;
+__bln_FSP_BOOTABLE_IMAGE = 1;
+PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE);
+USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE);
+
+__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH;
+__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH;
+__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH;
+__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH;
+__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH;
+__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH :
+ __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH;
+__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2;
+__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START);
+__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 :
+ FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END :
+ FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2;
+
+XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0;
+FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START :
+ XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START :
+ FLASH_IMAGE_START;
+LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH :
+ DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH :
+ FLASH_LENGTH;
+OPTION_SETTING_SAS_SIZE = 0x34;
+OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 :
+ OPTION_SETTING_LENGTH == 0 ? 0 :
+ OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE;
+
+/* Define memory regions. */
+MEMORY
+{
+ ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH
+ DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH
+ FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH
+ RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
+ DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH
+ QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH
+ OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH
+ OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH
+ SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH
+ OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH
+ OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18
+ OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH
+ OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH
+ ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be DEFINED in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ * __qspi_flash_start__
+ * __qspi_flash_end__
+ * __qspi_flash_code_size__
+ * __qspi_region_max_size__
+ * __qspi_region_start_address__
+ * __qspi_region_end_address__
+ * __ospi_device_0_start__
+ * __ospi_device_0_end__
+ * __ospi_device_0_code_size__
+ * __ospi_device_0_region_max_size__
+ * __ospi_device_0_region_start_address__
+ * __ospi_device_0_region_end_address__
+ * __ospi_device_1_start__
+ * __ospi_device_1_end__
+ * __ospi_device_1_code_size__
+ * __ospi_device_1_region_max_size__
+ * __ospi_device_1_region_start_address__
+ * __ospi_device_1_region_end_address__
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+ .text :
+ {
+ __tz_FLASH_S = ABSOLUTE(FLASH_START);
+ __ROM_Start = .;
+
+ /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much
+ * space because ROM registers are at address 0x400 and there is very little space
+ * in between. */
+ KEEP(*(.fixed_vectors*))
+ KEEP(*(.application_vectors*))
+ __Vectors_End = .;
+
+ /* Some devices have a gap of code flash between the vector table and ROM Registers.
+ * The flash gap section allows applications to place code and data in this section. */
+ *(.flash_gap*)
+
+ /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400;
+ KEEP(*(.rom_registers*))
+
+ /* Reserving 0x100 bytes of space for ROM registers. */
+ . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500;
+
+ /* Allocate flash write-boundary-aligned
+ * space for sce9 wrapped public keys for mcuboot if the module is used.
+ */
+ KEEP(*(.mcuboot_sce9_key*))
+
+ *(.text*)
+
+ KEEP(*(.version))
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ *(.rodata*)
+ __usb_dev_descriptor_start_fs = .;
+ KEEP(*(.usb_device_desc_fs*))
+ __usb_cfg_descriptor_start_fs = .;
+ KEEP(*(.usb_config_desc_fs*))
+ __usb_interface_descriptor_start_fs = .;
+ KEEP(*(.usb_interface_desc_fs*))
+ __usb_descriptor_end_fs = .;
+ __usb_dev_descriptor_start_hs = .;
+ KEEP(*(.usb_device_desc_hs*))
+ __usb_cfg_descriptor_start_hs = .;
+ KEEP(*(.usb_config_desc_hs*))
+ __usb_interface_descriptor_start_hs = .;
+ KEEP(*(.usb_interface_desc_hs*))
+ __usb_descriptor_end_hs = .;
+
+ KEEP(*(.eh_frame*))
+
+ __ROM_End = .;
+ } > FLASH = 0xFF
+
+ __Vectors_Size = __Vectors_End - __Vectors;
+
+ . = .;
+ __itcm_data_pre_location = .;
+
+ /* Initialized ITCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .itcm_data : ALIGN(16)
+ {
+ /* Start of ITCM Secure Trustzone region. */
+ __tz_ITCM_S = ABSOLUTE(ITCM_START);
+
+ /* All ITCM data start */
+ __itcm_data_start = .;
+
+ KEEP(*(.itcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* All ITCM data end */
+ __itcm_data_end = .;
+
+ /*
+ * Start of the ITCM Non-Secure Trustzone region.
+ * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects.
+ */
+ __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192);
+ } > ITCM AT > FLASH = 0x00
+
+ /* Addresses exported for ITCM initialization. */
+ __itcm_data_init_start = LOADADDR(.itcm_data);
+ __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data);
+
+ ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.")
+
+ /* Restore location counter. */
+ /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */
+ . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location;
+
+ __exidx_start = .;
+ /DISCARD/ :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ }
+ __exidx_end = .;
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+ LONG (__etext)
+ LONG (__data_start__)
+ LONG (__data_end__ - __data_start__)
+ LONG (__etext2)
+ LONG (__data2_start__)
+ LONG (__data2_end__ - __data2_start__)
+ __copy_table_end__ = .;
+ } > FLASH
+ */
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
+ /*
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ LONG (__bss2_start__)
+ LONG (__bss2_end__ - __bss2_start__)
+ __zero_table_end__ = .;
+ } > FLASH
+ */
+
+ __etext = .;
+
+ __tz_RAM_S = ORIGIN(RAM);
+
+ /* If DTC is used, put the DTC vector table at the start of SRAM.
+ This avoids memory holes due to 1K alignment required by it. */
+ .fsp_dtc_vector_table (NOLOAD) :
+ {
+ . = ORIGIN(RAM);
+ *(.fsp_dtc_vector_table)
+ } > RAM
+
+ /* Initialized data section. */
+ .data :
+ {
+ __data_start__ = .;
+ . = ALIGN(4);
+
+ __Code_In_RAM_Start = .;
+
+ KEEP(*(.code_in_ram*))
+ __Code_In_RAM_End = .;
+
+ *(vtable)
+ /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */
+ *(.data.*)
+ *(.data)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+
+ . = ALIGN(4);
+
+ /* All data end */
+ __data_end__ = .;
+
+ } > RAM AT > FLASH
+
+ . = .;
+ __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data);
+
+ /* Initialized DTCM data. */
+ /* Aligned to FCACHE2 for RA8. */
+ .dtcm_data : ALIGN(16)
+ {
+ /* Start of DTCM Secure Trustzone region. */
+ __tz_DTCM_S = ABSOLUTE(DTCM_START);
+
+ /* Initialized DTCM data start */
+ __dtcm_data_start = .;
+
+ KEEP(*(.dtcm_data*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */
+ . = ALIGN(8);
+
+ /* Initialized DTCM data end */
+ __dtcm_data_end = .;
+ } > DTCM AT > FLASH = 0x00
+
+ . = __dtcm_data_end;
+ /* Uninitialized DTCM data. */
+ /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */
+ .dtcm_bss ALIGN(8) (NOLOAD) :
+ {
+ /* Uninitialized DTCM data start */
+ __dtcm_bss_start = .;
+
+ KEEP(*(.dtcm_bss*))
+
+ /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */
+ . = ALIGN(8);
+
+ /* Uninitialized DTCM data end */
+ __dtcm_bss_end = .;
+
+ /*
+ * Start of the DTCM Non-Secure Trustzone region.
+ * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects.
+ */
+ __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192);
+ } > DTCM
+
+ /* Addresses exported for DTCM initialization. */
+ __dtcm_data_init_start = LOADADDR(.dtcm_data);
+ __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data);
+
+ ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.")
+ ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).")
+ ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.")
+ ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.")
+ ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.")
+ ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.")
+ ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.")
+
+ /* Restore location counter. */
+ /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */
+ /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */
+ . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location;
+
+ /* TrustZone Secure Gateway Stubs Section */
+
+ /* Store location counter for SPI non-retentive sections. */
+ sgstubs_pre_location = .;
+
+ /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */
+ SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024);
+ .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024)
+ {
+ __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024);
+ _start_sg = .;
+ *(.gnu.sgstubs*)
+ . = ALIGN(32);
+ _end_sg = .;
+ } > FLASH
+
+ __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768);
+ FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH);
+
+ /* QSPI_FLASH section to be downloaded via debugger */
+ .qspi_flash :
+ {
+ __qspi_flash_start__ = .;
+ KEEP(*(.qspi_flash*))
+ KEEP(*(.code_in_qspi*))
+ __qspi_flash_end__ = .;
+ } > QSPI_FLASH
+ __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__;
+
+ /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */
+ __qspi_flash_code_addr__ = sgstubs_pre_location;
+ .qspi_non_retentive : AT(__qspi_flash_code_addr__)
+ {
+ __qspi_non_retentive_start__ = .;
+ KEEP(*(.qspi_non_retentive*))
+ __qspi_non_retentive_end__ = .;
+ } > QSPI_FLASH
+ __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__;
+
+ __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */
+ __qspi_region_start_address__ = __qspi_flash_start__;
+ __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_QSPI_FLASH_N = __qspi_non_retentive_end__;
+
+ /* Support for OctaRAM */
+ .OSPI_DEVICE_0_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_0_start__ = .;
+ *(.ospi_device_0_no_load*)
+ . = ALIGN(4);
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0_RAM
+
+ .OSPI_DEVICE_1_NO_LOAD (NOLOAD):
+ {
+ . = ALIGN(4);
+ __ospi_device_1_start__ = .;
+ *(.ospi_device_1_no_load*)
+ . = ALIGN(4);
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1_RAM
+
+ /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0);
+
+ /* OSPI_DEVICE_0 section to be downloaded via debugger */
+ .OSPI_DEVICE_0 :
+ {
+ __ospi_device_0_start__ = .;
+ KEEP(*(.ospi_device_0*))
+ KEEP(*(.code_in_ospi_device_0*))
+ __ospi_device_0_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__;
+
+ /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive));
+ .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__)
+ {
+ __ospi_device_0_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_0_non_retentive*))
+ __ospi_device_0_non_retentive_end__ = .;
+ } > OSPI_DEVICE_0
+ __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__;
+
+ __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_0_region_start_address__ = __ospi_device_0_start__;
+ __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1);
+
+ /* OSPI_DEVICE_1 section to be downloaded via debugger */
+ .OSPI_DEVICE_1 :
+ {
+ __ospi_device_1_start__ = .;
+ KEEP(*(.ospi_device_1*))
+ KEEP(*(.code_in_ospi_device_1*))
+ __ospi_device_1_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__;
+
+ /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */
+ __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive));
+ .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__)
+ {
+ __ospi_device_1_non_retentive_start__ = .;
+ KEEP(*(.ospi_device_1_non_retentive*))
+ __ospi_device_1_non_retentive_end__ = .;
+ } > OSPI_DEVICE_1
+ __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__;
+
+ __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */
+ __ospi_device_1_region_start_address__ = __ospi_device_1_start__;
+ __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__;
+
+ /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */
+ __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__;
+
+ .noinit (NOLOAD):
+ {
+ . = ALIGN(4);
+ __noinit_start = .;
+ KEEP(*(.noinit*))
+ . = ALIGN(8);
+ /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */
+ KEEP(*(.heap.*))
+ __noinit_end = .;
+ } > RAM
+
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > RAM
+
+ .heap (NOLOAD):
+ {
+ . = ALIGN(8);
+ __HeapBase = .;
+ /* Place the STD heap here. */
+ KEEP(*(.heap))
+ __HeapLimit = .;
+ } > RAM
+
+ /* Stacks are stored in this section. */
+ .stack_dummy (NOLOAD):
+ {
+ . = ALIGN(8);
+ __StackLimit = .;
+ /* Main stack */
+ KEEP(*(.stack))
+ __StackTop = .;
+ /* Thread stacks */
+ KEEP(*(.stack*))
+ __StackTopAll = .;
+ } > RAM
+
+ PROVIDE(__stack = __StackTopAll);
+
+ /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used
+ at run time for things such as ThreadX memory pool allocations. */
+ __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4);
+
+ /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects.
+ * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024);
+
+ /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects.
+ * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not
+ * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary.
+ * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */
+ __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192);
+
+ /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects.
+ * The EDMAC is a non-secure bus master and can only access non-secure RAM. */
+ .ns_buffer (NOLOAD):
+ {
+ /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */
+ . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .;
+
+ KEEP(*(.ns_buffer*))
+ } > RAM
+
+ /* Data flash. */
+ .data_flash :
+ {
+ . = ORIGIN(DATA_FLASH);
+ __tz_DATA_FLASH_S = .;
+ __Data_Flash_Start = .;
+ KEEP(*(.data_flash*))
+ __Data_Flash_End = .;
+
+ __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024);
+ } > DATA_FLASH
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_S = ORIGIN(SDRAM);
+
+ /* SDRAM */
+ .sdram (NOLOAD):
+ {
+ __SDRAM_Start = .;
+ KEEP(*(.sdram*))
+ KEEP(*(.frame*))
+ __SDRAM_End = .;
+ } > SDRAM
+
+ /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */
+ __tz_SDRAM_N = __SDRAM_End;
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */
+ __tz_ID_CODE_S = ORIGIN(ID_CODE);
+
+ /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool.
+ * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE
+ * memory region between TrustZone projects. */
+ __tz_ID_CODE_N = __tz_ID_CODE_S;
+
+ .id_code :
+ {
+ __ID_Code_Start = .;
+ KEEP(*(.id_code*))
+ __ID_Code_End = .;
+ } > ID_CODE
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS);
+
+ .option_setting_ofs :
+ {
+ __OPTION_SETTING_OFS_Start = .;
+ KEEP(*(.option_setting_ofs0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_ofs2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start;
+ KEEP(*(.option_setting_dualsel))
+ __OPTION_SETTING_OFS_End = .;
+ } > OPTION_SETTING_OFS = 0xFF
+
+ .option_setting_sas :
+ {
+ __OPTION_SETTING_SAS_Start = .;
+ KEEP(*(.option_setting_sas))
+ __OPTION_SETTING_SAS_End = .;
+ } > OPTION_SETTING_SAS = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS);
+
+ .option_setting_ns :
+ {
+ __OPTION_SETTING_NS_Start = .;
+ KEEP(*(.option_setting_ofs1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_ofs3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_banksel))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_bps3))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps0))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps1))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps2))
+ . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start;
+ KEEP(*(.option_setting_pbps3))
+ __OPTION_SETTING_NS_End = .;
+ } > OPTION_SETTING = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S);
+
+ .option_setting_s :
+ {
+ __OPTION_SETTING_S_Start = .;
+ KEEP(*(.option_setting_ofs1_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sec))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_pbps_sec3))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs1_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_ofs3_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_banksel_sel))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel0))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel1))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel2))
+ . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start;
+ KEEP(*(.option_setting_bps_sel3))
+ __OPTION_SETTING_S_End = .;
+ } > OPTION_SETTING_S = 0xFF
+
+ /* Symbol required for RA Configuration tool. */
+ __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End;
+}
diff --git a/hw/bsp/ra/boards/uno_r4/script/memory_regions.ld b/hw/bsp/ra/boards/uno_r4/script/memory_regions.ld
new file mode 100644
index 0000000000..22775395c8
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/script/memory_regions.ld
@@ -0,0 +1,25 @@
+
+ /* generated memory regions file - do not edit */
+ RAM_START = 0x20000000;
+ RAM_LENGTH = 0x8000;
+ FLASH_START = 0x00000000;
+ FLASH_LENGTH = 0x40000;
+ DATA_FLASH_START = 0x40100000;
+ DATA_FLASH_LENGTH = 0x2000;
+ OPTION_SETTING_START = 0x00000000;
+ OPTION_SETTING_LENGTH = 0x0;
+ OPTION_SETTING_S_START = 0x80000000;
+ OPTION_SETTING_S_LENGTH = 0x0;
+ ID_CODE_START = 0x01010018;
+ ID_CODE_LENGTH = 0x20;
+ SDRAM_START = 0x80010000;
+ SDRAM_LENGTH = 0x0;
+ QSPI_FLASH_START = 0x60000000;
+ QSPI_FLASH_LENGTH = 0x0;
+ OSPI_DEVICE_0_START = 0x80020000;
+ OSPI_DEVICE_0_LENGTH = 0x0;
+ OSPI_DEVICE_1_START = 0x80030000;
+ OSPI_DEVICE_1_LENGTH = 0x0;
+
+/* Uno R4 has bootloader */
+FLASH_IMAGE_START = 0x4000;
diff --git a/hw/bsp/ra/boards/uno_r4/smart_configurator/configuration.xml b/hw/bsp/ra/boards/uno_r4/smart_configurator/configuration.xml
new file mode 100644
index 0000000000..b716c8ec91
--- /dev/null
+++ b/hw/bsp/ra/boards/uno_r4/smart_configurator/configuration.xml
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Board Support Package Common Files
+ Renesas.RA.5.6.0.pack
+
+
+ I/O Port
+ Renesas.RA.5.6.0.pack
+
+
+ Arm CMSIS Version 6 - Core (M)
+ Arm.CMSIS6.6.1.0+fsp.5.6.0.pack
+
+
+ Custom Board Support Files
+ Renesas.RA_board_custom.5.6.0.pack
+
+
+ Board support package for R7FA4M1AB3CNE
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1 - FSP Data
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+ Board support package for RA4M1 - Events
+ Renesas.RA_mcu_ra4m1.5.6.0.pack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hw/bsp/ra/boards/uno_r4/uno_r4.ld b/hw/bsp/ra/boards/uno_r4/uno_r4.ld
deleted file mode 100644
index 45f11dfb18..0000000000
--- a/hw/bsp/ra/boards/uno_r4/uno_r4.ld
+++ /dev/null
@@ -1,25 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x8000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x40000;
-DATA_FLASH_START = 0x40100000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x00000000;
-OPTION_SETTING_LENGTH = 0x0;
-OPTION_SETTING_S_START = 0x80000000;
-OPTION_SETTING_S_LENGTH = 0x0;
-ID_CODE_START = 0x01010018;
-ID_CODE_LENGTH = 0x20;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x0;
-OSPI_DEVICE_0_START = 0x80020000;
-OSPI_DEVICE_0_LENGTH = 0x0;
-OSPI_DEVICE_1_START = 0x80030000;
-OSPI_DEVICE_1_LENGTH = 0x0;
-
-/* Uno R4 has bootloader */
-FLASH_IMAGE_START = 0x4000;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/family.c b/hw/bsp/ra/family.c
index 87f7b4a22a..0fd24e4930 100644
--- a/hw/bsp/ra/family.c
+++ b/hw/bsp/ra/family.c
@@ -24,20 +24,19 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Renesas
+*/
+
#include
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
#pragma GCC diagnostic ignored "-Wundef"
-
-// extra push due to https://github.com/renesas/fsp/pull/278
-#pragma GCC diagnostic push
#endif
-#include "bsp_api.h"
-#include "r_ioport.h"
-#include "r_ioport_api.h"
+#include "common_data.h"
#include "renesas.h"
#ifdef __GNUC__
@@ -50,12 +49,6 @@
/* Key code for writing PRCR register. */
#define BSP_PRV_PRCR_KEY (0xA500U)
-static const ioport_cfg_t family_pin_cfg = {
- .number_of_pins = sizeof(board_pin_cfg) / sizeof(ioport_pin_cfg_t),
- .p_pin_cfg_data = board_pin_cfg,
-};
-static ioport_instance_ctrl_t port_ctrl;
-
//--------------------------------------------------------------------+
// Vector Data
//--------------------------------------------------------------------+
@@ -103,7 +96,7 @@ void board_init(void) {
__enable_irq();
/* Configure pins. */
- R_IOPORT_Open(&port_ctrl, &family_pin_cfg);
+ R_IOPORT_Open(&IOPORT_CFG_CTRL, &IOPORT_CFG_NAME);
#ifdef TRACE_ETM
// TRCKCR is protected by PRCR bit0 register
@@ -138,12 +131,12 @@ void board_init_after_tusb(void) {
}
void board_led_write(bool state) {
- R_IOPORT_PinWrite(&port_ctrl, LED1, state ? LED_STATE_ON : !LED_STATE_ON);
+ R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, LED1, state ? LED_STATE_ON : !LED_STATE_ON);
}
uint32_t board_button_read(void) {
bsp_io_level_t lvl = !BUTTON_STATE_ACTIVE;
- R_IOPORT_PinRead(&port_ctrl, SW1, &lvl);
+ R_IOPORT_PinRead(&IOPORT_CFG_CTRL, SW1, &lvl);
return lvl == BUTTON_STATE_ACTIVE;
}
@@ -211,7 +204,6 @@ void usbfs_d1fifo_handler(void) {
//------------- USB1 HighSpeed -------------//
#ifdef BOARD_HAS_USB_HIGHSPEED
-
void usbhs_interrupt_handler(void) {
IRQn_Type irq = R_FSP_CurrentIrqGet();
R_BSP_IrqStatusClear(irq);
@@ -230,7 +222,6 @@ void usbhs_d1fifo_handler(void) {
R_BSP_IrqStatusClear(irq);
// TODO not used yet
}
-
#endif
//--------------------------------------------------------------------+
diff --git a/hw/bsp/ra/family.cmake b/hw/bsp/ra/family.cmake
index 426e1ca8f6..f920a82190 100644
--- a/hw/bsp/ra/family.cmake
+++ b/hw/bsp/ra/family.cmake
@@ -4,7 +4,7 @@ if (NOT BOARD)
message(FATAL_ERROR "BOARD not specified")
endif ()
-set(CMSIS_DIR ${TOP}/lib/CMSIS_5)
+set(CMSIS_DIR ${TOP}/lib/CMSIS_6)
set(FSP_RA ${TOP}/hw/mcu/renesas/fsp/ra/fsp)
# include board specific
@@ -15,6 +15,28 @@ set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOL
set(FAMILY_MCUS RAXXX ${MCU_VARIANT} CACHE INTERNAL "")
+# ----------------------
+# Port & Speed Selection
+# ----------------------
+if (NOT DEFINED RHPORT_DEVICE)
+ set(RHPORT_DEVICE 0)
+endif ()
+if (NOT DEFINED RHPORT_HOST)
+ set(RHPORT_HOST 0)
+endif ()
+
+if (NOT DEFINED RHPORT_SPEED)
+ set(RHPORT_SPEED OPT_MODE_FULL_SPEED OPT_MODE_HIGH_SPEED)
+endif ()
+if (NOT DEFINED RHPORT_DEVICE_SPEED)
+ list(GET RHPORT_SPEED ${RHPORT_DEVICE} RHPORT_DEVICE_SPEED)
+endif ()
+if (NOT DEFINED RHPORT_HOST_SPEED)
+ list(GET RHPORT_SPEED ${RHPORT_HOST} RHPORT_HOST_SPEED)
+endif ()
+
+cmake_print_variables(RHPORT_DEVICE RHPORT_DEVICE_SPEED RHPORT_HOST RHPORT_HOST_SPEED)
+
#------------------------------------
# BOARD_TARGET
#------------------------------------
@@ -32,10 +54,11 @@ function(add_board_target BOARD_TARGET)
${FSP_RA}/src/bsp/mcu/all/bsp_io.c
${FSP_RA}/src/bsp/mcu/all/bsp_irq.c
${FSP_RA}/src/bsp/mcu/all/bsp_register_protection.c
- ${FSP_RA}/src/bsp/mcu/all/bsp_rom_registers.c
${FSP_RA}/src/bsp/mcu/all/bsp_sbrk.c
${FSP_RA}/src/bsp/mcu/all/bsp_security.c
${FSP_RA}/src/r_ioport/r_ioport.c
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/ra_gen/common_data.c
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/ra_gen/pin_data.c
)
target_compile_options(${BOARD_TARGET} PUBLIC
@@ -44,8 +67,9 @@ function(add_board_target BOARD_TARGET)
target_include_directories(${BOARD_TARGET} PUBLIC
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
- ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/fsp_cfg
- ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/fsp_cfg/bsp
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/ra_cfg/fsp_cfg
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/ra_cfg/fsp_cfg/bsp
+ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/ra_gen
${CMSIS_DIR}/CMSIS/Core/Include
${FSP_RA}/inc
${FSP_RA}/inc/api
@@ -54,22 +78,27 @@ function(add_board_target BOARD_TARGET)
${FSP_RA}/src/bsp/mcu/all
${FSP_RA}/src/bsp/mcu/${MCU_VARIANT}
)
+ target_compile_definitions(${BOARD_TARGET} PUBLIC
+ BOARD_TUD_RHPORT=${RHPORT_DEVICE}
+ BOARD_TUD_MAX_SPEED=${RHPORT_DEVICE_SPEED}
+ BOARD_TUH_RHPORT=${RHPORT_HOST}
+ BOARD_TUH_MAX_SPEED=${RHPORT_HOST_SPEED}
+ )
update_board(${BOARD_TARGET})
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
- set(LD_FILE_GNU ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/linker/gcc/${MCU_VARIANT}.ld)
+ set(LD_FILE_GNU ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/script/fsp.ld)
endif ()
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
target_link_options(${BOARD_TARGET} PUBLIC
# linker file
"LINKER:--script=${LD_FILE_GNU}"
- -L${CMAKE_CURRENT_FUNCTION_LIST_DIR}/linker/gcc
+ -L${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}/script
+ -Wl,--defsym=end=__bss_end__
-nostartfiles
- # nanolib
- --specs=nano.specs
- --specs=nosys.specs
+ --specs=nano.specs --specs=nosys.specs
)
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
target_link_options(${BOARD_TARGET} PUBLIC
@@ -95,12 +124,18 @@ function(family_configure_example TARGET RTOS)
# BSP
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
+ # Explicitly added bsp_rom_registers here, otherwise MCU can be bricked if g_bsp_rom_registers is dropped by linker
+ ${FSP_RA}/src/bsp/mcu/all/bsp_rom_registers.c
)
target_include_directories(${TARGET} PUBLIC
# family, hw, board
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
)
+ target_compile_options(${TARGET} PUBLIC
+ -Wno-error=undef
+ -Wno-error=strict-prototypes
+ )
# # RA has custom freertos port
# if (NOT TARGET freertos_kernel_port)
@@ -125,9 +160,9 @@ function(family_configure_example TARGET RTOS)
# Flashing
family_flash_jlink(${TARGET})
+ family_add_bin_hex(${TARGET})
if (DEFINED DFU_UTIL_VID_PID)
- family_add_bin_hex(${TARGET})
family_flash_dfu_util(${TARGET} ${DFU_UTIL_VID_PID})
endif ()
endfunction()
diff --git a/hw/bsp/ra/family.mk b/hw/bsp/ra/family.mk
index 4447e84995..6ac7c262fd 100644
--- a/hw/bsp/ra/family.mk
+++ b/hw/bsp/ra/family.mk
@@ -1,42 +1,67 @@
-DEPS_SUBMODULES += hw/mcu/renesas/fsp lib/CMSIS_5
-
FSP_RA = hw/mcu/renesas/fsp/ra/fsp
include $(TOP)/$(BOARD_PATH)/board.mk
# Don't include options setting in .bin file since it create unnecessary large file due to padding
OBJCOPY_BIN_OPTION = --only-section .text --only-section .data --only-section .rodata --only-section .bss
-# Default to port 0 fullspeed, board with port 1 highspeed should override this in board.mk
-PORT ?= 0
+# ----------------------
+# Port & Speed Selection
+# ----------------------
+RHPORT_SPEED ?= OPT_MODE_FULL_SPEED OPT_MODE_HIGH_SPEED
+RHPORT_DEVICE ?= 0
+RHPORT_HOST ?= 0
+
+# Determine RHPORT_DEVICE_SPEED if not defined
+ifndef RHPORT_DEVICE_SPEED
+ifeq ($(RHPORT_DEVICE), 0)
+ RHPORT_DEVICE_SPEED = $(firstword $(RHPORT_SPEED))
+else
+ RHPORT_DEVICE_SPEED = $(lastword $(RHPORT_SPEED))
+endif
+endif
+# Determine RHPORT_HOST_SPEED if not defined
+ifndef RHPORT_HOST_SPEED
+ifeq ($(RHPORT_HOST), 0)
+ RHPORT_HOST_SPEED = $(firstword $(RHPORT_SPEED))
+else
+ RHPORT_HOST_SPEED = $(lastword $(RHPORT_SPEED))
+endif
+endif
+
+# --------------
+# Compiler Flags
+# --------------
CFLAGS += \
- -flto \
-DCFG_TUSB_MCU=OPT_MCU_RAXXX \
- -DBOARD_TUD_RHPORT=$(PORT) \
+ -DBOARD_TUD_RHPORT=${RHPORT_DEVICE} \
+ -DBOARD_TUD_MAX_SPEED=${RHPORT_DEVICE_SPEED} \
+ -DBOARD_TUH_RHPORT=${RHPORT_HOST} \
+ -DBOARD_TUH_MAX_SPEED=${RHPORT_HOST_SPEED}
+
+CFLAGS_GCC += \
+ -flto \
-Wno-error=undef \
-Wno-error=strict-prototypes \
-Wno-error=cast-align \
-Wno-error=cast-qual \
-Wno-error=unused-but-set-variable \
-Wno-error=unused-variable \
- -nostdlib \
- -nostartfiles \
-ffreestanding
-ifeq ($(PORT), 1)
- CFLAGS += -DBOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED
- $(info "Using PORT 1 HighSpeed")
-else
- CFLAGS += -DBOARD_TUD_MAX_SPEED=OPT_MODE_FULL_SPEED
- $(info "Using PORT 0 FullSpeed")
-endif
-
-LDFLAGS_GCC += -specs=nosys.specs -specs=nano.specs
+LDFLAGS_GCC += \
+ -nostartfiles -nostdlib \
+ -specs=nosys.specs -specs=nano.specs
+# -----------------
+# Sources & Include
+# -----------------
SRC_C += \
src/portable/renesas/rusb2/dcd_rusb2.c \
src/portable/renesas/rusb2/hcd_rusb2.c \
src/portable/renesas/rusb2/rusb2_common.c \
+ ${BOARD_PATH}/ra_gen/common_data.c \
+ ${BOARD_PATH}/ra_gen/pin_data.c \
$(FSP_RA)/src/bsp/cmsis/Device/RENESAS/Source/startup.c \
$(FSP_RA)/src/bsp/cmsis/Device/RENESAS/Source/system.c \
$(FSP_RA)/src/bsp/mcu/all/bsp_clocks.c \
@@ -53,10 +78,11 @@ SRC_C += \
$(FSP_RA)/src/r_ioport/r_ioport.c \
INC += \
- $(TOP)/lib/CMSIS_5/CMSIS/Core/Include \
$(TOP)/$(BOARD_PATH) \
- $(TOP)/$(BOARD_PATH)/fsp_cfg \
- $(TOP)/$(BOARD_PATH)/fsp_cfg/bsp \
+ $(TOP)/$(BOARD_PATH)/ra_cfg/fsp_cfg \
+ $(TOP)/$(BOARD_PATH)/ra_cfg/fsp_cfg/bsp \
+ $(TOP)/$(BOARD_PATH)/ra_gen \
+ $(TOP)/lib/CMSIS_6/CMSIS/Core/Include \
$(TOP)/$(FSP_RA)/src/bsp/cmsis/Device/RENESAS/Include \
$(TOP)/$(FSP_RA)/inc \
$(TOP)/$(FSP_RA)/inc/api \
@@ -65,10 +91,11 @@ INC += \
$(TOP)/$(FSP_RA)/src/bsp/mcu/$(MCU_VARIANT) \
ifndef LD_FILE
-LD_FILE = $(FAMILY_PATH)/linker/gcc/$(MCU_VARIANT).ld
+LD_FILE = $(BOARD_PATH)/script/fsp.ld
endif
-LDFLAGS += -L$(TOP)/$(FAMILY_PATH)/linker/gcc
+LDFLAGS += -L$(TOP)/$(BOARD_PATH)/script
+LDFLAGS += -Wl,--defsym=end=__bss_end__
# For freeRTOS port source
# hack to use the port provided by renesas
diff --git a/hw/bsp/ra/linker/gcc/ra2a1.ld b/hw/bsp/ra/linker/gcc/ra2a1.ld
deleted file mode 100644
index 218acbb2a9..0000000000
--- a/hw/bsp/ra/linker/gcc/ra2a1.ld
+++ /dev/null
@@ -1,22 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x8000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x40000;
-DATA_FLASH_START = 0x40100000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x00000000;
-OPTION_SETTING_LENGTH = 0x0;
-OPTION_SETTING_S_START = 0x80000000;
-OPTION_SETTING_S_LENGTH = 0x0;
-ID_CODE_START = 0x01010018;
-ID_CODE_LENGTH = 0x20;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x0;
-OSPI_DEVICE_0_START = 0x80020000;
-OSPI_DEVICE_0_LENGTH = 0x0;
-OSPI_DEVICE_1_START = 0x80030000;
-OSPI_DEVICE_1_LENGTH = 0x0;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/linker/gcc/ra4m1.ld b/hw/bsp/ra/linker/gcc/ra4m1.ld
deleted file mode 100644
index 218acbb2a9..0000000000
--- a/hw/bsp/ra/linker/gcc/ra4m1.ld
+++ /dev/null
@@ -1,22 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x8000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x40000;
-DATA_FLASH_START = 0x40100000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x00000000;
-OPTION_SETTING_LENGTH = 0x0;
-OPTION_SETTING_S_START = 0x80000000;
-OPTION_SETTING_S_LENGTH = 0x0;
-ID_CODE_START = 0x01010018;
-ID_CODE_LENGTH = 0x20;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x0;
-OSPI_DEVICE_0_START = 0x80020000;
-OSPI_DEVICE_0_LENGTH = 0x0;
-OSPI_DEVICE_1_START = 0x80030000;
-OSPI_DEVICE_1_LENGTH = 0x0;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/linker/gcc/ra4m3.ld b/hw/bsp/ra/linker/gcc/ra4m3.ld
deleted file mode 100644
index 7b3a63fbe7..0000000000
--- a/hw/bsp/ra/linker/gcc/ra4m3.ld
+++ /dev/null
@@ -1,22 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x20000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x100000;
-DATA_FLASH_START = 0x08000000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x0100A100;
-OPTION_SETTING_LENGTH = 0x100;
-OPTION_SETTING_S_START = 0x0100A200;
-OPTION_SETTING_S_LENGTH = 0x100;
-ID_CODE_START = 0x00000000;
-ID_CODE_LENGTH = 0x0;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x4000000;
-OSPI_DEVICE_0_START = 0x80020000;
-OSPI_DEVICE_0_LENGTH = 0x0;
-OSPI_DEVICE_1_START = 0x80030000;
-OSPI_DEVICE_1_LENGTH = 0x0;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/linker/gcc/ra6m1.ld b/hw/bsp/ra/linker/gcc/ra6m1.ld
deleted file mode 100644
index 91d27f74cc..0000000000
--- a/hw/bsp/ra/linker/gcc/ra6m1.ld
+++ /dev/null
@@ -1,22 +0,0 @@
-RAM_START = 0x1FFE0000;
-RAM_LENGTH = 0x40000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x80000;
-DATA_FLASH_START = 0x40100000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x00000000;
-OPTION_SETTING_LENGTH = 0x0;
-OPTION_SETTING_S_START = 0x80000000;
-OPTION_SETTING_S_LENGTH = 0x0;
-ID_CODE_START = 0x0100A150;
-ID_CODE_LENGTH = 0x10;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x4000000;
-OSPI_DEVICE_0_START = 0x80020000;
-OSPI_DEVICE_0_LENGTH = 0x0;
-OSPI_DEVICE_1_START = 0x80030000;
-OSPI_DEVICE_1_LENGTH = 0x0;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/linker/gcc/ra6m5.ld b/hw/bsp/ra/linker/gcc/ra6m5.ld
deleted file mode 100644
index af747fd9b8..0000000000
--- a/hw/bsp/ra/linker/gcc/ra6m5.ld
+++ /dev/null
@@ -1,22 +0,0 @@
-RAM_START = 0x20000000;
-RAM_LENGTH = 0x80000;
-FLASH_START = 0x00000000;
-FLASH_LENGTH = 0x200000;
-DATA_FLASH_START = 0x08000000;
-DATA_FLASH_LENGTH = 0x2000;
-OPTION_SETTING_START = 0x0100A100;
-OPTION_SETTING_LENGTH = 0x100;
-OPTION_SETTING_S_START = 0x0100A200;
-OPTION_SETTING_S_LENGTH = 0x100;
-ID_CODE_START = 0x00000000;
-ID_CODE_LENGTH = 0x0;
-SDRAM_START = 0x80010000;
-SDRAM_LENGTH = 0x0;
-QSPI_FLASH_START = 0x60000000;
-QSPI_FLASH_LENGTH = 0x4000000;
-OSPI_DEVICE_0_START = 0x68000000;
-OSPI_DEVICE_0_LENGTH = 0x8000000;
-OSPI_DEVICE_1_START = 0x70000000;
-OSPI_DEVICE_1_LENGTH = 0x10000000;
-
-INCLUDE fsp.ld
diff --git a/hw/bsp/ra/vector_data.h b/hw/bsp/ra/vector_data.h
index 2b3b7d8378..a85d064bdd 100644
--- a/hw/bsp/ra/vector_data.h
+++ b/hw/bsp/ra/vector_data.h
@@ -6,6 +6,10 @@
extern "C" {
#endif
+#if defined(BSP_MCU_GROUP_RA6M5) || defined(BSP_MCU_GROUP_RA6M3) || (BSP_CFG_MCU_PART_SERIES == 8)
+#define BOARD_HAS_USB_HIGHSPEED
+#endif
+
/* ISR prototypes */
void usbfs_interrupt_handler(void);
void usbfs_resume_handler(void);
diff --git a/hw/bsp/rp2040/board.h b/hw/bsp/rp2040/board.h
index 733e937975..5dbb1dd379 100644
--- a/hw/bsp/rp2040/board.h
+++ b/hw/bsp/rp2040/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Pico
+ url: https://www.raspberrypi.org/products/raspberry-pi-pico/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/rp2040/family.c b/hw/bsp/rp2040/family.c
index 452a5568f8..24aa0b6167 100644
--- a/hw/bsp/rp2040/family.c
+++ b/hw/bsp/rp2040/family.c
@@ -25,6 +25,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Raspberry Pi
+*/
+
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#include "pico/unique_id.h"
diff --git a/hw/bsp/rx/boards/gr_citrus/board.h b/hw/bsp/rx/boards/gr_citrus/board.h
new file mode 100644
index 0000000000..617d309c33
--- /dev/null
+++ b/hw/bsp/rx/boards/gr_citrus/board.h
@@ -0,0 +1,43 @@
+/*
+* The MIT License (MIT)
+ *
+ * Copyright (c) 2020, Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+/* metadata:
+ name: GR Citrus
+ url: https://www.renesas.com/en/products/gadget-renesas/boards/gr-citrus
+*/
+
+#ifndef BOARD_H_
+#define BOARD_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_H_ */
diff --git a/hw/bsp/rx/boards/rx65n_target/board.h b/hw/bsp/rx/boards/rx65n_target/board.h
new file mode 100644
index 0000000000..8c8e7b95ff
--- /dev/null
+++ b/hw/bsp/rx/boards/rx65n_target/board.h
@@ -0,0 +1,43 @@
+/*
+* The MIT License (MIT)
+ *
+ * Copyright (c) 2020, Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This file is part of the TinyUSB stack.
+ */
+
+/* metadata:
+ name: RX65N Target Board
+ url: https://www.renesas.com/en/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx65n0c00000br-target-board-rx65n
+*/
+
+#ifndef BOARD_H_
+#define BOARD_H_
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* BOARD_H_ */
diff --git a/hw/bsp/samd11/boards/cynthion_d11/board.h b/hw/bsp/samd11/boards/cynthion_d11/board.h
index b13c8eeea1..8916e9b831 100644
--- a/hw/bsp/samd11/boards/cynthion_d11/board.h
+++ b/hw/bsp/samd11/boards/cynthion_d11/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Great Scott Gadgets Cynthion
+ url: https://greatscottgadgets.com/cynthion/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd11/boards/samd11_xplained/board.h b/hw/bsp/samd11/boards/samd11_xplained/board.h
index 2bbec49583..13045ac1d0 100644
--- a/hw/bsp/samd11/boards/samd11_xplained/board.h
+++ b/hw/bsp/samd11/boards/samd11_xplained/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAMD11 Xplained Pro
+ url: https://www.microchip.com/en-us/development-tool/ATSAMD11-XPRO
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd11/family.c b/hw/bsp/samd11/family.c
index a6588805a9..79ca9de021 100644
--- a/hw/bsp/samd11/family.c
+++ b/hw/bsp/samd11/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include "sam.h"
// Suppress warning caused by mcu driver
diff --git a/hw/bsp/samd21/boards/atsamd21_xpro/board.h b/hw/bsp/samd21/boards/atsamd21_xpro/board.h
index 315e40c781..6d2e40c567 100644
--- a/hw/bsp/samd21/boards/atsamd21_xpro/board.h
+++ b/hw/bsp/samd21/boards/atsamd21_xpro/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAMD21 Xplained Pro
+ url: https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/circuitplayground_express/board.h b/hw/bsp/samd21/boards/circuitplayground_express/board.h
index 0037db00dc..6a4ec32a94 100644
--- a/hw/bsp/samd21/boards/circuitplayground_express/board.h
+++ b/hw/bsp/samd21/boards/circuitplayground_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Circuit Playground Express
+ url: https://www.adafruit.com/product/3333
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/curiosity_nano/board.h b/hw/bsp/samd21/boards/curiosity_nano/board.h
index 1a4a833a3f..78d701ec9b 100644
--- a/hw/bsp/samd21/boards/curiosity_nano/board.h
+++ b/hw/bsp/samd21/boards/curiosity_nano/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAMD21 Curiosty Nano
+ url: https://www.microchip.com/en-us/development-tool/dm320119
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/cynthion_d21/board.h b/hw/bsp/samd21/boards/cynthion_d21/board.h
index 776063636f..6a2b8c5c6c 100644
--- a/hw/bsp/samd21/boards/cynthion_d21/board.h
+++ b/hw/bsp/samd21/boards/cynthion_d21/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Great Scott Gadgets Cynthion
+ url: https://greatscottgadgets.com/cynthion/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/feather_m0_express/board.h b/hw/bsp/samd21/boards/feather_m0_express/board.h
index 56ae3230d5..a7f9122eee 100644
--- a/hw/bsp/samd21/boards/feather_m0_express/board.h
+++ b/hw/bsp/samd21/boards/feather_m0_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather M0 Express
+ url: https://www.adafruit.com/product/3403
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/itsybitsy_m0/board.h b/hw/bsp/samd21/boards/itsybitsy_m0/board.h
index 6ee814da51..15a0afb154 100644
--- a/hw/bsp/samd21/boards/itsybitsy_m0/board.h
+++ b/hw/bsp/samd21/boards/itsybitsy_m0/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit ItsyBitsy M0
+ url: https://www.adafruit.com/product/3727
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/metro_m0_express/board.h b/hw/bsp/samd21/boards/metro_m0_express/board.h
index 6dd53e901b..405c92b024 100644
--- a/hw/bsp/samd21/boards/metro_m0_express/board.h
+++ b/hw/bsp/samd21/boards/metro_m0_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Metro M0 Express
+ url: https://www.adafruit.com/product/3505
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/qtpy/board.h b/hw/bsp/samd21/boards/qtpy/board.h
index 9ba39e9666..29a9f727f1 100644
--- a/hw/bsp/samd21/boards/qtpy/board.h
+++ b/hw/bsp/samd21/boards/qtpy/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit QT Py
+ url: https://www.adafruit.com/product/4600
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/seeeduino_xiao/board.h b/hw/bsp/samd21/boards/seeeduino_xiao/board.h
index 1bd63d6d9d..0a6d1fc7d3 100644
--- a/hw/bsp/samd21/boards/seeeduino_xiao/board.h
+++ b/hw/bsp/samd21/boards/seeeduino_xiao/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Seeeduino XIAO
+ url: https://wiki.seeedstudio.com/Seeeduino-XIAO/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/sparkfun_samd21_mini_usb/board.h b/hw/bsp/samd21/boards/sparkfun_samd21_mini_usb/board.h
index 60a86d743c..85be34008b 100644
--- a/hw/bsp/samd21/boards/sparkfun_samd21_mini_usb/board.h
+++ b/hw/bsp/samd21/boards/sparkfun_samd21_mini_usb/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SparkFun SAMD21 Mini
+ url: https://www.sparkfun.com/products/13664
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd21/boards/trinket_m0/board.h b/hw/bsp/samd21/boards/trinket_m0/board.h
index c94a3abb66..22e7cb77f3 100644
--- a/hw/bsp/samd21/boards/trinket_m0/board.h
+++ b/hw/bsp/samd21/boards/trinket_m0/board.h
@@ -23,6 +23,11 @@
*
*/
+/* metadata:
+ name: Adafruit Trinket M0
+ url: https://www.adafruit.com/product/3500
+*/
+
#pragma once
// LED
diff --git a/hw/bsp/samd21/family.c b/hw/bsp/samd21/family.c
index 7ca20c458a..c360a4a5a9 100644
--- a/hw/bsp/samd21/family.c
+++ b/hw/bsp/samd21/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include "sam.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/samd5x_e5x/boards/d5035_01/board.h b/hw/bsp/samd5x_e5x/boards/d5035_01/board.h
index 2cf59f5d1a..4eb4a4ebea 100644
--- a/hw/bsp/samd5x_e5x/boards/d5035_01/board.h
+++ b/hw/bsp/samd5x_e5x/boards/d5035_01/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: D5035-01
+ url: https://github.com/RudolphRiedel/USB_CAN-FD
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/feather_m4_express/board.h b/hw/bsp/samd5x_e5x/boards/feather_m4_express/board.h
index 83de042662..edb965c9dc 100644
--- a/hw/bsp/samd5x_e5x/boards/feather_m4_express/board.h
+++ b/hw/bsp/samd5x_e5x/boards/feather_m4_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather M4 Express
+ url: https://www.adafruit.com/product/3857
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/itsybitsy_m4/board.h b/hw/bsp/samd5x_e5x/boards/itsybitsy_m4/board.h
index 2723157714..d41ca4ac3b 100644
--- a/hw/bsp/samd5x_e5x/boards/itsybitsy_m4/board.h
+++ b/hw/bsp/samd5x_e5x/boards/itsybitsy_m4/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit ItsyBitsy M4
+ url: https://www.adafruit.com/product/3800
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/metro_m4_express/board.h b/hw/bsp/samd5x_e5x/boards/metro_m4_express/board.h
index b3b80db89b..b2eaaa54d9 100644
--- a/hw/bsp/samd5x_e5x/boards/metro_m4_express/board.h
+++ b/hw/bsp/samd5x_e5x/boards/metro_m4_express/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Metro M4 Express
+ url: https://www.adafruit.com/product/3382
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/pybadge/board.h b/hw/bsp/samd5x_e5x/boards/pybadge/board.h
index 4629643fd5..a5d447db62 100644
--- a/hw/bsp/samd5x_e5x/boards/pybadge/board.h
+++ b/hw/bsp/samd5x_e5x/boards/pybadge/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit PyBadge
+ url: https://www.adafruit.com/product/4200
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/pyportal/board.h b/hw/bsp/samd5x_e5x/boards/pyportal/board.h
index ff04c900bf..e635e1375a 100644
--- a/hw/bsp/samd5x_e5x/boards/pyportal/board.h
+++ b/hw/bsp/samd5x_e5x/boards/pyportal/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit PyPortal
+ url: https://www.adafruit.com/product/4116
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/boards/same54_xplained/board.h b/hw/bsp/samd5x_e5x/boards/same54_xplained/board.h
index faaa52b8e6..6c252f9d00 100644
--- a/hw/bsp/samd5x_e5x/boards/same54_xplained/board.h
+++ b/hw/bsp/samd5x_e5x/boards/same54_xplained/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAME54 Xplained Pro
+ url: https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAME54-XPRO
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/samd5x_e5x/family.c b/hw/bsp/samd5x_e5x/family.c
index abaee353b1..8ceddb1beb 100644
--- a/hw/bsp/samd5x_e5x/family.c
+++ b/hw/bsp/samd5x_e5x/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include "sam.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/samg/boards/samg55_xplained/board.h b/hw/bsp/samg/boards/samg55_xplained/board.h
index c94cda1987..53c557ef02 100644
--- a/hw/bsp/samg/boards/samg55_xplained/board.h
+++ b/hw/bsp/samg/boards/samg55_xplained/board.h
@@ -1,3 +1,8 @@
+/* metadata:
+ name: SAMG55 Xplained Pro
+ url: https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMG55-XPRO
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/samg/family.c b/hw/bsp/samg/family.c
index 63db5739d5..8db429e79f 100644
--- a/hw/bsp/samg/family.c
+++ b/hw/bsp/samg/family.c
@@ -23,6 +23,10 @@
*
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include "sam.h"
// Suppress warning caused by mcu driver
diff --git a/hw/bsp/saml2x/boards/atsaml21_xpro/board.h b/hw/bsp/saml2x/boards/atsaml21_xpro/board.h
index 315e40c781..b93b4e5919 100644
--- a/hw/bsp/saml2x/boards/atsaml21_xpro/board.h
+++ b/hw/bsp/saml2x/boards/atsaml21_xpro/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAML21 Xplained Pro
+ url: https://www.microchip.com/en-us/development-tool/atsaml21-xpro-b
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/saml2x/boards/saml22_feather/board.h b/hw/bsp/saml2x/boards/saml22_feather/board.h
index 72e9897b62..f8660c3f88 100644
--- a/hw/bsp/saml2x/boards/saml22_feather/board.h
+++ b/hw/bsp/saml2x/boards/saml22_feather/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SAML22 Feather
+ url: https://github.com/joeycastillo/Feather-Projects/tree/main/SAML22%20Feather
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/saml2x/boards/sensorwatch_m0/board.h b/hw/bsp/saml2x/boards/sensorwatch_m0/board.h
index 735f6afc8b..502c799dbe 100644
--- a/hw/bsp/saml2x/boards/sensorwatch_m0/board.h
+++ b/hw/bsp/saml2x/boards/sensorwatch_m0/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: SensorWatch
+ url: https://github.com/joeycastillo/Sensor-Watch
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/saml2x/family.c b/hw/bsp/saml2x/family.c
index 11977b036e..cdc65baf13 100644
--- a/hw/bsp/saml2x/family.c
+++ b/hw/bsp/saml2x/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Microchip
+*/
+
#include "sam.h"
// Suppress warning caused by mcu driver
diff --git a/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h b/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h
index f08762736f..c7d809717f 100644
--- a/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h
+++ b/hw/bsp/stm32c0/boards/stm32c071nucleo/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32C071 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-g071rb.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32c0/family.c b/hw/bsp/stm32c0/family.c
index dba6a8af16..ace3f2a715 100644
--- a/hw/bsp/stm32c0/family.c
+++ b/hw/bsp/stm32c0/family.c
@@ -25,6 +25,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32c0xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32c0/family.cmake b/hw/bsp/stm32c0/family.cmake
index ed237838d5..7c5328ab01 100644
--- a/hw/bsp/stm32c0/family.cmake
+++ b/hw/bsp/stm32c0/family.cmake
@@ -113,6 +113,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_stlink(${TARGET})
#family_flash_openocd(${TARGET})
diff --git a/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h b/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h
index 9af81e63cc..82ad309a39 100644
--- a/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h
+++ b/hw/bsp/stm32f0/boards/stm32f070rbnucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F070 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f070rb.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f0/boards/stm32f072disco/board.h b/hw/bsp/stm32f0/boards/stm32f072disco/board.h
index 1febd01e81..3ca1b36419 100644
--- a/hw/bsp/stm32f0/boards/stm32f072disco/board.h
+++ b/hw/bsp/stm32f0/boards/stm32f072disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F072 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f072bdiscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f0/boards/stm32f072eval/board.h b/hw/bsp/stm32f0/boards/stm32f072eval/board.h
index 7dcfa3e85c..2828000b9c 100644
--- a/hw/bsp/stm32f0/boards/stm32f072eval/board.h
+++ b/hw/bsp/stm32f0/boards/stm32f072eval/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F072 Eval
+ url: https://www.st.com/en/evaluation-tools/stm32072b-eval.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f0/family.c b/hw/bsp/stm32f0/family.c
index 3079a1ed32..ea1373e6cf 100644
--- a/hw/bsp/stm32f0/family.c
+++ b/hw/bsp/stm32f0/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f0xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32f0/family.cmake b/hw/bsp/stm32f0/family.cmake
index 0af200dd53..8b70411e82 100644
--- a/hw/bsp/stm32f0/family.cmake
+++ b/hw/bsp/stm32f0/family.cmake
@@ -110,6 +110,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h b/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h
index 2f30a09d42..c8a74337f7 100644
--- a/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h
+++ b/hw/bsp/stm32f1/boards/stm32f103_bluepill/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F103 Bluepill
+ url: https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f1/boards/stm32f103_mini_2/board.h b/hw/bsp/stm32f1/boards/stm32f103_mini_2/board.h
index c8dba42689..d4824686f0 100644
--- a/hw/bsp/stm32f1/boards/stm32f103_mini_2/board.h
+++ b/hw/bsp/stm32f1/boards/stm32f103_mini_2/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F103 Mini v2
+ url: https://stm32-base.org/boards/STM32F103RCT6-STM32-Mini-V2.0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f1/boards/stm32f103ze_iar/board.h b/hw/bsp/stm32f1/boards/stm32f103ze_iar/board.h
index d31102d327..1253c5a48e 100644
--- a/hw/bsp/stm32f1/boards/stm32f103ze_iar/board.h
+++ b/hw/bsp/stm32f1/boards/stm32f103ze_iar/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: IAR STM32 F103ze starter kit
+ url: n/a
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f1/family.c b/hw/bsp/stm32f1/family.c
index 600fc28c01..29785397f9 100644
--- a/hw/bsp/stm32f1/family.c
+++ b/hw/bsp/stm32f1/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f1xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32f1/family.cmake b/hw/bsp/stm32f1/family.cmake
index e8cc4db1fd..31801c0353 100644
--- a/hw/bsp/stm32f1/family.cmake
+++ b/hw/bsp/stm32f1/family.cmake
@@ -109,6 +109,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32f2/boards/stm32f207nucleo/board.h b/hw/bsp/stm32f2/boards/stm32f207nucleo/board.h
index 3301ede271..8d8c52f60f 100644
--- a/hw/bsp/stm32f2/boards/stm32f207nucleo/board.h
+++ b/hw/bsp/stm32f2/boards/stm32f207nucleo/board.h
@@ -1,3 +1,9 @@
+
+/* metadata:
+ name: STM32 F207 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f207zg.html
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/stm32f2/family.c b/hw/bsp/stm32f2/family.c
index 62cca327bd..c1333382a2 100644
--- a/hw/bsp/stm32f2/family.c
+++ b/hw/bsp/stm32f2/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f2xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32f2/family.cmake b/hw/bsp/stm32f2/family.cmake
index 538a6cd661..2bae07b998 100644
--- a/hw/bsp/stm32f2/family.cmake
+++ b/hw/bsp/stm32f2/family.cmake
@@ -111,6 +111,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32f3/boards/stm32f303disco/board.h b/hw/bsp/stm32f3/boards/stm32f303disco/board.h
index 706149b49a..c79dea9454 100644
--- a/hw/bsp/stm32f3/boards/stm32f303disco/board.h
+++ b/hw/bsp/stm32f3/boards/stm32f303disco/board.h
@@ -1,3 +1,9 @@
+
+/* metadata:
+ name: STM32 F303 Discovery
+ url: https://www.st.com/en/evaluation-tools/stm32f3discovery.html
+*/
+
#ifndef BOARD_H
#define BOARD_H
diff --git a/hw/bsp/stm32f3/family.c b/hw/bsp/stm32f3/family.c
index f94dd95cff..84612d4165 100644
--- a/hw/bsp/stm32f3/family.c
+++ b/hw/bsp/stm32f3/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f3xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32f3/family.cmake b/hw/bsp/stm32f3/family.cmake
index dbba1e6584..6f4e866f88 100644
--- a/hw/bsp/stm32f3/family.cmake
+++ b/hw/bsp/stm32f3/family.cmake
@@ -107,6 +107,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32f4/boards/feather_stm32f405/board.h b/hw/bsp/stm32f4/boards/feather_stm32f405/board.h
index 670ce80125..11e976a42b 100644
--- a/hw/bsp/stm32f4/boards/feather_stm32f405/board.h
+++ b/hw/bsp/stm32f4/boards/feather_stm32f405/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Adafruit Feather STM32F405
+ url: https://www.adafruit.com/product/4382
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/pyboardv11/board.h b/hw/bsp/stm32f4/boards/pyboardv11/board.h
index 0773135182..9583a924b8 100644
--- a/hw/bsp/stm32f4/boards/pyboardv11/board.h
+++ b/hw/bsp/stm32f4/boards/pyboardv11/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Pyboard v1.1
+ url: https://www.adafruit.com/product/2390
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h b/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h
index ef40089c98..8a3fe8409c 100644
--- a/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f401blackpill/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F401 Blackpill
+ url: https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h b/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h
index 6879d066ba..effbf2be83 100644
--- a/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f407blackvet/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F407 Blackvet
+ url: https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f407disco/board.h b/hw/bsp/stm32f4/boards/stm32f407disco/board.h
index 380f8e3912..19a0297688 100644
--- a/hw/bsp/stm32f4/boards/stm32f407disco/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f407disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F407 Discovery
+ url: https://www.st.com/en/evaluation-tools/stm32f4discovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h b/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h
index efa618b727..61e5de70d5 100644
--- a/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f411blackpill/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F411 Blackpill
+ url: https://stm32-base.org/boards/STM32F411CEU6-WeAct-Black-Pill-V2.0
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f411disco/board.h b/hw/bsp/stm32f4/boards/stm32f411disco/board.h
index d4bad8e40c..d7b02e79dd 100644
--- a/hw/bsp/stm32f4/boards/stm32f411disco/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f411disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F411 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f411ediscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f412disco/board.h b/hw/bsp/stm32f4/boards/stm32f412disco/board.h
index 74e6644182..d5146ae3c3 100644
--- a/hw/bsp/stm32f4/boards/stm32f412disco/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f412disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F412 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f412gdiscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h b/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h
index 8900a1e6b4..f7026ce618 100644
--- a/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f412nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F412 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f412zg.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h b/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h
index aa9de4073a..9a348f33f1 100644
--- a/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h
+++ b/hw/bsp/stm32f4/boards/stm32f439nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F439 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f439zi.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f4/family.c b/hw/bsp/stm32f4/family.c
index 866a09d6fe..3a1507dbfc 100644
--- a/hw/bsp/stm32f4/family.c
+++ b/hw/bsp/stm32f4/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f4xx_hal.h"
#include "bsp/board_api.h"
diff --git a/hw/bsp/stm32f4/family.cmake b/hw/bsp/stm32f4/family.cmake
index c0c9fe9028..487f0cf067 100644
--- a/hw/bsp/stm32f4/family.cmake
+++ b/hw/bsp/stm32f4/family.cmake
@@ -137,6 +137,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32f7/boards/stlinkv3mini/board.h b/hw/bsp/stm32f7/boards/stlinkv3mini/board.h
index 632fd99ed7..06adb79ad6 100644
--- a/hw/bsp/stm32f7/boards/stlinkv3mini/board.h
+++ b/hw/bsp/stm32f7/boards/stlinkv3mini/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Stlink-v3 mini
+ url: https://www.st.com/en/development-tools/stlink-v3mini.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/boards/stm32f723disco/board.h b/hw/bsp/stm32f7/boards/stm32f723disco/board.h
index d45ceec5cb..35102c1f2e 100644
--- a/hw/bsp/stm32f7/boards/stm32f723disco/board.h
+++ b/hw/bsp/stm32f7/boards/stm32f723disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F723 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f723ediscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/boards/stm32f746disco/board.h b/hw/bsp/stm32f7/boards/stm32f746disco/board.h
index d8e92931e4..2964ebadae 100644
--- a/hw/bsp/stm32f7/boards/stm32f746disco/board.h
+++ b/hw/bsp/stm32f7/boards/stm32f746disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F746 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f746gdiscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h b/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h
index 55e77fe5f7..b039f5543e 100644
--- a/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h
+++ b/hw/bsp/stm32f7/boards/stm32f746nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F746 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f746zg.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h b/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h
index 81cb60aebe..b5b3841f19 100644
--- a/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h
+++ b/hw/bsp/stm32f7/boards/stm32f767nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F767 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-f767zi.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/boards/stm32f769disco/board.h b/hw/bsp/stm32f7/boards/stm32f769disco/board.h
index 268919b612..8ac5206191 100644
--- a/hw/bsp/stm32f7/boards/stm32f769disco/board.h
+++ b/hw/bsp/stm32f7/boards/stm32f769disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 F769 Discovery
+ url: https://www.st.com/en/evaluation-tools/32f769idiscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32f7/family.c b/hw/bsp/stm32f7/family.c
index 527fbfe5cd..5f63834d0c 100644
--- a/hw/bsp/stm32f7/family.c
+++ b/hw/bsp/stm32f7/family.c
@@ -26,6 +26,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32f7xx_hal.h"
#include "bsp/board_api.h"
diff --git a/hw/bsp/stm32f7/family.cmake b/hw/bsp/stm32f7/family.cmake
index dc134e9c0f..df1d2a3cf0 100644
--- a/hw/bsp/stm32f7/family.cmake
+++ b/hw/bsp/stm32f7/family.cmake
@@ -139,6 +139,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h b/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h
index 9ebaf73f0d..14d309da13 100644
--- a/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h
+++ b/hw/bsp/stm32g0/boards/stm32g0b1nucleo/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 G0B1 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-g0b1re.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32g0/family.c b/hw/bsp/stm32g0/family.c
index d1635be129..86f2af12e8 100644
--- a/hw/bsp/stm32g0/family.c
+++ b/hw/bsp/stm32g0/family.c
@@ -25,6 +25,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32g0xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32g0/family.cmake b/hw/bsp/stm32g0/family.cmake
index 0dafa9c0a7..7129cebd8b 100644
--- a/hw/bsp/stm32g0/family.cmake
+++ b/hw/bsp/stm32g0/family.cmake
@@ -112,6 +112,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
family_flash_stlink(${TARGET})
#family_flash_openocd(${TARGET})
diff --git a/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h b/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h
index e61b131705..d569783fc6 100644
--- a/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h
+++ b/hw/bsp/stm32g4/boards/b_g474e_dpow1/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 B-G474E-DPOW1 Discovery kit
+ url: https://www.st.com/en/evaluation-tools/b-g474e-dpow1.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h b/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h
index aa2bf20bb6..cfef1c09f9 100644
--- a/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h
+++ b/hw/bsp/stm32g4/boards/stm32g474nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 G474 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-g474re.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h b/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h
index 7dd4ed9aee..be3d44645d 100644
--- a/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h
+++ b/hw/bsp/stm32g4/boards/stm32g491nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 G491 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-g491re.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32g4/family.c b/hw/bsp/stm32g4/family.c
index 2259cb9e29..d0ef7e5032 100644
--- a/hw/bsp/stm32g4/family.c
+++ b/hw/bsp/stm32g4/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32g4xx_hal.h"
#include "stm32g4xx_ll_bus.h"
diff --git a/hw/bsp/stm32g4/family.cmake b/hw/bsp/stm32g4/family.cmake
index 4217e4be6e..6c4e90d409 100644
--- a/hw/bsp/stm32g4/family.cmake
+++ b/hw/bsp/stm32g4/family.cmake
@@ -108,6 +108,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32h5/boards/stm32h503nucleo/board.h b/hw/bsp/stm32h5/boards/stm32h503nucleo/board.h
index da20cfa3ae..c8b5e31f55 100644
--- a/hw/bsp/stm32h5/boards/stm32h503nucleo/board.h
+++ b/hw/bsp/stm32h5/boards/stm32h503nucleo/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H503 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-h503rb.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h5/boards/stm32h563nucleo/board.h b/hw/bsp/stm32h5/boards/stm32h563nucleo/board.h
index c4e0f680b0..adc3d751a8 100644
--- a/hw/bsp/stm32h5/boards/stm32h563nucleo/board.h
+++ b/hw/bsp/stm32h5/boards/stm32h563nucleo/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H563 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-h563zi.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h5/boards/stm32h573i_dk/board.h b/hw/bsp/stm32h5/boards/stm32h573i_dk/board.h
index 7baef6ca66..d75114397d 100644
--- a/hw/bsp/stm32h5/boards/stm32h573i_dk/board.h
+++ b/hw/bsp/stm32h5/boards/stm32h573i_dk/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H573i Discovery
+ url: https://www.st.com/en/evaluation-tools/stm32h573i-dk.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h5/family.c b/hw/bsp/stm32h5/family.c
index 02500db4ec..efc5bb7b1e 100644
--- a/hw/bsp/stm32h5/family.c
+++ b/hw/bsp/stm32h5/family.c
@@ -25,6 +25,9 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
// Suppress warning caused by mcu driver
#ifdef __GNUC__
diff --git a/hw/bsp/stm32h5/family.cmake b/hw/bsp/stm32h5/family.cmake
index 94900f4162..804b137684 100644
--- a/hw/bsp/stm32h5/family.cmake
+++ b/hw/bsp/stm32h5/family.cmake
@@ -112,6 +112,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32h7/boards/daisyseed/board.h b/hw/bsp/stm32h7/boards/daisyseed/board.h
index 2d681d6405..300ecb8b2b 100644
--- a/hw/bsp/stm32h7/boards/daisyseed/board.h
+++ b/hw/bsp/stm32h7/boards/daisyseed/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Daisy Seed
+ url: https://electro-smith.com/products/daisy-seed
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h b/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h
index c5257901d1..f623149bdd 100644
--- a/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h723nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H723 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-h723zg.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h743eval/board.h b/hw/bsp/stm32h7/boards/stm32h743eval/board.h
index fa9721be3b..334876e515 100644
--- a/hw/bsp/stm32h7/boards/stm32h743eval/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h743eval/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H743 Eval
+ url: https://www.st.com/en/evaluation-tools/stm32h743i-eval.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h b/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h
index 0606f395a9..0277d05c79 100644
--- a/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H743 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-h743zi.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h745disco/board.h b/hw/bsp/stm32h7/boards/stm32h745disco/board.h
index b9d9cdea40..ebdd5a17a4 100644
--- a/hw/bsp/stm32h7/boards/stm32h745disco/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h745disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H745 Discovery
+ url: https://www.st.com/en/evaluation-tools/stm32h745i-disco.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h750_weact/board.h b/hw/bsp/stm32h7/boards/stm32h750_weact/board.h
index f1c3630826..e11a55103e 100644
--- a/hw/bsp/stm32h7/boards/stm32h750_weact/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h750_weact/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H750 WeAct
+ url: https://www.adafruit.com/product/5032
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/stm32h750bdk/board.h b/hw/bsp/stm32h7/boards/stm32h750bdk/board.h
index 2895f0973d..ac417601b9 100644
--- a/hw/bsp/stm32h7/boards/stm32h750bdk/board.h
+++ b/hw/bsp/stm32h7/boards/stm32h750bdk/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 H750b Discovery Kit
+ url: https://www.st.com/en/evaluation-tools/stm32h750b-dk.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h b/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h
index 625c6a137e..bfaf427848 100644
--- a/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h
+++ b/hw/bsp/stm32h7/boards/waveshare_openh743i/board.h
@@ -26,6 +26,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: Waveshare Open H743i
+ url: https://www.waveshare.com/openh743i-c-standard.htm
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32h7/family.c b/hw/bsp/stm32h7/family.c
index 0be18350c8..e5228b29b8 100644
--- a/hw/bsp/stm32h7/family.c
+++ b/hw/bsp/stm32h7/family.c
@@ -27,6 +27,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32h7xx_hal.h"
#include "bsp/board_api.h"
diff --git a/hw/bsp/stm32h7/family.cmake b/hw/bsp/stm32h7/family.cmake
index 3e246faedc..6af79736d8 100644
--- a/hw/bsp/stm32h7/family.cmake
+++ b/hw/bsp/stm32h7/family.cmake
@@ -144,6 +144,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32l0/boards/stm32l052dap52/board.h b/hw/bsp/stm32l0/boards/stm32l052dap52/board.h
index ee83bbcbcd..50bbafadb9 100644
--- a/hw/bsp/stm32l0/boards/stm32l052dap52/board.h
+++ b/hw/bsp/stm32l0/boards/stm32l052dap52/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L052 DAP
+ url: n/a
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l0/boards/stm32l0538disco/board.h b/hw/bsp/stm32l0/boards/stm32l0538disco/board.h
index 5cda1c15a6..29402f00a5 100644
--- a/hw/bsp/stm32l0/boards/stm32l0538disco/board.h
+++ b/hw/bsp/stm32l0/boards/stm32l0538disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L0538 Discovery
+ url: https://www.st.com/en/evaluation-tools/32l0538discovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l0/family.c b/hw/bsp/stm32l0/family.c
index c8c88d687d..b28903e00c 100644
--- a/hw/bsp/stm32l0/family.c
+++ b/hw/bsp/stm32l0/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32l0xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32l0/family.cmake b/hw/bsp/stm32l0/family.cmake
index c04927585e..a2324f123b 100644
--- a/hw/bsp/stm32l0/family.cmake
+++ b/hw/bsp/stm32l0/family.cmake
@@ -111,6 +111,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h
index 72d17b7608..980e1e3217 100644
--- a/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h
+++ b/hw/bsp/stm32l4/boards/stm32l412nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L412 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-l412kb.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l4/boards/stm32l476disco/board.h b/hw/bsp/stm32l4/boards/stm32l476disco/board.h
index 9d4351b398..8c766d8ea8 100644
--- a/hw/bsp/stm32l4/boards/stm32l476disco/board.h
+++ b/hw/bsp/stm32l4/boards/stm32l476disco/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L476 Disco
+ url: https://www.st.com/en/evaluation-tools/32l476gdiscovery.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h
index 47ada6bb90..f522e7522f 100644
--- a/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h
+++ b/hw/bsp/stm32l4/boards/stm32l4p5nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L4P5 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-l4p5zg.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h b/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h
index 47ada6bb90..c181f5d4aa 100644
--- a/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h
+++ b/hw/bsp/stm32l4/boards/stm32l4r5nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 L4R5 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32l4/family.c b/hw/bsp/stm32l4/family.c
index 965c4810ac..2b555b5c2a 100644
--- a/hw/bsp/stm32l4/family.c
+++ b/hw/bsp/stm32l4/family.c
@@ -26,6 +26,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32l4xx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32l4/family.cmake b/hw/bsp/stm32l4/family.cmake
index 77876cb8bc..67c5be7d8d 100644
--- a/hw/bsp/stm32l4/family.cmake
+++ b/hw/bsp/stm32l4/family.cmake
@@ -114,6 +114,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h b/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h
index 2f1c451db2..cf3f63ea56 100644
--- a/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h
+++ b/hw/bsp/stm32u5/boards/b_u585i_iot2a/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 B-U585i IOT2A Discovery kit
+ url: https://www.st.com/en/evaluation-tools/b-u585i-iot02a.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h
index 7f3bf462ce..0c3439b2ce 100644
--- a/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h
+++ b/hw/bsp/stm32u5/boards/stm32u545nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 U545 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32u5/boards/stm32u575eval/board.h b/hw/bsp/stm32u5/boards/stm32u575eval/board.h
index bd91502af0..b11f6a7470 100644
--- a/hw/bsp/stm32u5/boards/stm32u575eval/board.h
+++ b/hw/bsp/stm32u5/boards/stm32u575eval/board.h
@@ -25,6 +25,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 U575 Eval
+ url: https://www.st.com/en/evaluation-tools/stm32u575i-ev.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h
index 6d244d4180..be037b68aa 100644
--- a/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h
+++ b/hw/bsp/stm32u5/boards/stm32u575nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 U575 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-u575zi-q.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h b/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h
index 062fb807f4..0785fb36b9 100644
--- a/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h
+++ b/hw/bsp/stm32u5/boards/stm32u5a5nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 U5a5 Nucleo
+ url: https://www.st.com/en/evaluation-tools/nucleo-u5a5zj-q.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32u5/family.c b/hw/bsp/stm32u5/family.c
index 3cc7cc5115..032c01f349 100644
--- a/hw/bsp/stm32u5/family.c
+++ b/hw/bsp/stm32u5/family.c
@@ -25,6 +25,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
// Suppress warning caused by mcu driver
#ifdef __GNUC__
#pragma GCC diagnostic push
diff --git a/hw/bsp/stm32u5/family.cmake b/hw/bsp/stm32u5/family.cmake
index 3ab7cdf8b2..3be6702fda 100644
--- a/hw/bsp/stm32u5/family.cmake
+++ b/hw/bsp/stm32u5/family.cmake
@@ -115,6 +115,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h b/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h
index ea975df030..7045925064 100644
--- a/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h
+++ b/hw/bsp/stm32wb/boards/stm32wb55nucleo/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: STM32 P-NUCLEO-WB55
+ url: https://www.st.com/en/evaluation-tools/p-nucleo-wb55.html
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/stm32wb/family.c b/hw/bsp/stm32wb/family.c
index 6051388a7b..43e1345c80 100644
--- a/hw/bsp/stm32wb/family.c
+++ b/hw/bsp/stm32wb/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: STMicroelectronics
+*/
+
#include "stm32wbxx_hal.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/stm32wb/family.cmake b/hw/bsp/stm32wb/family.cmake
index 071797c209..4f958045de 100644
--- a/hw/bsp/stm32wb/family.cmake
+++ b/hw/bsp/stm32wb/family.cmake
@@ -114,6 +114,7 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_stlink(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/hw/bsp/tm4c/boards/ek_tm4c123gxl/board.h b/hw/bsp/tm4c/boards/ek_tm4c123gxl/board.h
index 5732056ae6..c0ceb4cd85 100644
--- a/hw/bsp/tm4c/boards/ek_tm4c123gxl/board.h
+++ b/hw/bsp/tm4c/boards/ek_tm4c123gxl/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: TM4C123G LaunchPad
+ url: https://www.ti.com/tool/EK-TM4C123GXL
+*/
+
#ifndef _BOARD_H_
#define _BOARD_H_
diff --git a/hw/bsp/tm4c/family.c b/hw/bsp/tm4c/family.c
index 5e1f6d3ffd..4e54910053 100644
--- a/hw/bsp/tm4c/family.c
+++ b/hw/bsp/tm4c/family.c
@@ -1,3 +1,7 @@
+/* metadata:
+ manufacturer: Texas Instruments
+*/
+
#include "TM4C123.h"
#include "bsp/board_api.h"
#include "board.h"
diff --git a/hw/bsp/xmc4000/boards/xmc4500_relax/board.h b/hw/bsp/xmc4000/boards/xmc4500_relax/board.h
index 2d4764f401..3d0e92b2c2 100644
--- a/hw/bsp/xmc4000/boards/xmc4500_relax/board.h
+++ b/hw/bsp/xmc4000/boards/xmc4500_relax/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: XMC4500 relax kit
+ url: https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc45_relax_v1/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/xmc4000/boards/xmc4700_relax/board.h b/hw/bsp/xmc4000/boards/xmc4700_relax/board.h
index aa12fde3bb..f3972980c1 100644
--- a/hw/bsp/xmc4000/boards/xmc4700_relax/board.h
+++ b/hw/bsp/xmc4000/boards/xmc4700_relax/board.h
@@ -24,6 +24,11 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ name: XMC4700 relax kit
+ url: https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc47_relax_v1/
+*/
+
#ifndef BOARD_H_
#define BOARD_H_
diff --git a/hw/bsp/xmc4000/family.c b/hw/bsp/xmc4000/family.c
index c776cb58a1..1acce024b0 100644
--- a/hw/bsp/xmc4000/family.c
+++ b/hw/bsp/xmc4000/family.c
@@ -24,6 +24,10 @@
* This file is part of the TinyUSB stack.
*/
+/* metadata:
+ manufacturer: Infineon
+*/
+
#include "xmc_gpio.h"
#include "xmc_scu.h"
#include "xmc_uart.h"
diff --git a/hw/bsp/xmc4000/family.cmake b/hw/bsp/xmc4000/family.cmake
index 85444db287..e73f0f216c 100644
--- a/hw/bsp/xmc4000/family.cmake
+++ b/hw/bsp/xmc4000/family.cmake
@@ -95,5 +95,6 @@ function(family_configure_example TARGET RTOS)
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
# Flashing
+ family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
endfunction()
diff --git a/library.json b/library.json
index c945d4b52f..f1bfd63876 100644
--- a/library.json
+++ b/library.json
@@ -1,6 +1,6 @@
{
"name": "TinyUSB",
- "version": "0.17.0",
+ "version": "0.18.0",
"description": "TinyUSB is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events are deferred then handled in the non-ISR task function.",
"keywords": "usb, host, device",
"repository":
diff --git a/repository.yml b/repository.yml
index df7895e84b..31c9eddc55 100644
--- a/repository.yml
+++ b/repository.yml
@@ -15,5 +15,6 @@ repo.versions:
"0.15.0": "0.15.0"
"0.16.0": "0.16.0"
"0.17.0": "0.17.0"
- "0-latest": "0.17.0"
+ "0.18.0": "0.18.0"
+ "0-latest": "0.18.0"
"0-dev": "0.0.0"
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index cd4183cc38..8a130b7e2f 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -81,134 +81,141 @@
// Only STM32 and dcd_transdimension use non-linear buffer for now
// dwc2 except esp32sx (since it may use dcd_esp32sx)
+// Ring buffer is incompatible with dcache, since neither address nor size is aligned to cache line
#if (defined(TUP_USBIP_DWC2) && !TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)) || \
- defined(TUP_USBIP_FSDEV) || \
- CFG_TUSB_MCU == OPT_MCU_RX63X || \
- CFG_TUSB_MCU == OPT_MCU_RX65X || \
- CFG_TUSB_MCU == OPT_MCU_RX72N || \
- CFG_TUSB_MCU == OPT_MCU_LPC18XX || \
- CFG_TUSB_MCU == OPT_MCU_LPC43XX || \
- CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \
+ defined(TUP_USBIP_FSDEV) || \
+ CFG_TUSB_MCU == OPT_MCU_RX63X || \
+ CFG_TUSB_MCU == OPT_MCU_RX65X || \
+ CFG_TUSB_MCU == OPT_MCU_RX72N || \
+ CFG_TUSB_MCU == OPT_MCU_LPC18XX || \
+ CFG_TUSB_MCU == OPT_MCU_LPC43XX || \
+ CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \
CFG_TUSB_MCU == OPT_MCU_MSP432E4
- #if TUD_AUDIO_PREFER_RING_BUFFER
- #define USE_LINEAR_BUFFER 0
+ #if TUD_AUDIO_PREFER_RING_BUFFER && !CFG_TUD_MEM_DCACHE_ENABLE
+ #define USE_LINEAR_BUFFER 0
#else
- #define USE_LINEAR_BUFFER 1
+ #define USE_LINEAR_BUFFER 1
#endif
#else
- #define USE_LINEAR_BUFFER 1
+ #define USE_LINEAR_BUFFER 1
#endif
// Declaration of buffers
// Check for maximum supported numbers
#if CFG_TUD_AUDIO > 3
-#error Maximum number of audio functions restricted to three!
+ #error Maximum number of audio functions restricted to three!
#endif
-// Put sw_buf in USB section only if necessary
+// Put swap buffer in USB section only if necessary
#if USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING
-#define IN_SW_BUF_MEM_SECTION
+ #define IN_SW_BUF_MEM_ATTR TU_ATTR_ALIGNED(4)
#else
-#define IN_SW_BUF_MEM_SECTION CFG_TUD_MEM_SECTION
+ #define IN_SW_BUF_MEM_ATTR CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN
#endif
#if USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING
-#define OUT_SW_BUF_MEM_SECTION
+ #define OUT_SW_BUF_MEM_ATTR TU_ATTR_ALIGNED(4)
#else
-#define OUT_SW_BUF_MEM_SECTION CFG_TUD_MEM_SECTION
+ #define OUT_SW_BUF_MEM_ATTR CFG_TUD_MEM_SECTION CFG_TUD_MEM_ALIGN
#endif
// EP IN software buffers and mutexes
#if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
+tu_static IN_SW_BUF_MEM_ATTR struct {
#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
- tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_in_ff_mutex_wr_1; // No need for read mutex as only USB driver reads from FIFO
- #endif
- #endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
-
+ TUD_EPBUF_DEF(buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ);
+ #endif
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
- tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_in_ff_mutex_wr_2; // No need for read mutex as only USB driver reads from FIFO
- #endif
- #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
-
+ TUD_EPBUF_DEF(buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ);
+ #endif
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
- tu_static IN_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_in_ff_mutex_wr_3; // No need for read mutex as only USB driver reads from FIFO
+ TUD_EPBUF_DEF(buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ);
+ #endif
+} ep_in_sw_buf;
+
+ #if CFG_FIFO_MUTEX
+ #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_in_ff_mutex_wr_1;
#endif
- #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_in_ff_mutex_wr_2;
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_in_ff_mutex_wr_3;
+ #endif
+ #endif
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
// Linear buffer TX in case:
// - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR
// - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into
#if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING)
+tu_static CFG_TUD_MEM_SECTION struct {
#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_1[CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX];
+ TUD_EPBUF_DEF(buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX);
#endif
-
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_2[CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX];
+ TUD_EPBUF_DEF(buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX);
#endif
-
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_3[CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX];
+ TUD_EPBUF_DEF(buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX);
#endif
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
+} lin_buf_in;
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
// EP OUT software buffers and mutexes
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
+tu_static OUT_SW_BUF_MEM_ATTR struct {
#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
- tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_out_ff_mutex_rd_1; // No need for write mutex as only USB driver writes into FIFO
- #endif
- #endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
-
+ TUD_EPBUF_DEF(buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ);
+ #endif
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
- tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_out_ff_mutex_rd_2; // No need for write mutex as only USB driver writes into FIFO
- #endif
- #endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
-
+ TUD_EPBUF_DEF(buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ);
+ #endif
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
- tu_static OUT_SW_BUF_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ];
- #if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t ep_out_ff_mutex_rd_3; // No need for write mutex as only USB driver writes into FIFO
+ TUD_EPBUF_DEF(buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ);
+ #endif
+} ep_out_sw_buf;
+
+ #if CFG_FIFO_MUTEX
+ #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_out_ff_mutex_rd_1;
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_out_ff_mutex_rd_2;
#endif
- #endif // CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
+ tu_static osal_mutex_def_t ep_out_ff_mutex_rd_3;
+ #endif
+ #endif
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
// Linear buffer RX in case:
// - target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR
// - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
+tu_static CFG_TUD_MEM_SECTION struct {
#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_1[CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX];
+ TUD_EPBUF_DEF(buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX);
#endif
-
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_2[CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX];
+ TUD_EPBUF_DEF(buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX);
#endif
-
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
- tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_3[CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX];
+ TUD_EPBUF_DEF(buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX);
#endif
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
+} lin_buf_out;
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
// Control buffers
-tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ];
+tu_static uint8_t ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ];
#if CFG_TUD_AUDIO > 1
-tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ];
+tu_static uint8_t ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ];
#endif
#if CFG_TUD_AUDIO > 2
-tu_static CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ];
+tu_static uint8_t ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ];
#endif
// Active alternate setting of interfaces
@@ -225,127 +232,148 @@ tu_static uint8_t alt_setting_3[CFG_TUD_AUDIO_FUNC_3_N_AS_INT];
// Software encoding/decoding support FIFOs
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t tx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t tx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO
+ tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_1[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO];// No need for read mutex as only USB driver reads from FIFO
#endif
#endif
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t tx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t tx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO
+ tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_2[CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO];// No need for read mutex as only USB driver reads from FIFO
#endif
#endif
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t tx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t tx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO]; // No need for read mutex as only USB driver reads from FIFO
+ tu_static osal_mutex_def_t tx_supp_ff_mutex_wr_3[CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO];// No need for read mutex as only USB driver reads from FIFO
#endif
#endif
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t rx_supp_ff_buf_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t rx_supp_ff_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO
+ tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_1[CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO];// No need for write mutex as only USB driver writes into FIFO
#endif
#endif
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t rx_supp_ff_buf_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t rx_supp_ff_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO
+ tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_2[CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO];// No need for write mutex as only USB driver writes into FIFO
#endif
#endif
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
- tu_static CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ];
+ tu_static TU_ATTR_ALIGNED(4) uint8_t rx_supp_ff_buf_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ];
tu_static tu_fifo_t rx_supp_ff_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO];
#if CFG_FIFO_MUTEX
- tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO]; // No need for write mutex as only USB driver writes into FIFO
+ tu_static osal_mutex_def_t rx_supp_ff_mutex_rd_3[CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO];// No need for write mutex as only USB driver writes into FIFO
#endif
#endif
#endif
+// Aligned buffer for feedback EP
+#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+tu_static CFG_TUD_MEM_SECTION struct {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
+ TUD_EPBUF_TYPE_DEF(uint32_t, buf_1);
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
+ TUD_EPBUF_TYPE_DEF(uint32_t, buf_2);
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
+ TUD_EPBUF_TYPE_DEF(uint32_t, buf_3);
+ #endif
+} fb_ep_buf;
+#endif
+
+// Aligned buffer for interrupt EP
+#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
+tu_static CFG_TUD_MEM_SECTION struct {
+ TUD_EPBUF_DEF(buf, CFG_TUD_AUDIO_INTERRUPT_EP_SZ);
+} int_ep_buf[CFG_TUD_AUDIO];
+#endif
+
typedef struct
{
uint8_t rhport;
- uint8_t const * p_desc; // Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function
+ uint8_t const *p_desc;// Pointer pointing to Standard AC Interface Descriptor(4.7.1) - Audio Control descriptor defining audio function
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- uint8_t ep_in; // TX audio data EP.
- uint16_t ep_in_sz; // Current size of TX EP
- uint8_t ep_in_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero)
+ uint8_t ep_in; // TX audio data EP.
+ uint16_t ep_in_sz; // Current size of TX EP
+ uint8_t ep_in_as_intf_num;// Corresponding Standard AS Interface Descriptor (4.9.1) belonging to output terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero)
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- uint8_t ep_out; // Incoming (into uC) audio data EP.
- uint16_t ep_out_sz; // Current size of RX EP
- uint8_t ep_out_as_intf_num; // Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero)
+ uint8_t ep_out; // Incoming (into uC) audio data EP.
+ uint16_t ep_out_sz; // Current size of RX EP
+ uint8_t ep_out_as_intf_num;// Corresponding Standard AS Interface Descriptor (4.9.1) belonging to input terminal to which this EP belongs - 0 is invalid (this fits to UAC2 specification since AS interfaces can not have interface number equal to zero)
-#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- uint8_t ep_fb; // Feedback EP.
-#endif
+ #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ uint8_t ep_fb;// Feedback EP.
+ #endif
#endif
#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
- uint8_t ep_int; // Audio control interrupt EP.
+ uint8_t ep_int;// Audio control interrupt EP.
#endif
- bool mounted; // Device opened
+ bool mounted;// Device opened
- uint16_t desc_length; // Length of audio function descriptor
+ uint16_t desc_length;// Length of audio function descriptor
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
struct {
- CFG_TUSB_MEM_ALIGN uint32_t send_buf;
- uint32_t value; // Feedback value for asynchronous mode (in 16.16 format).
- uint32_t min_value; // min value according to UAC2 FMT-2.0 section 2.3.1.1.
- uint32_t max_value; // max value according to UAC2 FMT-2.0 section 2.3.1.1.
+ uint32_t value; // Feedback value for asynchronous mode (in 16.16 format).
+ uint32_t min_value;// min value according to UAC2 FMT-2.0 section 2.3.1.1.
+ uint32_t max_value;// max value according to UAC2 FMT-2.0 section 2.3.1.1.
- uint8_t frame_shift; // bInterval-1 in unit of frame (FS), micro-frame (HS)
+ uint8_t frame_shift;// bInterval-1 in unit of frame (FS), micro-frame (HS)
uint8_t compute_method;
bool format_correction;
union {
- uint8_t power_of_2; // pre-computed power of 2 shift
- float float_const; // pre-computed float constant
+ uint8_t power_of_2;// pre-computed power of 2 shift
+ float float_const; // pre-computed float constant
struct {
uint32_t sample_freq;
uint32_t mclk_freq;
- }fixed;
+ } fixed;
struct {
- uint32_t nom_value; // In 16.16 format
- uint32_t fifo_lvl_avg; // In 16.16 format
- uint16_t fifo_lvl_thr; // fifo level threshold
- uint16_t rate_const[2]; // pre-computed feedback/fifo_depth rate
- }fifo_count;
- }compute;
+ uint32_t nom_value; // In 16.16 format
+ uint32_t fifo_lvl_avg; // In 16.16 format
+ uint16_t fifo_lvl_thr; // fifo level threshold
+ uint16_t rate_const[2];// pre-computed feedback/fifo_depth rate
+ } fifo_count;
+ } compute;
} feedback;
-#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+#endif// CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- // Decoding parameters - parameters are set when alternate AS interface is set by host
- // Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently.
+// Decoding parameters - parameters are set when alternate AS interface is set by host
+// Coding is currently only supported for EP. Software coding corresponding to AS interfaces without EPs are not supported currently.
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
audio_format_type_t format_type_rx;
uint8_t n_channels_rx;
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
audio_data_format_type_I_t format_type_I_rx;
uint8_t n_bytes_per_sample_rx;
uint8_t n_ff_used_rx;
-#endif
+ #endif
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
@@ -355,28 +383,28 @@ typedef struct
uint8_t interval_tx;
#endif
- // Encoding parameters - parameters are set when alternate AS interface is set by host
+// Encoding parameters - parameters are set when alternate AS interface is set by host
#if CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL)
audio_format_type_t format_type_tx;
uint8_t n_channels_tx;
uint8_t n_bytes_per_sample_tx;
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
audio_data_format_type_I_t format_type_I_tx;
uint8_t n_ff_used_tx;
-#endif
+ #endif
#endif
/*------------- From this point, data is not cleared by bus reset -------------*/
// Buffer for control requests
- uint8_t * ctrl_buf;
+ uint8_t *ctrl_buf;
uint8_t ctrl_buf_sz;
// Current active alternate settings
- uint8_t * alt_setting; // We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP!
+ uint8_t *alt_setting;// We need to save the current alternate setting this way, because it is possible that there are AS interfaces which do not have an EP!
- // EP Transfer buffers and FIFOs
+// EP Transfer buffers and FIFOs
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
tu_fifo_t ep_out_ff;
#endif
@@ -385,52 +413,50 @@ typedef struct
tu_fifo_t ep_in_ff;
#endif
- // Audio control interrupt buffer - no FIFO - 6 Bytes according to UAC 2 specification (p. 74)
-#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
- CFG_TUSB_MEM_ALIGN uint8_t ep_int_buf[6];
-#endif
-
- // Support FIFOs for software encoding and decoding
+// Support FIFOs for software encoding and decoding
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
- tu_fifo_t * rx_supp_ff;
+ tu_fifo_t *rx_supp_ff;
uint8_t n_rx_supp_ff;
uint16_t rx_supp_ff_sz_max;
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
uint8_t n_channels_per_ff_rx;
-#endif
+ #endif
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
- tu_fifo_t * tx_supp_ff;
+ tu_fifo_t *tx_supp_ff;
uint8_t n_tx_supp_ff;
uint16_t tx_supp_ff_sz_max;
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
uint8_t n_channels_per_ff_tx;
-#endif
+ #endif
#endif
- // Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used
+// Linear buffer in case target MCU is not capable of handling a ring buffer FIFO e.g. no hardware buffer is available or driver is would need to be changed dramatically OR the support FIFOs are used
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
- uint8_t * lin_buf_out;
-#define USE_LINEAR_BUFFER_RX 1
+ uint8_t *lin_buf_out;
+ #define USE_LINEAR_BUFFER_RX 1
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING)
- uint8_t * lin_buf_in;
-#define USE_LINEAR_BUFFER_TX 1
+ uint8_t *lin_buf_in;
+ #define USE_LINEAR_BUFFER_TX 1
#endif
+#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ uint32_t *fb_buf;
+#endif
} audiod_function_t;
#ifndef USE_LINEAR_BUFFER_TX
-#define USE_LINEAR_BUFFER_TX 0
+ #define USE_LINEAR_BUFFER_TX 0
#endif
#ifndef USE_LINEAR_BUFFER_RX
-#define USE_LINEAR_BUFFER_RX 0
+ #define USE_LINEAR_BUFFER_RX 0
#endif
-#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf)
+#define ITF_MEM_RESET_SIZE offsetof(audiod_function_t, ctrl_buf)
//--------------------------------------------------------------------+
// WEAK FUNCTION STUBS
@@ -480,7 +506,7 @@ TU_ATTR_WEAK void tud_audio_fb_done_cb(uint8_t func_id) {
(void) func_id;
}
-TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t* feedback_param) {
+TU_ATTR_WEAK void tud_audio_feedback_params_cb(uint8_t func_id, uint8_t alt_itf, audio_feedback_params_t *feedback_param) {
(void) func_id;
(void) alt_itf;
feedback_param->method = AUDIO_FEEDBACK_METHOD_DISABLED;
@@ -505,68 +531,68 @@ TU_ATTR_WEAK void tud_audio_int_done_cb(uint8_t rhport) {
#endif
// Invoked when audio set interface request received
-TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) {
+TU_ATTR_WEAK bool tud_audio_set_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
(void) p_request;
return true;
}
// Invoked when audio set interface request received which closes an EP
-TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request) {
+TU_ATTR_WEAK bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
(void) p_request;
return true;
}
// Invoked when audio class specific set request received for an EP
-TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) {
+TU_ATTR_WEAK bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *pBuff) {
(void) rhport;
(void) p_request;
(void) pBuff;
TU_LOG2(" No EP set request callback available!\r\n");
- return false; // In case no callback function is present or request can not be conducted we stall it
+ return false;// In case no callback function is present or request can not be conducted we stall it
}
// Invoked when audio class specific set request received for an interface
-TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) {
+TU_ATTR_WEAK bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *pBuff) {
(void) rhport;
(void) p_request;
(void) pBuff;
TU_LOG2(" No interface set request callback available!\r\n");
- return false; // In case no callback function is present or request can not be conducted we stall it
+ return false;// In case no callback function is present or request can not be conducted we stall it
}
// Invoked when audio class specific set request received for an entity
-TU_ATTR_WEAK bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff) {
+TU_ATTR_WEAK bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request, uint8_t *pBuff) {
(void) rhport;
(void) p_request;
(void) pBuff;
TU_LOG2(" No entity set request callback available!\r\n");
- return false; // In case no callback function is present or request can not be conducted we stall it
+ return false;// In case no callback function is present or request can not be conducted we stall it
}
// Invoked when audio class specific get request received for an EP
-TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request) {
+TU_ATTR_WEAK bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
(void) p_request;
TU_LOG2(" No EP get request callback available!\r\n");
- return false; // Stall
+ return false;// Stall
}
// Invoked when audio class specific get request received for an interface
-TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request) {
+TU_ATTR_WEAK bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
(void) p_request;
TU_LOG2(" No interface get request callback available!\r\n");
- return false; // Stall
+ return false;// Stall
}
// Invoked when audio class specific get request received for an entity
-TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request) {
+TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
(void) p_request;
TU_LOG2(" No entity get request callback available!\r\n");
- return false; // Stall
+ return false;// Stall
}
//--------------------------------------------------------------------+
@@ -575,54 +601,52 @@ TU_ATTR_WEAK bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_reque
tu_static CFG_TUD_MEM_SECTION audiod_function_t _audiod_fct[CFG_TUD_AUDIO];
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
-static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received);
+static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received);
#endif
#if CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_EP_OUT
-static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received);
+static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received);
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_IN
-static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t* audio);
+static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio);
#endif
#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN
-static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio);
+static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio);
#endif
-static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request);
-static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request);
+static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request);
+static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request);
static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int);
-static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int);
+static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, uint8_t const **pp_desc_int);
static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id);
static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id);
static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id);
-static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio);
+static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio);
#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING)
-static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf);
+static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, uint8_t const *p_desc_end, uint8_t const as_itf);
-static inline uint8_t tu_desc_subtype(void const* desc)
-{
- return ((uint8_t const*) desc)[2];
+static inline uint8_t tu_desc_subtype(void const *desc) {
+ return ((uint8_t const *) desc)[2];
}
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
-static bool audiod_calc_tx_packet_sz(audiod_function_t* audio);
-static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_size);
+static bool audiod_calc_tx_packet_sz(audiod_function_t *audio);
+static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_size);
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
-static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq);
-static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new);
+static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, uint32_t mclk_freq);
+static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new);
#endif
-bool tud_audio_n_mounted(uint8_t func_id)
-{
+bool tud_audio_n_mounted(uint8_t func_id) {
TU_VERIFY(func_id < CFG_TUD_AUDIO);
- audiod_function_t* audio = &_audiod_fct[func_id];
+ audiod_function_t *audio = &_audiod_fct[func_id];
return audio->mounted;
}
@@ -633,27 +657,23 @@ bool tud_audio_n_mounted(uint8_t func_id)
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
-uint16_t tud_audio_n_available(uint8_t func_id)
-{
+uint16_t tud_audio_n_available(uint8_t func_id) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
return tu_fifo_count(&_audiod_fct[func_id].ep_out_ff);
}
-uint16_t tud_audio_n_read(uint8_t func_id, void* buffer, uint16_t bufsize)
-{
+uint16_t tud_audio_n_read(uint8_t func_id, void *buffer, uint16_t bufsize) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
return tu_fifo_read_n(&_audiod_fct[func_id].ep_out_ff, buffer, bufsize);
}
-bool tud_audio_n_clear_ep_out_ff(uint8_t func_id)
-{
+bool tud_audio_n_clear_ep_out_ff(uint8_t func_id) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
return tu_fifo_clear(&_audiod_fct[func_id].ep_out_ff);
}
-tu_fifo_t* tud_audio_n_get_ep_out_ff(uint8_t func_id)
-{
- if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_out_ff;
+tu_fifo_t *tud_audio_n_get_ep_out_ff(uint8_t func_id) {
+ if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_out_ff;
return NULL;
}
@@ -661,27 +681,23 @@ tu_fifo_t* tud_audio_n_get_ep_out_ff(uint8_t func_id)
#if CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_EP_OUT
// Delete all content in the support RX FIFOs
-bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, uint8_t ff_idx)
-{
+bool tud_audio_n_clear_rx_support_ff(uint8_t func_id, uint8_t ff_idx) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff);
return tu_fifo_clear(&_audiod_fct[func_id].rx_supp_ff[ff_idx]);
}
-uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx)
-{
+uint16_t tud_audio_n_available_support_ff(uint8_t func_id, uint8_t ff_idx) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff);
return tu_fifo_count(&_audiod_fct[func_id].rx_supp_ff[ff_idx]);
}
-uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void* buffer, uint16_t bufsize)
-{
+uint16_t tud_audio_n_read_support_ff(uint8_t func_id, uint8_t ff_idx, void *buffer, uint16_t bufsize) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff);
return tu_fifo_read_n(&_audiod_fct[func_id].rx_supp_ff[ff_idx], buffer, bufsize);
}
-tu_fifo_t* tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx)
-{
- if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff) return &_audiod_fct[func_id].rx_supp_ff[ff_idx];
+tu_fifo_t *tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx) {
+ if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_rx_supp_ff) return &_audiod_fct[func_id].rx_supp_ff[ff_idx];
return NULL;
}
#endif
@@ -691,8 +707,7 @@ tu_fifo_t* tud_audio_n_get_rx_support_ff(uint8_t func_id, uint8_t ff_idx)
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
-static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received)
-{
+static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received) {
uint8_t idxItf = 0;
uint8_t const *dummy2;
uint8_t idx_audio_fct = 0;
@@ -703,10 +718,9 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
// Call a weak callback here - a possibility for user to get informed an audio packet was received and data gets now loaded into EP FIFO (or decoded into support RX software FIFO)
TU_VERIFY(tud_audio_rx_done_pre_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf]));
-#if CFG_TUD_AUDIO_ENABLE_DECODING
+ #if CFG_TUD_AUDIO_ENABLE_DECODING
- switch (audio->format_type_rx)
- {
+ switch (audio->format_type_rx) {
case AUDIO_FORMAT_TYPE_UNDEFINED:
// INDIVIDUAL DECODING PROCEDURE REQUIRED HERE!
TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n");
@@ -715,8 +729,7 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
case AUDIO_FORMAT_TYPE_I:
- switch (audio->format_type_I_rx)
- {
+ switch (audio->format_type_I_rx) {
case AUDIO_DATA_FORMAT_TYPE_I_PCM:
TU_VERIFY(audiod_decode_type_I_pcm(rhport, audio, n_bytes_received));
break;
@@ -729,37 +742,36 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
}
break;
- default:
- // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!
- TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n");
- TU_BREAKPOINT();
- break;
+ default:
+ // Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!
+ TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_RX not implemented!\r\n");
+ TU_BREAKPOINT();
+ break;
}
// Prepare for next transmission
TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false);
-#else
+ #else
-#if USE_LINEAR_BUFFER_RX
+ #if USE_LINEAR_BUFFER_RX
// Data currently is in linear buffer, copy into EP OUT FIFO
TU_VERIFY(tu_fifo_write_n(&audio->ep_out_ff, audio->lin_buf_out, n_bytes_received));
// Schedule for next receive
TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_out, audio->lin_buf_out, audio->ep_out_sz), false);
-#else
+ #else
// Data is already placed in EP FIFO, schedule for next receive
TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_out, &audio->ep_out_ff, audio->ep_out_sz), false);
-#endif
+ #endif
-#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT)
- {
+ #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) {
audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->ep_out_ff));
}
-#endif
+ #endif
-#endif
+ #endif
// Call a weak callback here - a possibility for user to get informed decoding was completed
TU_VERIFY(tud_audio_rx_done_post_read_cb(rhport, n_bytes_received, idx_audio_fct, audio->ep_out, audio->alt_setting[idxItf]));
@@ -767,7 +779,7 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
return true;
}
-#endif //CFG_TUD_AUDIO_ENABLE_EP_OUT
+#endif//CFG_TUD_AUDIO_ENABLE_EP_OUT
// The following functions are used in case CFG_TUD_AUDIO_ENABLE_DECODING != 0
#if CFG_TUD_AUDIO_ENABLE_DECODING && CFG_TUD_AUDIO_ENABLE_EP_OUT
@@ -775,49 +787,38 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
// Decoding according to 2.3.1.5 Audio Streams
// Helper function
-static inline void * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, void * dst, const void * dst_end, void * src, uint8_t const n_ff_used)
-{
+static inline void *audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesPerSample, void *dst, const void *dst_end, void *src, uint8_t const n_ff_used) {
// Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2)
- uint16_t * dst16 = dst;
- uint16_t * src16 = src;
- const uint16_t * dst_end16 = dst_end;
- uint32_t * dst32 = dst;
- uint32_t * src32 = src;
- const uint32_t * dst_end32 = dst_end;
-
- if (nBytesPerSample == 1)
- {
- while(dst16 < dst_end16)
- {
+ uint16_t *dst16 = dst;
+ uint16_t *src16 = src;
+ const uint16_t *dst_end16 = dst_end;
+ uint32_t *dst32 = dst;
+ uint32_t *src32 = src;
+ const uint32_t *dst_end32 = dst_end;
+
+ if (nBytesPerSample == 1) {
+ while (dst16 < dst_end16) {
*dst16++ = *src16++;
src16 += n_ff_used - 1;
}
return src16;
- }
- else if (nBytesPerSample == 2)
- {
- while(dst32 < dst_end32)
- {
+ } else if (nBytesPerSample == 2) {
+ while (dst32 < dst_end32) {
*dst32++ = *src32++;
src32 += n_ff_used - 1;
}
return src32;
- }
- else if (nBytesPerSample == 3)
- {
- while(dst16 < dst_end16)
- {
+ } else if (nBytesPerSample == 3) {
+ while (dst16 < dst_end16) {
*dst16++ = *src16++;
*dst16++ = *src16++;
*dst16++ = *src16++;
src16 += 3 * (n_ff_used - 1);
}
return src16;
- }
- else // nBytesPerSample == 4
+ } else// nBytesPerSample == 4
{
- while(dst32 < dst_end32)
- {
+ while (dst32 < dst_end32) {
*dst32++ = *src32++;
*dst32++ = *src32++;
src32 += 2 * (n_ff_used - 1);
@@ -826,36 +827,32 @@ static inline void * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nB
}
}
-static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received)
-{
+static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t *audio, uint16_t n_bytes_received) {
(void) rhport;
// Determine amount of samples
- uint8_t const n_ff_used = audio->n_ff_used_rx;
- uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used;
+ uint8_t const n_ff_used = audio->n_ff_used_rx;
+ uint16_t const nBytesPerFFToRead = n_bytes_received / n_ff_used;
uint8_t cnt_ff;
// Decode
- uint8_t * src;
- uint8_t * dst_end;
+ uint8_t *src;
+ uint8_t *dst_end;
tu_fifo_buffer_info_t info;
- for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++)
- {
+ for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) {
tu_fifo_get_write_info(&audio->rx_supp_ff[cnt_ff], &info);
- if (info.len_lin != 0)
- {
+ if (info.len_lin != 0) {
info.len_lin = tu_min16(nBytesPerFFToRead, info.len_lin);
- src = &audio->lin_buf_out[cnt_ff*audio->n_channels_per_ff_rx * audio->n_bytes_per_sample_rx];
+ src = &audio->lin_buf_out[cnt_ff * audio->n_channels_per_ff_rx * audio->n_bytes_per_sample_rx];
dst_end = info.ptr_lin + info.len_lin;
src = audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_lin, dst_end, src, n_ff_used);
// Handle wrapped part of FIFO
info.len_wrap = tu_min16(nBytesPerFFToRead - info.len_lin, info.len_wrap);
- if (info.len_wrap != 0)
- {
+ if (info.len_wrap != 0) {
dst_end = info.ptr_wrap + info.len_wrap;
audiod_interleaved_copy_bytes_fast_decode(audio->n_bytes_per_sample_rx, info.ptr_wrap, dst_end, src, n_ff_used);
}
@@ -866,16 +863,15 @@ static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, u
// Number of bytes should be a multiple of CFG_TUD_AUDIO_N_BYTES_PER_SAMPLE_RX * CFG_TUD_AUDIO_N_CHANNELS_RX but checking makes no sense - no way to correct it
// TU_VERIFY(cnt != n_bytes);
-#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- if(audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT)
- {
+ #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FIFO_COUNT) {
audiod_fb_fifo_count_update(audio, tu_fifo_count(&audio->rx_supp_ff[0]));
}
-#endif
+ #endif
return true;
}
-#endif //CFG_TUD_AUDIO_ENABLE_DECODING
+#endif//CFG_TUD_AUDIO_ENABLE_DECODING
//--------------------------------------------------------------------+
// WRITE API
@@ -894,21 +890,19 @@ static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, u
* \param[in] len: # of array elements to copy
* \return Number of bytes actually written
*/
-uint16_t tud_audio_n_write(uint8_t func_id, const void * data, uint16_t len)
-{
+uint16_t tud_audio_n_write(uint8_t func_id, const void *data, uint16_t len) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
return tu_fifo_write_n(&_audiod_fct[func_id].ep_in_ff, data, len);
}
-bool tud_audio_n_clear_ep_in_ff(uint8_t func_id) // Delete all content in the EP IN FIFO
+bool tud_audio_n_clear_ep_in_ff(uint8_t func_id)// Delete all content in the EP IN FIFO
{
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
return tu_fifo_clear(&_audiod_fct[func_id].ep_in_ff);
}
-tu_fifo_t* tud_audio_n_get_ep_in_ff(uint8_t func_id)
-{
- if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_in_ff;
+tu_fifo_t *tud_audio_n_get_ep_in_ff(uint8_t func_id) {
+ if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL) return &_audiod_fct[func_id].ep_in_ff;
return NULL;
}
@@ -916,36 +910,33 @@ tu_fifo_t* tud_audio_n_get_ep_in_ff(uint8_t func_id)
#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN
-uint16_t tud_audio_n_flush_tx_support_ff(uint8_t func_id) // Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit
+uint16_t tud_audio_n_flush_tx_support_ff(uint8_t func_id)// Force all content in the support TX FIFOs to be written into linear buffer and schedule a transmit
{
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
- audiod_function_t* audio = &_audiod_fct[func_id];
+ audiod_function_t *audio = &_audiod_fct[func_id];
uint16_t n_bytes_copied = tu_fifo_count(&audio->tx_supp_ff[0]);
TU_VERIFY(audiod_tx_done_cb(audio->rhport, audio));
n_bytes_copied -= tu_fifo_count(&audio->tx_supp_ff[0]);
- n_bytes_copied = n_bytes_copied*audio->tx_supp_ff[0].item_size;
+ n_bytes_copied = n_bytes_copied * audio->tx_supp_ff[0].item_size;
return n_bytes_copied;
}
-bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx)
-{
+bool tud_audio_n_clear_tx_support_ff(uint8_t func_id, uint8_t ff_idx) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff);
return tu_fifo_clear(&_audiod_fct[func_id].tx_supp_ff[ff_idx]);
}
-uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void * data, uint16_t len)
-{
+uint16_t tud_audio_n_write_support_ff(uint8_t func_id, uint8_t ff_idx, const void *data, uint16_t len) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff);
return tu_fifo_write_n(&_audiod_fct[func_id].tx_supp_ff[ff_idx], data, len);
}
-tu_fifo_t* tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx)
-{
- if(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff) return &_audiod_fct[func_id].tx_supp_ff[ff_idx];
+tu_fifo_t *tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx) {
+ if (func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL && ff_idx < _audiod_fct[func_id].n_tx_supp_ff) return &_audiod_fct[func_id].tx_supp_ff[ff_idx];
return NULL;
}
@@ -954,8 +945,7 @@ tu_fifo_t* tud_audio_n_get_tx_support_ff(uint8_t func_id, uint8_t ff_idx)
#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
// If no interrupt transmit is pending bytes get written into buffer and a transmit is scheduled - once transmit completed tud_audio_int_done_cb() is called in inform user
-bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data)
-{
+bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t *data) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
TU_VERIFY(_audiod_fct[func_id].ep_int != 0);
@@ -964,12 +954,10 @@ bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data)
TU_VERIFY(usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int));
// Check length
- if (tu_memcpy_s(_audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf), data, sizeof(audio_interrupt_data_t)) == 0)
- {
+ if (tu_memcpy_s(int_ep_buf[func_id].buf, sizeof(int_ep_buf[func_id].buf), data, sizeof(audio_interrupt_data_t)) == 0) {
// Schedule transmit
- TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, _audiod_fct[func_id].ep_int_buf, sizeof(_audiod_fct[func_id].ep_int_buf)), 0);
- } else
- {
+ TU_ASSERT(usbd_edpt_xfer(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int, int_ep_buf[func_id].buf, sizeof(int_ep_buf[func_id].buf)), 0);
+ } else {
// Release endpoint since we don't make any transfer
usbd_edpt_release(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_int);
}
@@ -983,8 +971,7 @@ bool tud_audio_int_n_write(uint8_t func_id, const audio_interrupt_data_t * data)
// n_bytes_copied - Informs caller how many bytes were loaded. In case n_bytes_copied = 0, a ZLP is scheduled to inform host no data is available for current frame.
#if CFG_TUD_AUDIO_ENABLE_EP_IN
-static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio)
-{
+static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t *audio) {
uint8_t idxItf;
uint8_t const *dummy2;
@@ -1002,9 +989,8 @@ static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio)
uint16_t n_bytes_tx;
// If support FIFOs are used, encode and schedule transmit
-#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN
- switch (audio->format_type_tx)
- {
+ #if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN
+ switch (audio->format_type_tx) {
case AUDIO_FORMAT_TYPE_UNDEFINED:
// INDIVIDUAL ENCODING PROCEDURE REQUIRED HERE!
TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT encoding not implemented!\r\n");
@@ -1014,8 +1000,7 @@ static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio)
case AUDIO_FORMAT_TYPE_I:
- switch (audio->format_type_I_tx)
- {
+ switch (audio->format_type_I_tx) {
case AUDIO_DATA_FORMAT_TYPE_I_PCM:
n_bytes_tx = audiod_encode_type_I_pcm(rhport, audio);
@@ -1030,33 +1015,33 @@ static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio)
}
break;
- default:
- // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!
- TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n");
- TU_BREAKPOINT();
- n_bytes_tx = 0;
- break;
+ default:
+ // Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!
+ TU_LOG2(" Desired CFG_TUD_AUDIO_FORMAT_TYPE_TX not implemented!\r\n");
+ TU_BREAKPOINT();
+ n_bytes_tx = 0;
+ break;
}
TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx));
-#else
- // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule
-#if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
+ #else
+ // No support FIFOs, if no linear buffer required schedule transmit, else put data into linear buffer and schedule
+ #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
// packet_sz_tx is based on total packet size, here we want size for each support buffer.
n_bytes_tx = audiod_tx_packet_size(audio->packet_sz_tx, tu_fifo_count(&audio->ep_in_ff), audio->ep_in_ff.depth, audio->ep_in_sz);
-#else
- n_bytes_tx = tu_min16(tu_fifo_count(&audio->ep_in_ff), audio->ep_in_sz); // Limit up to max packet size, more can not be done for ISO
-#endif
-#if USE_LINEAR_BUFFER_TX
+ #else
+ n_bytes_tx = tu_min16(tu_fifo_count(&audio->ep_in_ff), audio->ep_in_sz);// Limit up to max packet size, more can not be done for ISO
+ #endif
+ #if USE_LINEAR_BUFFER_TX
tu_fifo_read_n(&audio->ep_in_ff, audio->lin_buf_in, n_bytes_tx);
TU_VERIFY(usbd_edpt_xfer(rhport, audio->ep_in, audio->lin_buf_in, n_bytes_tx));
-#else
+ #else
// Send everything in ISO EP FIFO
TU_VERIFY(usbd_edpt_xfer_fifo(rhport, audio->ep_in, &audio->ep_in_ff, n_bytes_tx));
-#endif
+ #endif
-#endif
+ #endif
// Call a weak callback here - a possibility for user to get informed former TX was completed and how many bytes were loaded for the next frame
TU_VERIFY(tud_audio_tx_done_post_load_cb(rhport, n_bytes_tx, idx_audio_fct, audio->ep_in, audio->alt_setting[idxItf]));
@@ -1064,7 +1049,7 @@ static bool audiod_tx_done_cb(uint8_t rhport, audiod_function_t * audio)
return true;
}
-#endif //CFG_TUD_AUDIO_ENABLE_EP_IN
+#endif//CFG_TUD_AUDIO_ENABLE_EP_IN
#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_EP_IN
// Take samples from the support buffer and encode them into the IN EP software FIFO
@@ -1085,49 +1070,38 @@ range [-1, +1)
* */
// Helper function
-static inline void * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, void * src, const void * src_end, void * dst, uint8_t const n_ff_used)
-{
+static inline void *audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesPerSample, void *src, const void *src_end, void *dst, uint8_t const n_ff_used) {
// Due to one FIFO contains 2 channels, data always aligned to (nBytesPerSample * 2)
- uint16_t * dst16 = dst;
- uint16_t * src16 = src;
- const uint16_t * src_end16 = src_end;
- uint32_t * dst32 = dst;
- uint32_t * src32 = src;
- const uint32_t * src_end32 = src_end;
-
- if (nBytesPerSample == 1)
- {
- while(src16 < src_end16)
- {
+ uint16_t *dst16 = dst;
+ uint16_t *src16 = src;
+ const uint16_t *src_end16 = src_end;
+ uint32_t *dst32 = dst;
+ uint32_t *src32 = src;
+ const uint32_t *src_end32 = src_end;
+
+ if (nBytesPerSample == 1) {
+ while (src16 < src_end16) {
*dst16++ = *src16++;
dst16 += n_ff_used - 1;
}
return dst16;
- }
- else if (nBytesPerSample == 2)
- {
- while(src32 < src_end32)
- {
+ } else if (nBytesPerSample == 2) {
+ while (src32 < src_end32) {
*dst32++ = *src32++;
dst32 += n_ff_used - 1;
}
return dst32;
- }
- else if (nBytesPerSample == 3)
- {
- while(src16 < src_end16)
- {
+ } else if (nBytesPerSample == 3) {
+ while (src16 < src_end16) {
*dst16++ = *src16++;
*dst16++ = *src16++;
*dst16++ = *src16++;
dst16 += 3 * (n_ff_used - 1);
}
return dst16;
- }
- else // nBytesPerSample == 4
+ } else// nBytesPerSample == 4
{
- while(src32 < src_end32)
- {
+ while (src32 < src_end32) {
*dst32++ = *src32++;
*dst32++ = *src32++;
dst32 += 2 * (n_ff_used - 1);
@@ -1136,8 +1110,7 @@ static inline void * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nB
}
}
-static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio)
-{
+static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t *audio) {
// This function relies on the fact that the length of the support FIFOs was configured to be a multiple of the active sample size in bytes s.t. no sample is split within a wrap
// This is ensured within set_interface, where the FIFOs are reconfigured according to this size
@@ -1145,62 +1118,57 @@ static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audi
TU_VERIFY(!usbd_edpt_busy(rhport, audio->ep_in));
// Determine amount of samples
- uint8_t const n_ff_used = audio->n_ff_used_tx;
- uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]);
+ uint8_t const n_ff_used = audio->n_ff_used_tx;
+ uint16_t nBytesPerFFToSend = tu_fifo_count(&audio->tx_supp_ff[0]);
uint8_t cnt_ff;
- for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++)
- {
+ for (cnt_ff = 1; cnt_ff < n_ff_used; cnt_ff++) {
uint16_t const count = tu_fifo_count(&audio->tx_supp_ff[cnt_ff]);
- if (count < nBytesPerFFToSend)
- {
+ if (count < nBytesPerFFToSend) {
nBytesPerFFToSend = count;
}
}
-#if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
+ #if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
const uint16_t norm_packet_sz_tx[3] = {audio->packet_sz_tx[0] / n_ff_used,
audio->packet_sz_tx[1] / n_ff_used,
audio->packet_sz_tx[2] / n_ff_used};
// packet_sz_tx is based on total packet size, here we want size for each support buffer.
nBytesPerFFToSend = audiod_tx_packet_size(norm_packet_sz_tx, nBytesPerFFToSend, audio->tx_supp_ff[0].depth, audio->ep_in_sz / n_ff_used);
// Check if there is enough data
- if (nBytesPerFFToSend == 0) return 0;
-#else
+ if (nBytesPerFFToSend == 0) return 0;
+ #else
// Check if there is enough data
- if (nBytesPerFFToSend == 0) return 0;
+ if (nBytesPerFFToSend == 0) return 0;
// Limit to maximum sample number - THIS IS A POSSIBLE ERROR SOURCE IF TOO MANY SAMPLE WOULD NEED TO BE SENT BUT CAN NOT!
nBytesPerFFToSend = tu_min16(nBytesPerFFToSend, audio->ep_in_sz / n_ff_used);
// Round to full number of samples (flooring)
uint16_t const nSlotSize = audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx;
nBytesPerFFToSend = (nBytesPerFFToSend / nSlotSize) * nSlotSize;
-#endif
+ #endif
// Encode
- uint8_t * dst;
- uint8_t * src_end;
+ uint8_t *dst;
+ uint8_t *src_end;
tu_fifo_buffer_info_t info;
- for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++)
- {
- dst = &audio->lin_buf_in[cnt_ff*audio->n_channels_per_ff_tx*audio->n_bytes_per_sample_tx];
+ for (cnt_ff = 0; cnt_ff < n_ff_used; cnt_ff++) {
+ dst = &audio->lin_buf_in[cnt_ff * audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx];
tu_fifo_get_read_info(&audio->tx_supp_ff[cnt_ff], &info);
- if (info.len_lin != 0)
- {
- info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin); // Limit up to desired length
- src_end = (uint8_t *)info.ptr_lin + info.len_lin;
+ if (info.len_lin != 0) {
+ info.len_lin = tu_min16(nBytesPerFFToSend, info.len_lin);// Limit up to desired length
+ src_end = (uint8_t *) info.ptr_lin + info.len_lin;
dst = audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_lin, src_end, dst, n_ff_used);
// Limit up to desired length
info.len_wrap = tu_min16(nBytesPerFFToSend - info.len_lin, info.len_wrap);
// Handle wrapped part of FIFO
- if (info.len_wrap != 0)
- {
- src_end = (uint8_t *)info.ptr_wrap + info.len_wrap;
+ if (info.len_wrap != 0) {
+ src_end = (uint8_t *) info.ptr_wrap + info.len_wrap;
audiod_interleaved_copy_bytes_fast_encode(audio->n_bytes_per_sample_tx, info.ptr_wrap, src_end, dst, n_ff_used);
}
@@ -1210,27 +1178,24 @@ static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audi
return nBytesPerFFToSend * n_ff_used;
}
-#endif //CFG_TUD_AUDIO_ENABLE_ENCODING
+#endif//CFG_TUD_AUDIO_ENABLE_ENCODING
// This function is called once a transmit of a feedback packet was successfully completed. Here, we get the next feedback value to be sent
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
-static inline bool audiod_fb_send(audiod_function_t *audio)
-{
+static inline bool audiod_fb_send(audiod_function_t *audio) {
bool apply_correction = (TUSB_SPEED_FULL == tud_speed_get()) && audio->feedback.format_correction;
// Format the feedback value
- if (apply_correction)
- {
- uint8_t * fb = (uint8_t *) &audio->feedback.send_buf;
+ if (apply_correction) {
+ uint8_t *fb = (uint8_t *) audio->fb_buf;
// For FS format is 10.14
*(fb++) = (audio->feedback.value >> 2) & 0xFF;
*(fb++) = (audio->feedback.value >> 10) & 0xFF;
*(fb++) = (audio->feedback.value >> 18) & 0xFF;
*fb = 0;
- } else
- {
- audio->feedback.send_buf = audio->feedback.value;
+ } else {
+ *audio->fb_buf = audio->feedback.value;
}
// About feedback format on FS
@@ -1246,24 +1211,21 @@ static inline bool audiod_fb_send(audiod_function_t *audio)
// 10.14 3 3 Linux, OSX
//
// We send 3 bytes since sending packet larger than wMaxPacketSize is pretty ugly
- return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *) &audio->feedback.send_buf, apply_correction ? 3 : 4);
+ return usbd_edpt_xfer(audio->rhport, audio->ep_fb, (uint8_t *) audio->fb_buf, apply_correction ? 3 : 4);
}
#endif
//--------------------------------------------------------------------+
// USBD Driver API
//--------------------------------------------------------------------+
-void audiod_init(void)
-{
+void audiod_init(void) {
tu_memclr(_audiod_fct, sizeof(_audiod_fct));
- for(uint8_t i=0; ictrl_buf = ctrl_buf_1;
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ;
@@ -1283,8 +1245,7 @@ void audiod_init(void)
}
// Initialize active alternate interface buffers
- switch (i)
- {
+ switch (i) {
#if CFG_TUD_AUDIO_FUNC_1_N_AS_INT > 0
case 0:
audio->alt_setting = alt_setting_1;
@@ -1302,281 +1263,285 @@ void audiod_init(void)
#endif
}
- // Initialize IN EP FIFO if required
+ // Initialize IN EP FIFO if required
#if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
case 0:
- tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_in_ff, ep_in_sw_buf.buf_1, CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_1), NULL);
-#endif
+ #endif
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
case 1:
- tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_in_ff, ep_in_sw_buf.buf_2, CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_2), NULL);
-#endif
+ #endif
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
case 2:
- tu_fifo_config(&audio->ep_in_ff, audio_ep_in_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_in_ff, ep_in_sw_buf.buf_3, CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_in_ff, osal_mutex_create(&ep_in_ff_mutex_wr_3), NULL);
-#endif
+ #endif
break;
-#endif
+ #endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
- // Initialize linear buffers
+ // Initialize linear buffers
#if USE_LINEAR_BUFFER_TX
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0
case 0:
- audio->lin_buf_in = lin_buf_in_1;
+ audio->lin_buf_in = lin_buf_in.buf_1;
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0
case 1:
- audio->lin_buf_in = lin_buf_in_2;
+ audio->lin_buf_in = lin_buf_in.buf_2;
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0
case 2:
- audio->lin_buf_in = lin_buf_in_3;
+ audio->lin_buf_in = lin_buf_in.buf_3;
break;
-#endif
+ #endif
}
-#endif // USE_LINEAR_BUFFER_TX
+#endif// USE_LINEAR_BUFFER_TX
- // Initialize OUT EP FIFO if required
+ // Initialize OUT EP FIFO if required
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
case 0:
- tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_out_ff, ep_out_sw_buf.buf_1, CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_1));
-#endif
+ #endif
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
case 1:
- tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_out_ff, ep_out_sw_buf.buf_2, CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_2));
-#endif
+ #endif
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
case 2:
- tu_fifo_config(&audio->ep_out_ff, audio_ep_out_sw_buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ tu_fifo_config(&audio->ep_out_ff, ep_out_sw_buf.buf_3, CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ, 1, true);
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&audio->ep_out_ff, NULL, osal_mutex_create(&ep_out_ff_mutex_rd_3));
-#endif
+ #endif
break;
-#endif
+ #endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
- // Initialize linear buffers
+ // Initialize linear buffers
#if USE_LINEAR_BUFFER_RX
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
case 0:
- audio->lin_buf_out = lin_buf_out_1;
+ audio->lin_buf_out = lin_buf_out.buf_1;
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
case 1:
- audio->lin_buf_out = lin_buf_out_2;
+ audio->lin_buf_out = lin_buf_out.buf_2;
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
case 2:
- audio->lin_buf_out = lin_buf_out_3;
+ audio->lin_buf_out = lin_buf_out.buf_3;
break;
-#endif
+ #endif
+ }
+#endif// USE_LINEAR_BUFFER_RX
+
+#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
+ case 0:
+ audio->fb_buf = &fb_ep_buf.buf_1;
+ break;
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
+ case 1:
+ audio->fb_buf = &fb_ep_buf.buf_2;
+ break;
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
+ case 2:
+ audio->fb_buf = &fb_ep_buf.buf_3;
+ break;
+ #endif
}
-#endif // USE_LINEAR_BUFFER_TX
+#endif// CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- // Initialize TX support FIFOs if required
+ // Initialize TX support FIFOs if required
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
case 0:
audio->tx_supp_ff = tx_supp_ff_1;
audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO;
audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&tx_supp_ff_1[cnt], tx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&tx_supp_ff_1[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_1[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
case 1:
audio->tx_supp_ff = tx_supp_ff_2;
audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO;
audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&tx_supp_ff_2[cnt], tx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&tx_supp_ff_2[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_2[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
case 2:
audio->tx_supp_ff = tx_supp_ff_3;
audio->n_tx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO;
audio->tx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&tx_supp_ff_3[cnt], tx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&tx_supp_ff_3[cnt], osal_mutex_create(&tx_supp_ff_mutex_wr_3[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
- // Set encoding parameters for Type_I formats
+ // Set encoding parameters for Type_I formats
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
case 0:
audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX;
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
case 1:
audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_TX;
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
case 2:
audio->n_channels_per_ff_tx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_TX;
break;
-#endif
+ #endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
+#endif// CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
- // Initialize RX support FIFOs if required
+ // Initialize RX support FIFOs if required
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
case 0:
audio->rx_supp_ff = rx_supp_ff_1;
audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO;
audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&rx_supp_ff_1[cnt], rx_supp_ff_buf_1[cnt], CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&rx_supp_ff_1[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_1[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
case 1:
audio->rx_supp_ff = rx_supp_ff_2;
audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO;
audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&rx_supp_ff_2[cnt], rx_supp_ff_buf_2[cnt], CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&rx_supp_ff_2[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_2[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
case 2:
audio->rx_supp_ff = rx_supp_ff_3;
audio->n_rx_supp_ff = CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO;
audio->rx_supp_ff_sz_max = CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ;
- for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO; cnt++) {
tu_fifo_config(&rx_supp_ff_3[cnt], rx_supp_ff_buf_3[cnt], CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ, 1, true);
-#if CFG_FIFO_MUTEX
+ #if CFG_FIFO_MUTEX
tu_fifo_config_mutex(&rx_supp_ff_3[cnt], osal_mutex_create(&rx_supp_ff_mutex_rd_3[cnt]), NULL);
-#endif
+ #endif
}
break;
-#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
+ #endif// CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
- // Set encoding parameters for Type_I formats
+ // Set encoding parameters for Type_I formats
#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
- switch (i)
- {
-#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
+ switch (i) {
+ #if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
case 0:
audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_RX;
break;
-#endif
-#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
case 1:
audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_2_CHANNEL_PER_FIFO_RX;
break;
-#endif
-#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
+ #endif
+ #if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
case 2:
audio->n_channels_per_ff_rx = CFG_TUD_AUDIO_FUNC_3_CHANNEL_PER_FIFO_RX;
break;
-#endif
+ #endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
+#endif// CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
}
}
bool audiod_deinit(void) {
- return false; // TODO not implemented yet
+ return false;// TODO not implemented yet
}
-void audiod_reset(uint8_t rhport)
-{
+void audiod_reset(uint8_t rhport) {
(void) rhport;
- for(uint8_t i=0; in_tx_supp_ff; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) {
tu_fifo_clear(&audio->tx_supp_ff[cnt]);
}
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
- for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) {
tu_fifo_clear(&audio->rx_supp_ff[cnt]);
}
#endif
}
}
-uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len)
-{
+uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) {
(void) max_len;
- TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass &&
- AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass);
+ TU_VERIFY(TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass &&
+ AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass);
// Verify version is correct - this check can be omitted
TU_VERIFY(itf_desc->bInterfaceProtocol == AUDIO_INT_PROTOCOL_CODE_V2);
// Verify interrupt control EP is enabled if demanded by descriptor
- TU_ASSERT(itf_desc->bNumEndpoints <= 1); // 0 or 1 EPs are allowed
- if (itf_desc->bNumEndpoints == 1)
- {
+ TU_ASSERT(itf_desc->bNumEndpoints <= 1);// 0 or 1 EPs are allowed
+ if (itf_desc->bNumEndpoints == 1) {
TU_ASSERT(CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP);
}
@@ -1625,16 +1586,13 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
// Find available audio driver interface
uint8_t i;
- for (i = 0; i < CFG_TUD_AUDIO; i++)
- {
- if (!_audiod_fct[i].p_desc)
- {
- _audiod_fct[i].p_desc = (uint8_t const *)itf_desc; // Save pointer to AC descriptor which is by specification always the first one
+ for (i = 0; i < CFG_TUD_AUDIO; i++) {
+ if (!_audiod_fct[i].p_desc) {
+ _audiod_fct[i].p_desc = (uint8_t const *) itf_desc;// Save pointer to AC descriptor which is by specification always the first one
_audiod_fct[i].rhport = rhport;
// Setup descriptor lengths
- switch (i)
- {
+ switch (i) {
case 0:
_audiod_fct[i].desc_length = CFG_TUD_AUDIO_FUNC_1_DESC_LEN;
break;
@@ -1653,12 +1611,12 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
#ifdef TUP_DCD_EDPT_ISO_ALLOC
{
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- uint8_t ep_in = 0;
+ uint8_t ep_in = 0;
uint16_t ep_in_size = 0;
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- uint8_t ep_out = 0;
+ uint8_t ep_out = 0;
uint16_t ep_out_size = 0;
#endif
@@ -1668,38 +1626,30 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
uint8_t const *p_desc = _audiod_fct[i].p_desc;
uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
- if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT)
- {
+ while (p_desc_end - p_desc > 0) {
+ if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) {
tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc;
- if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS)
- {
+ if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) {
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
// Explicit feedback EP
- if (desc_ep->bmAttributes.usage == 1)
- {
+ if (desc_ep->bmAttributes.usage == 1) {
ep_fb = desc_ep->bEndpointAddress;
}
#endif
// Data EP
- if (desc_ep->bmAttributes.usage == 0)
- {
- if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN)
- {
+ if (desc_ep->bmAttributes.usage == 0) {
+ if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) {
#if CFG_TUD_AUDIO_ENABLE_EP_IN
ep_in = desc_ep->bEndpointAddress;
ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size);
#endif
- } else
- {
+ } else {
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
ep_out = desc_ep->bEndpointAddress;
ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size);
#endif
}
}
-
}
}
@@ -1707,76 +1657,62 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
}
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- if (ep_in)
- {
+ if (ep_in) {
usbd_edpt_iso_alloc(rhport, ep_in, ep_in_size);
}
#endif
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- if (ep_out)
- {
+ if (ep_out) {
usbd_edpt_iso_alloc(rhport, ep_out, ep_out_size);
}
#endif
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- if (ep_fb)
- {
+ if (ep_fb) {
usbd_edpt_iso_alloc(rhport, ep_fb, 4);
}
#endif
}
-#endif // TUP_DCD_EDPT_ISO_ALLOC
+#endif// TUP_DCD_EDPT_ISO_ALLOC
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
{
uint8_t const *p_desc = _audiod_fct[i].p_desc;
uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
- if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT)
- {
+ while (p_desc_end - p_desc > 0) {
+ if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) {
tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc;
- if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS)
- {
- if (desc_ep->bmAttributes.usage == 0)
- {
- if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN)
- {
+ if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) {
+ if (desc_ep->bmAttributes.usage == 0) {
+ if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) {
_audiod_fct[i].interval_tx = desc_ep->bInterval;
}
}
}
- } else
- if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL)
- {
- if(tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING)
- {
- _audiod_fct[i].bclock_id_tx = p_desc[8];
+ } else if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) {
+ if (tu_unaligned_read16(p_desc + 4) == AUDIO_TERM_TYPE_USB_STREAMING) {
+ _audiod_fct[i].bclock_id_tx = p_desc[8];
}
}
p_desc = tu_desc_next(p_desc);
}
}
-#endif // CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
+#endif// CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
{
uint8_t const *p_desc = _audiod_fct[i].p_desc;
uint8_t const *p_desc_end = p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
+ while (p_desc_end - p_desc > 0) {
// For each endpoint
- if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT)
- {
- tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc;
+ if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) {
+ tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc;
uint8_t const ep_addr = desc_ep->bEndpointAddress;
// If endpoint is input-direction and interrupt-type
- if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT)
- {
+ if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.xfer == TUSB_XFER_INTERRUPT) {
// Store endpoint number and open endpoint
_audiod_fct[i].ep_int = ep_addr;
TU_ASSERT(usbd_edpt_open(_audiod_fct[i].rhport, desc_ep));
@@ -1793,16 +1729,15 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
}
// Verify we found a free one
- TU_ASSERT( i < CFG_TUD_AUDIO );
+ TU_ASSERT(i < CFG_TUD_AUDIO);
// This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification)
- uint16_t drv_len = _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor
+ uint16_t drv_len = _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN;// - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor
return drv_len;
}
-static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request)
-{
+static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *p_request) {
uint8_t const itf = tu_u16_low(p_request->wIndex);
// Find index of audio streaming interface
@@ -1810,16 +1745,14 @@ static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *
uint8_t const *dummy;
TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &dummy));
- _audiod_fct[func_id].ctrl_buf[0] = _audiod_fct[func_id].alt_setting[idxItf];
- TU_VERIFY(tud_control_xfer(rhport, p_request, _audiod_fct[func_id].ctrl_buf, 1));
+ TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_fct[func_id].alt_setting[idxItf], 1));
TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_fct[func_id].alt_setting[idxItf]);
return true;
}
-static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * p_request)
-{
+static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
// Here we need to do the following:
@@ -1843,12 +1776,11 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
uint8_t const *p_desc;
TU_VERIFY(audiod_get_AS_interface_index_global(itf, &func_id, &idxItf, &p_desc));
- audiod_function_t* audio = &_audiod_fct[func_id];
+ audiod_function_t *audio = &_audiod_fct[func_id];
- // Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open)
+// Look if there is an EP to be closed - for this driver, there are only 3 possible EPs which may be closed (only AS related EPs can be closed, AC EP (if present) is always open)
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- if (audio->ep_in_as_intf_num == itf)
- {
+ if (audio->ep_in_as_intf_num == itf) {
audio->ep_in_as_intf_num = 0;
#ifndef TUP_DCD_EDPT_ISO_ALLOC
usbd_edpt_close(rhport, audio->ep_in);
@@ -1858,8 +1790,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if !CFG_TUD_AUDIO_ENABLE_ENCODING
tu_fifo_clear(&audio->ep_in_ff);
#else
- for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) {
tu_fifo_clear(&audio->tx_supp_ff[cnt]);
}
#endif
@@ -1867,7 +1798,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// Invoke callback - can be used to stop data sampling
TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request));
- audio->ep_in = 0; // Necessary?
+ audio->ep_in = 0;// Necessary?
#if CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
audio->packet_sz_tx[0] = 0;
@@ -1875,11 +1806,10 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
audio->packet_sz_tx[2] = 0;
#endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- if (audio->ep_out_as_intf_num == itf)
- {
+ if (audio->ep_out_as_intf_num == itf) {
audio->ep_out_as_intf_num = 0;
#ifndef TUP_DCD_EDPT_ISO_ALLOC
usbd_edpt_close(rhport, audio->ep_out);
@@ -1889,8 +1819,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if !CFG_TUD_AUDIO_ENABLE_DECODING
tu_fifo_clear(&audio->ep_out_ff);
#else
- for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) {
tu_fifo_clear(&audio->rx_supp_ff[cnt]);
}
#endif
@@ -1898,7 +1827,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// Invoke callback - can be used to stop data sampling
TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request));
- audio->ep_out = 0; // Necessary?
+ audio->ep_out = 0;// Necessary?
// Close corresponding feedback EP
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
@@ -1909,7 +1838,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
tu_memclr(&audio->feedback, sizeof(audio->feedback));
#endif
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT
// Save current alternative interface setting
audio->alt_setting[idxItf] = alt;
@@ -1920,22 +1849,18 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// p_desc starts at required interface with alternate setting zero
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
+ while (p_desc_end - p_desc > 0) {
// Find correct interface
- if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == alt)
- {
+ if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *) p_desc)->bInterfaceNumber == itf && ((tusb_desc_interface_t const *) p_desc)->bAlternateSetting == alt) {
#if (CFG_TUD_AUDIO_ENABLE_EP_IN && (CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_ENCODING)) || (CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING)
- uint8_t const * p_desc_parse_for_params = p_desc;
+ uint8_t const *p_desc_parse_for_params = p_desc;
#endif
// From this point forward follow the EP descriptors associated to the current alternate setting interface - Open EPs if necessary
- uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const * )p_desc)->bNumEndpoints;
+ uint8_t foundEPs = 0, nEps = ((tusb_desc_interface_t const *) p_desc)->bNumEndpoints;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (foundEPs < nEps && (p_desc_end - p_desc > 0))
- {
- if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT)
- {
- tusb_desc_endpoint_t const* desc_ep = (tusb_desc_endpoint_t const *) p_desc;
+ while (foundEPs < nEps && (p_desc_end - p_desc > 0)) {
+ if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) {
+ tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc;
#ifdef TUP_DCD_EDPT_ISO_ALLOC
TU_ASSERT(usbd_edpt_iso_activate(rhport, desc_ep));
#else
@@ -1947,7 +1872,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
usbd_edpt_clear_stall(rhport, ep_addr);
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 0x00) // Check if usage is data EP
+ if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 0x00)// Check if usage is data EP
{
// Save address
audio->ep_in = ep_addr;
@@ -1958,16 +1883,14 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if CFG_TUD_AUDIO_ENABLE_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf);
- // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap
+ // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap
#if CFG_TUD_AUDIO_ENABLE_ENCODING && CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
- const uint16_t active_fifo_depth = (uint16_t) ((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx))
- * (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx));
- for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++)
- {
+ const uint16_t active_fifo_depth = (uint16_t) ((audio->tx_supp_ff_sz_max / (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx)) * (audio->n_channels_per_ff_tx * audio->n_bytes_per_sample_tx));
+ for (uint8_t cnt = 0; cnt < audio->n_tx_supp_ff; cnt++) {
tu_fifo_config(&audio->tx_supp_ff[cnt], audio->tx_supp_ff[cnt].buffer, active_fifo_depth, 1, true);
}
audio->n_ff_used_tx = audio->n_channels_tx / audio->n_channels_per_ff_tx;
- TU_ASSERT( audio->n_ff_used_tx <= audio->n_tx_supp_ff );
+ TU_ASSERT(audio->n_ff_used_tx <= audio->n_tx_supp_ff);
#endif
#endif
@@ -1975,11 +1898,11 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// It is necessary to trigger this here since the refill is done with an RX FIFO empty interrupt which can only trigger if something was in there
TU_VERIFY(audiod_tx_done_cb(rhport, &_audiod_fct[func_id]));
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_IN
+#endif// CFG_TUD_AUDIO_ENABLE_EP_IN
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT) // Checking usage not necessary
+ if (tu_edpt_dir(ep_addr) == TUSB_DIR_OUT)// Checking usage not necessary
{
// Save address
audio->ep_out = ep_addr;
@@ -1989,15 +1912,14 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if CFG_TUD_AUDIO_ENABLE_DECODING
audiod_parse_for_AS_params(audio, p_desc_parse_for_params, p_desc_end, itf);
- // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap
+ // Reconfigure size of support FIFOs - this is necessary to avoid samples to get split in case of a wrap
#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
const uint16_t active_fifo_depth = (audio->rx_supp_ff_sz_max / audio->n_bytes_per_sample_rx) * audio->n_bytes_per_sample_rx;
- for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++)
- {
+ for (uint8_t cnt = 0; cnt < audio->n_rx_supp_ff; cnt++) {
tu_fifo_config(&audio->rx_supp_ff[cnt], audio->rx_supp_ff[cnt].buffer, active_fifo_depth, 1, true);
}
audio->n_ff_used_rx = audio->n_channels_rx / audio->n_channels_per_ff_rx;
- TU_ASSERT( audio->n_ff_used_rx <= audio->n_rx_supp_ff );
+ TU_ASSERT(audio->n_ff_used_rx <= audio->n_rx_supp_ff);
#endif
#endif
@@ -2010,13 +1932,13 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
}
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
- if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 1) // Check if usage is explicit data feedback
+ if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 1)// Check if usage is explicit data feedback
{
audio->ep_fb = ep_addr;
- audio->feedback.frame_shift = desc_ep->bInterval -1;
+ audio->feedback.frame_shift = desc_ep->bInterval - 1;
}
#endif
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT
foundEPs += 1;
}
@@ -2030,58 +1952,55 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
// Prepare feedback computation if endpoint is available
- if(audio->ep_fb != 0)
- {
+ if (audio->ep_fb != 0) {
audio_feedback_params_t fb_param;
tud_audio_feedback_params_cb(func_id, alt, &fb_param);
audio->feedback.compute_method = fb_param.method;
- if(TUSB_SPEED_FULL == tud_speed_get())
+ if (TUSB_SPEED_FULL == tud_speed_get())
audio->feedback.format_correction = tud_audio_feedback_format_correction_cb(func_id);
// Minimal/Maximum value in 16.16 format for full speed (1ms per frame) or high speed (125 us per frame)
- uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000;
- audio->feedback.min_value = ((fb_param.sample_freq - 1)/frame_div) << 16;
- audio->feedback.max_value = (fb_param.sample_freq/frame_div + 1) << 16;
+ uint32_t const frame_div = (TUSB_SPEED_FULL == tud_speed_get()) ? 1000 : 8000;
+ audio->feedback.min_value = ((fb_param.sample_freq - 1) / frame_div) << 16;
+ audio->feedback.max_value = (fb_param.sample_freq / frame_div + 1) << 16;
- switch(fb_param.method)
- {
+ switch (fb_param.method) {
case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED:
case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT:
case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2:
audiod_set_fb_params_freq(audio, fb_param.sample_freq, fb_param.frequency.mclk_freq);
- break;
+ break;
- case AUDIO_FEEDBACK_METHOD_FIFO_COUNT:
- {
+ case AUDIO_FEEDBACK_METHOD_FIFO_COUNT: {
// Initialize the threshold level to half filled
uint16_t fifo_lvl_thr;
-#if CFG_TUD_AUDIO_ENABLE_DECODING
+ #if CFG_TUD_AUDIO_ENABLE_DECODING
fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2;
-#else
+ #else
fifo_lvl_thr = tu_fifo_depth(&audio->ep_out_ff) / 2;
-#endif
+ #endif
audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr;
- audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) << 16;
+ audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t) fifo_lvl_thr) << 16;
// Avoid 64bit division
uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100);
audio->feedback.compute.fifo_count.nom_value = nominal;
audio->feedback.compute.fifo_count.rate_const[0] = (uint16_t) ((audio->feedback.max_value - nominal) / fifo_lvl_thr);
audio->feedback.compute.fifo_count.rate_const[1] = (uint16_t) ((nominal - audio->feedback.min_value) / fifo_lvl_thr);
// On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability
- if(tud_speed_get() == TUSB_SPEED_HIGH) {
+ if (tud_speed_get() == TUSB_SPEED_HIGH) {
audio->feedback.compute.fifo_count.rate_const[0] /= 8;
audio->feedback.compute.fifo_count.rate_const[1] /= 8;
}
- }
- break;
+ } break;
// nothing to do
- default: break;
+ default:
+ break;
}
}
-#endif // CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+#endif// CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
// We are done - abort loop
break;
@@ -2094,13 +2013,11 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
// Disable SOF interrupt if no driver has any enabled feedback EP
bool enable_sof = false;
- for(uint8_t i=0; i < CFG_TUD_AUDIO; i++)
- {
+ for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) {
if (_audiod_fct[i].ep_fb != 0 &&
- (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED ||
- _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT ||
- _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2 ))
- {
+ (_audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED ||
+ _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT ||
+ _audiod_fct[i].feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2)) {
enable_sof = true;
break;
}
@@ -2119,22 +2036,17 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// Invoked when class request DATA stage is finished.
// return false to stall control EP (e.g Host send non-sense DATA)
-static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const * p_request)
-{
+static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const *p_request) {
// Handle audio class specific set requests
- if(p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.direction == TUSB_DIR_OUT)
- {
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) {
uint8_t func_id;
- switch (p_request->bmRequestType_bit.recipient)
- {
- case TUSB_REQ_RCPT_INTERFACE:
- {
+ switch (p_request->bmRequestType_bit.recipient) {
+ case TUSB_REQ_RCPT_INTERFACE: {
uint8_t itf = TU_U16_LOW(p_request->wIndex);
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
- if (entityID != 0)
- {
+ if (entityID != 0) {
// Check if entity is present and get corresponding driver index
TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id));
@@ -2147,20 +2059,16 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
// Invoke callback
return tud_audio_set_req_entity_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf);
- }
- else
- {
+ } else {
// Find index of audio driver structure and verify interface really exists
TU_VERIFY(audiod_verify_itf_exists(itf, &func_id));
// Invoke callback
return tud_audio_set_req_itf_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf);
}
- }
- break;
+ } break;
- case TUSB_REQ_RCPT_ENDPOINT:
- {
+ case TUSB_REQ_RCPT_ENDPOINT: {
uint8_t ep = TU_U16_LOW(p_request->wIndex);
// Check if entity is present and get corresponding driver index
@@ -2168,10 +2076,11 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
// Invoke callback
return tud_audio_set_req_ep_cb(rhport, p_request, _audiod_fct[func_id].ctrl_buf);
- }
- break;
+ } break;
// Unknown/Unsupported recipient
- default: TU_BREAKPOINT(); return false;
+ default:
+ TU_BREAKPOINT();
+ return false;
}
}
return true;
@@ -2179,15 +2088,12 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
// Handle class control request
// return false to stall control endpoint (e.g unsupported request)
-static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const * p_request)
-{
+static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const *p_request) {
(void) rhport;
// Handle standard requests - standard set requests usually have no data stage so we also handle set requests here
- if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD)
- {
- switch (p_request->bRequest)
- {
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) {
+ switch (p_request->bRequest) {
case TUSB_REQ_GET_INTERFACE:
return audiod_get_interface(rhport, p_request);
@@ -2198,66 +2104,59 @@ static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const
return true;
// Unknown/Unsupported request
- default: TU_BREAKPOINT(); return false;
+ default:
+ TU_BREAKPOINT();
+ return false;
}
}
// Handle class requests
- if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS)
- {
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS) {
uint8_t itf = TU_U16_LOW(p_request->wIndex);
uint8_t func_id;
// Conduct checks which depend on the recipient
- switch (p_request->bmRequestType_bit.recipient)
- {
- case TUSB_REQ_RCPT_INTERFACE:
- {
+ switch (p_request->bmRequestType_bit.recipient) {
+ case TUSB_REQ_RCPT_INTERFACE: {
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
// Verify if entity is present
- if (entityID != 0)
- {
+ if (entityID != 0) {
// Find index of audio driver structure and verify entity really exists
TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id));
// In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests
- if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN)
- {
+ if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) {
return tud_audio_get_req_entity_cb(rhport, p_request);
}
- }
- else
- {
+ } else {
// Find index of audio driver structure and verify interface really exists
TU_VERIFY(audiod_verify_itf_exists(itf, &func_id));
// In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests
- if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN)
- {
+ if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) {
return tud_audio_get_req_itf_cb(rhport, p_request);
}
}
- }
- break;
+ } break;
- case TUSB_REQ_RCPT_ENDPOINT:
- {
+ case TUSB_REQ_RCPT_ENDPOINT: {
uint8_t ep = TU_U16_LOW(p_request->wIndex);
// Find index of audio driver structure and verify EP really exists
TU_VERIFY(audiod_verify_ep_exists(ep, &func_id));
// In case we got a get request invoke callback - callback needs to answer as defined in UAC2 specification page 89 - 5. Requests
- if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN)
- {
+ if (p_request->bmRequestType_bit.direction == TUSB_DIR_IN) {
return tud_audio_get_req_ep_cb(rhport, p_request);
}
- }
- break;
+ } break;
// Unknown/Unsupported recipient
- default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false;
+ default:
+ TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient);
+ TU_BREAKPOINT();
+ return false;
}
// If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished
@@ -2270,35 +2169,28 @@ static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const
return false;
}
-bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request)
-{
- if ( stage == CONTROL_STAGE_SETUP )
- {
+bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request) {
+ if (stage == CONTROL_STAGE_SETUP) {
return audiod_control_request(rhport, request);
- }
- else if ( stage == CONTROL_STAGE_DATA )
- {
+ } else if (stage == CONTROL_STAGE_DATA) {
return audiod_control_complete(rhport, request);
}
return true;
}
-bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
-{
+bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) {
(void) result;
(void) xferred_bytes;
// Search for interface belonging to given end point address and proceed as required
- for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++)
- {
- audiod_function_t* audio = &_audiod_fct[func_id];
+ for (uint8_t func_id = 0; func_id < CFG_TUD_AUDIO; func_id++) {
+ audiod_function_t *audio = &_audiod_fct[func_id];
#if CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP
// Data transmission of control interrupt finished
- if (audio->ep_int == ep_addr)
- {
+ if (audio->ep_int == ep_addr) {
// According to USB2 specification, maximum payload of interrupt EP is 8 bytes on low speed, 64 bytes on full speed, and 1024 bytes on high speed (but only if an alternate interface other than 0 is used - see specification p. 49)
// In case there is nothing to send we have to return a NAK - this is taken care of by PHY ???
// In case of an erroneous transmission a retransmission is conducted - this is taken care of by PHY ???
@@ -2315,8 +2207,7 @@ bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint3
#if CFG_TUD_AUDIO_ENABLE_EP_IN
// Data transmission of audio packet finished
- if (audio->ep_in == ep_addr && audio->alt_setting != 0)
- {
+ if (audio->ep_in == ep_addr && audio->alt_setting != 0) {
// USB 2.0, section 5.6.4, third paragraph, states "An isochronous endpoint must specify its required bus access period. However, an isochronous endpoint must be prepared to handle poll rates faster than the one specified."
// That paragraph goes on to say "An isochronous IN endpoint must return a zero-length packet whenever data is requested at a faster interval than the specified interval and data is not available."
// This can only be solved reliably if we load a ZLP after every IN transmission since we can not say if the host requests samples earlier than we declared! Once all samples are collected we overwrite the loaded ZLP.
@@ -2336,27 +2227,24 @@ bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint3
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
// New audio packet received
- if (audio->ep_out == ep_addr)
- {
+ if (audio->ep_out == ep_addr) {
TU_VERIFY(audiod_rx_done_cb(rhport, audio, (uint16_t) xferred_bytes));
return true;
}
-#if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+ #if CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
// Transmission of feedback EP finished
- if (audio->ep_fb == ep_addr)
- {
+ if (audio->ep_fb == ep_addr) {
tud_audio_fb_done_cb(func_id);
// Schedule a transmit with the new value if EP is not busy
- if (usbd_edpt_claim(rhport, audio->ep_fb))
- {
+ if (usbd_edpt_claim(rhport, audio->ep_fb)) {
// Schedule next transmission - value is changed bytud_audio_n_fb_set() in the meantime or the old value gets sent
return audiod_fb_send(audio);
}
}
-#endif
+ #endif
#endif
}
@@ -2365,8 +2253,7 @@ bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint3
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
-static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_freq, uint32_t mclk_freq)
-{
+static bool audiod_set_fb_params_freq(audiod_function_t *audio, uint32_t sample_freq, uint32_t mclk_freq) {
// Check if frame interval is within sane limits
// The interval value n_frames was taken from the descriptors within audiod_set_interface()
@@ -2375,23 +2262,19 @@ static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_
uint32_t const k = (TUSB_SPEED_FULL == tud_speed_get()) ? 10 : 13;
uint32_t const n_frame = (1UL << audio->feedback.frame_shift);
- if ( (((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame )
- {
- TU_LOG1(" UAC2 feedback interval too small\r\n"); TU_BREAKPOINT(); return false;
+ if ((((1UL << k) * sample_freq / mclk_freq) + 1) > n_frame) {
+ TU_LOG1(" UAC2 feedback interval too small\r\n");
+ TU_BREAKPOINT();
+ return false;
}
// Check if parameters really allow for a power of two division
- if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq))
- {
- audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2;
+ if ((mclk_freq % sample_freq) == 0 && tu_is_power_of_two(mclk_freq / sample_freq)) {
+ audio->feedback.compute_method = AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2;
audio->feedback.compute.power_of_2 = (uint8_t) (16 - (audio->feedback.frame_shift - 1) - tu_log2(mclk_freq / sample_freq));
- }
- else if ( audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT)
- {
- audio->feedback.compute.float_const = (float)sample_freq / (float) mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1)));
- }
- else
- {
+ } else if (audio->feedback.compute_method == AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT) {
+ audio->feedback.compute.float_const = (float) sample_freq / (float) mclk_freq * (1UL << (16 - (audio->feedback.frame_shift - 1)));
+ } else {
audio->feedback.compute.fixed.sample_freq = sample_freq;
audio->feedback.compute.fixed.mclk_freq = mclk_freq;
}
@@ -2399,84 +2282,75 @@ static bool audiod_set_fb_params_freq(audiod_function_t* audio, uint32_t sample_
return true;
}
-static void audiod_fb_fifo_count_update(audiod_function_t* audio, uint16_t lvl_new)
-{
+static void audiod_fb_fifo_count_update(audiod_function_t *audio, uint16_t lvl_new) {
/* Low-pass (averaging) filter */
uint32_t lvl = audio->feedback.compute.fifo_count.fifo_lvl_avg;
- lvl = (uint32_t)(((uint64_t)lvl * 63 + ((uint32_t)lvl_new << 16)) >> 6);
+ lvl = (uint32_t) (((uint64_t) lvl * 63 + ((uint32_t) lvl_new << 16)) >> 6);
audio->feedback.compute.fifo_count.fifo_lvl_avg = lvl;
uint32_t const ff_lvl = lvl >> 16;
uint16_t const ff_thr = audio->feedback.compute.fifo_count.fifo_lvl_thr;
- uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const;
+ uint16_t const *rate = audio->feedback.compute.fifo_count.rate_const;
uint32_t feedback;
- if(ff_lvl < ff_thr)
- {
+ if (ff_lvl < ff_thr) {
feedback = audio->feedback.compute.fifo_count.nom_value + (ff_thr - ff_lvl) * rate[0];
- } else
- {
+ } else {
feedback = audio->feedback.compute.fifo_count.nom_value - (ff_lvl - ff_thr) * rate[1];
}
- if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value;
- if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value;
+ if (feedback > audio->feedback.max_value) feedback = audio->feedback.max_value;
+ if (feedback < audio->feedback.min_value) feedback = audio->feedback.min_value;
audio->feedback.value = feedback;
// Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value
- if (usbd_edpt_claim(audio->rhport, audio->ep_fb))
- {
+ if (usbd_edpt_claim(audio->rhport, audio->ep_fb)) {
audiod_fb_send(audio);
}
}
-uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles)
-{
- audiod_function_t* audio = &_audiod_fct[func_id];
+uint32_t tud_audio_feedback_update(uint8_t func_id, uint32_t cycles) {
+ audiod_function_t *audio = &_audiod_fct[func_id];
uint32_t feedback;
- switch (audio->feedback.compute_method)
- {
+ switch (audio->feedback.compute_method) {
case AUDIO_FEEDBACK_METHOD_FREQUENCY_POWER_OF_2:
feedback = (cycles << audio->feedback.compute.power_of_2);
- break;
+ break;
case AUDIO_FEEDBACK_METHOD_FREQUENCY_FLOAT:
feedback = (uint32_t) ((float) cycles * audio->feedback.compute.float_const);
- break;
+ break;
- case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED:
- {
+ case AUDIO_FEEDBACK_METHOD_FREQUENCY_FIXED: {
uint64_t fb64 = (((uint64_t) cycles) * audio->feedback.compute.fixed.sample_freq) << (16 - (audio->feedback.frame_shift - 1));
feedback = (uint32_t) (fb64 / audio->feedback.compute.fixed.mclk_freq);
- }
- break;
+ } break;
- default: return 0;
+ default:
+ return 0;
}
// For Windows: https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers
// The size of isochronous packets created by the device must be within the limits specified in FMT-2.0 section 2.3.1.1.
// This means that the deviation of actual packet size from nominal size must not exceed +/- one audio slot
// (audio slot = channel count samples).
- if ( feedback > audio->feedback.max_value ) feedback = audio->feedback.max_value;
- if ( feedback < audio->feedback.min_value ) feedback = audio->feedback.min_value;
+ if (feedback > audio->feedback.max_value) feedback = audio->feedback.max_value;
+ if (feedback < audio->feedback.min_value) feedback = audio->feedback.min_value;
tud_audio_n_fb_set(func_id, feedback);
return feedback;
}
-bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback)
-{
+bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback) {
TU_VERIFY(func_id < CFG_TUD_AUDIO && _audiod_fct[func_id].p_desc != NULL);
_audiod_fct[func_id].feedback.value = feedback;
// Schedule a transmit with the new value if EP is not busy - this triggers repetitive scheduling of the feedback value
- if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb))
- {
+ if (usbd_edpt_claim(_audiod_fct[func_id].rhport, _audiod_fct[func_id].ep_fb)) {
return audiod_fb_send(&_audiod_fct[func_id]);
}
@@ -2484,8 +2358,7 @@ bool tud_audio_n_fb_set(uint8_t func_id, uint32_t feedback)
}
#endif
-TU_ATTR_FAST_FUNC void audiod_sof_isr (uint8_t rhport, uint32_t frame_count)
-{
+TU_ATTR_FAST_FUNC void audiod_sof_isr(uint8_t rhport, uint32_t frame_count) {
(void) rhport;
(void) frame_count;
@@ -2497,26 +2370,22 @@ TU_ATTR_FAST_FUNC void audiod_sof_isr (uint8_t rhport, uint32_t frame_count)
// feedback = n_cycles / n_frames * f_s / f_m in 16.16 format, where n_cycles are the number of main clock cycles within fb_n_frames
// Iterate over audio functions and set feedback value
- for(uint8_t i=0; i < CFG_TUD_AUDIO; i++)
- {
- audiod_function_t* audio = &_audiod_fct[i];
+ for (uint8_t i = 0; i < CFG_TUD_AUDIO; i++) {
+ audiod_function_t *audio = &_audiod_fct[i];
- if (audio->ep_fb != 0)
- {
+ if (audio->ep_fb != 0) {
// HS shift need to be adjusted since SOF event is generated for frame only
uint8_t const hs_adjust = (TUSB_SPEED_HIGH == tud_speed_get()) ? 3 : 0;
uint32_t const interval = 1UL << (audio->feedback.frame_shift - hs_adjust);
- if ( 0 == (frame_count & (interval-1)) )
- {
+ if (0 == (frame_count & (interval - 1))) {
tud_audio_feedback_interval_isr(i, frame_count, audio->feedback.frame_shift);
}
}
}
-#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
+#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
}
-bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const * p_request, void* data, uint16_t len)
-{
+bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_request_t const *p_request, void *data, uint16_t len) {
// Handles only sending of data not receiving
if (p_request->bmRequestType_bit.direction == TUSB_DIR_OUT) return false;
@@ -2525,85 +2394,73 @@ bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_req
uint8_t itf = TU_U16_LOW(p_request->wIndex);
// Conduct checks which depend on the recipient
- switch (p_request->bmRequestType_bit.recipient)
- {
- case TUSB_REQ_RCPT_INTERFACE:
- {
+ switch (p_request->bmRequestType_bit.recipient) {
+ case TUSB_REQ_RCPT_INTERFACE: {
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
// Verify if entity is present
- if (entityID != 0)
- {
+ if (entityID != 0) {
// Find index of audio driver structure and verify entity really exists
TU_VERIFY(audiod_verify_entity_exists(itf, entityID, &func_id));
- }
- else
- {
+ } else {
// Find index of audio driver structure and verify interface really exists
TU_VERIFY(audiod_verify_itf_exists(itf, &func_id));
}
- }
- break;
+ } break;
- case TUSB_REQ_RCPT_ENDPOINT:
- {
+ case TUSB_REQ_RCPT_ENDPOINT: {
uint8_t ep = TU_U16_LOW(p_request->wIndex);
// Find index of audio driver structure and verify EP really exists
TU_VERIFY(audiod_verify_ep_exists(ep, &func_id));
- }
- break;
+ } break;
// Unknown/Unsupported recipient
- default: TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient); TU_BREAKPOINT(); return false;
+ default:
+ TU_LOG2(" Unsupported recipient: %d\r\n", p_request->bmRequestType_bit.recipient);
+ TU_BREAKPOINT();
+ return false;
}
// Crop length
if (len > _audiod_fct[func_id].ctrl_buf_sz) len = _audiod_fct[func_id].ctrl_buf_sz;
// Copy into buffer
- TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, data, (size_t)len));
+ TU_VERIFY(0 == tu_memcpy_s(_audiod_fct[func_id].ctrl_buf, _audiod_fct[func_id].ctrl_buf_sz, data, (size_t) len));
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
// Find data for sampling_frequency_control
- if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE)
- {
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_CLASS && p_request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_INTERFACE) {
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
- if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO_CS_REQ_CUR)
- {
+ if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO_CS_REQ_CUR) {
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(_audiod_fct[func_id].ctrl_buf);
}
}
#endif
// Schedule transmit
- return tud_control_xfer(rhport, p_request, (void*)_audiod_fct[func_id].ctrl_buf, len);
+ return tud_control_xfer(rhport, p_request, (void *) _audiod_fct[func_id].ctrl_buf, len);
}
// This helper function finds for a given audio function and AS interface number the index of the attached driver structure, the index of the interface in the audio function
// (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and
// finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero.
-static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio, uint8_t *idxItf, uint8_t const **pp_desc_int)
-{
- if (audio->p_desc)
- {
+static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t *audio, uint8_t *idxItf, uint8_t const **pp_desc_int) {
+ if (audio->p_desc) {
// Get pointer at end
uint8_t const *p_desc_end = audio->p_desc + audio->desc_length - TUD_AUDIO_DESC_IAD_LEN;
// Advance past AC descriptors
uint8_t const *p_desc = tu_desc_next(audio->p_desc);
- p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength;
+ p_desc += ((audio_desc_cs_ac_interface_t const *) p_desc)->wTotalLength;
uint8_t tmp = 0;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
+ while (p_desc_end - p_desc > 0) {
// We assume the number of alternate settings is increasing thus we return the index of alternate setting zero!
- if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const * )p_desc)->bAlternateSetting == 0)
- {
- if (((tusb_desc_interface_t const * )p_desc)->bInterfaceNumber == itf)
- {
+ if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *) p_desc)->bAlternateSetting == 0) {
+ if (((tusb_desc_interface_t const *) p_desc)->bInterfaceNumber == itf) {
*idxItf = tmp;
*pp_desc_int = p_desc;
return true;
@@ -2620,14 +2477,11 @@ static bool audiod_get_AS_interface_index(uint8_t itf, audiod_function_t * audio
// This helper function finds for a given AS interface number the index of the attached driver structure, the index of the interface in the audio function
// (e.g. the std. AS interface with interface number 15 is the first AS interface for the given audio function and thus gets index zero), and
// finally a pointer to the std. AS interface, where the pointer always points to the first alternate setting i.e. alternate interface zero.
-static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int)
-{
+static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id, uint8_t *idxItf, uint8_t const **pp_desc_int) {
// Loop over audio driver interfaces
uint8_t i;
- for (i = 0; i < CFG_TUD_AUDIO; i++)
- {
- if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int))
- {
+ for (i = 0; i < CFG_TUD_AUDIO; i++) {
+ if (audiod_get_AS_interface_index(itf, &_audiod_fct[i], idxItf, pp_desc_int)) {
*func_id = i;
return true;
}
@@ -2637,23 +2491,19 @@ static bool audiod_get_AS_interface_index_global(uint8_t itf, uint8_t *func_id,
}
// Verify an entity with the given ID exists and returns also the corresponding driver index
-static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id)
-{
+static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *func_id) {
uint8_t i;
- for (i = 0; i < CFG_TUD_AUDIO; i++)
- {
+ for (i = 0; i < CFG_TUD_AUDIO; i++) {
// Look for the correct driver by checking if the unique standard AC interface number fits
- if (_audiod_fct[i].p_desc && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf)
- {
+ if (_audiod_fct[i].p_desc && ((tusb_desc_interface_t const *) _audiod_fct[i].p_desc)->bInterfaceNumber == itf) {
// Get pointers after class specific AC descriptors and end of AC descriptors - entities are defined in between
- uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc); // Points to CS AC descriptor
- uint8_t const *p_desc_end = ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength + p_desc;
- p_desc = tu_desc_next(p_desc); // Get past CS AC descriptor
+ uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc);// Points to CS AC descriptor
+ uint8_t const *p_desc_end = ((audio_desc_cs_ac_interface_t const *) p_desc)->wTotalLength + p_desc;
+ p_desc = tu_desc_next(p_desc);// Get past CS AC descriptor
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
- if (p_desc[3] == entityID) // Entity IDs are always at offset 3
+ while (p_desc_end - p_desc > 0) {
+ if (p_desc[3] == entityID)// Entity IDs are always at offset 3
{
*func_id = i;
return true;
@@ -2665,21 +2515,16 @@ static bool audiod_verify_entity_exists(uint8_t itf, uint8_t entityID, uint8_t *
return false;
}
-static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id)
-{
+static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id) {
uint8_t i;
- for (i = 0; i < CFG_TUD_AUDIO; i++)
- {
- if (_audiod_fct[i].p_desc)
- {
+ for (i = 0; i < CFG_TUD_AUDIO; i++) {
+ if (_audiod_fct[i].p_desc) {
// Get pointer at beginning and end
uint8_t const *p_desc = _audiod_fct[i].p_desc;
uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length - TUD_AUDIO_DESC_IAD_LEN;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
- if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *)_audiod_fct[i].p_desc)->bInterfaceNumber == itf)
- {
+ while (p_desc_end - p_desc > 0) {
+ if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE && ((tusb_desc_interface_t const *) _audiod_fct[i].p_desc)->bInterfaceNumber == itf) {
*func_id = i;
return true;
}
@@ -2690,25 +2535,20 @@ static bool audiod_verify_itf_exists(uint8_t itf, uint8_t *func_id)
return false;
}
-static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id)
-{
+static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id) {
uint8_t i;
- for (i = 0; i < CFG_TUD_AUDIO; i++)
- {
- if (_audiod_fct[i].p_desc)
- {
+ for (i = 0; i < CFG_TUD_AUDIO; i++) {
+ if (_audiod_fct[i].p_desc) {
// Get pointer at end
uint8_t const *p_desc_end = _audiod_fct[i].p_desc + _audiod_fct[i].desc_length;
// Advance past AC descriptors - EP we look for are streaming EPs
uint8_t const *p_desc = tu_desc_next(_audiod_fct[i].p_desc);
- p_desc += ((audio_desc_cs_ac_interface_t const *)p_desc)->wTotalLength;
+ p_desc += ((audio_desc_cs_ac_interface_t const *) p_desc)->wTotalLength;
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
- if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && ((tusb_desc_endpoint_t const * )p_desc)->bEndpointAddress == ep)
- {
+ while (p_desc_end - p_desc > 0) {
+ if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT && ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress == ep) {
*func_id = i;
return true;
}
@@ -2723,81 +2563,73 @@ static bool audiod_verify_ep_exists(uint8_t ep, uint8_t *func_id)
// p_desc points to the AS interface of alternate setting zero
// itf is the interface number of the corresponding interface - we check if the interface belongs to EP in or EP out to see if it is a TX or RX parameter
// Currently, only AS interfaces with an EP (in or out) are supposed to be parsed for!
-static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const * p_desc, uint8_t const * p_desc_end, uint8_t const as_itf)
-{
-#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
- if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) return; // Abort, this interface has no EP, this driver does not support this currently
-#endif
-#if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT
+static void audiod_parse_for_AS_params(audiod_function_t *audio, uint8_t const *p_desc, uint8_t const *p_desc_end, uint8_t const as_itf) {
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
+ if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) return;// Abort, this interface has no EP, this driver does not support this currently
+ #endif
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT
if (as_itf != audio->ep_in_as_intf_num) return;
-#endif
-#if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
+ #endif
+ #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
if (as_itf != audio->ep_out_as_intf_num) return;
-#endif
+ #endif
- p_desc = tu_desc_next(p_desc); // Exclude standard AS interface descriptor of current alternate interface descriptor
+ p_desc = tu_desc_next(p_desc);// Exclude standard AS interface descriptor of current alternate interface descriptor
// Condition modified from p_desc < p_desc_end to prevent gcc>=12 strict-overflow warning
- while (p_desc_end - p_desc > 0)
- {
+ while (p_desc_end - p_desc > 0) {
// Abort if follow up descriptor is a new standard interface descriptor - indicates the last AS descriptor was already finished
if (tu_desc_type(p_desc) == TUSB_DESC_INTERFACE) break;
// Look for a Class-Specific AS Interface Descriptor(4.9.2) to verify format type and format and also to get number of physical channels
- if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL)
- {
-#if CFG_TUD_AUDIO_ENABLE_EP_IN
- if (as_itf == audio->ep_in_as_intf_num)
- {
- audio->n_channels_tx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels;
- audio->format_type_tx = (audio_format_type_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType);
+ if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_AS_GENERAL) {
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN
+ if (as_itf == audio->ep_in_as_intf_num) {
+ audio->n_channels_tx = ((audio_desc_cs_as_interface_t const *) p_desc)->bNrChannels;
+ audio->format_type_tx = (audio_format_type_t) (((audio_desc_cs_as_interface_t const *) p_desc)->bFormatType);
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
- audio->format_type_I_tx = (audio_data_format_type_I_t)(((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats);
-#endif
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING
+ audio->format_type_I_tx = (audio_data_format_type_I_t) (((audio_desc_cs_as_interface_t const *) p_desc)->bmFormats);
+ #endif
}
-#endif
+ #endif
-#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
- if (as_itf == audio->ep_out_as_intf_num)
- {
- audio->n_channels_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bNrChannels;
- audio->format_type_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bFormatType;
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
- audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const * )p_desc)->bmFormats;
-#endif
+ #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
+ if (as_itf == audio->ep_out_as_intf_num) {
+ audio->n_channels_rx = ((audio_desc_cs_as_interface_t const *) p_desc)->bNrChannels;
+ audio->format_type_rx = ((audio_desc_cs_as_interface_t const *) p_desc)->bFormatType;
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
+ audio->format_type_I_rx = ((audio_desc_cs_as_interface_t const *) p_desc)->bmFormats;
+ #endif
}
-#endif
+ #endif
}
// Look for a Type I Format Type Descriptor(2.3.1.6 - Audio Formats)
-#if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
- if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && ((audio_desc_type_I_format_t const * )p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I)
- {
-#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
- if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) break; // Abort loop, this interface has no EP, this driver does not support this currently
-#endif
-#if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT
+ #if CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING || CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL || CFG_TUD_AUDIO_ENABLE_TYPE_I_DECODING
+ if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AS_INTERFACE_FORMAT_TYPE && ((audio_desc_type_I_format_t const *) p_desc)->bFormatType == AUDIO_FORMAT_TYPE_I) {
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
+ if (as_itf != audio->ep_in_as_intf_num && as_itf != audio->ep_out_as_intf_num) break;// Abort loop, this interface has no EP, this driver does not support this currently
+ #endif
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_EP_OUT
if (as_itf != audio->ep_in_as_intf_num) break;
-#endif
-#if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
+ #endif
+ #if !CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_EP_OUT
if (as_itf != audio->ep_out_as_intf_num) break;
-#endif
+ #endif
-#if CFG_TUD_AUDIO_ENABLE_EP_IN
- if (as_itf == audio->ep_in_as_intf_num)
- {
- audio->n_bytes_per_sample_tx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize;
+ #if CFG_TUD_AUDIO_ENABLE_EP_IN
+ if (as_itf == audio->ep_in_as_intf_num) {
+ audio->n_bytes_per_sample_tx = ((audio_desc_type_I_format_t const *) p_desc)->bSubslotSize;
}
-#endif
+ #endif
-#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
- if (as_itf == audio->ep_out_as_intf_num)
- {
- audio->n_bytes_per_sample_rx = ((audio_desc_type_I_format_t const * )p_desc)->bSubslotSize;
+ #if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
+ if (as_itf == audio->ep_out_as_intf_num) {
+ audio->n_bytes_per_sample_rx = ((audio_desc_type_I_format_t const *) p_desc)->bSubslotSize;
}
-#endif
+ #endif
}
-#endif
+ #endif
// Other format types are not supported yet
@@ -2808,8 +2640,7 @@ static void audiod_parse_for_AS_params(audiod_function_t* audio, uint8_t const *
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
-static bool audiod_calc_tx_packet_sz(audiod_function_t* audio)
-{
+static bool audiod_calc_tx_packet_sz(audiod_function_t *audio) {
TU_VERIFY(audio->format_type_tx == AUDIO_FORMAT_TYPE_I);
TU_VERIFY(audio->n_channels_tx);
TU_VERIFY(audio->n_bytes_per_sample_tx);
@@ -2818,25 +2649,23 @@ static bool audiod_calc_tx_packet_sz(audiod_function_t* audio)
const uint8_t interval = (tud_speed_get() == TUSB_SPEED_FULL) ? audio->interval_tx : 1 << (audio->interval_tx - 1);
- const uint16_t sample_normimal = (uint16_t)(audio->sample_rate_tx * interval / ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000));
- const uint16_t sample_reminder = (uint16_t)(audio->sample_rate_tx * interval % ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000));
+ const uint16_t sample_normimal = (uint16_t) (audio->sample_rate_tx * interval / ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000));
+ const uint16_t sample_reminder = (uint16_t) (audio->sample_rate_tx * interval % ((tud_speed_get() == TUSB_SPEED_FULL) ? 1000 : 8000));
- const uint16_t packet_sz_tx_min = (uint16_t)((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
- const uint16_t packet_sz_tx_norm = (uint16_t)(sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
- const uint16_t packet_sz_tx_max = (uint16_t)((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
+ const uint16_t packet_sz_tx_min = (uint16_t) ((sample_normimal - 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
+ const uint16_t packet_sz_tx_norm = (uint16_t) (sample_normimal * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
+ const uint16_t packet_sz_tx_max = (uint16_t) ((sample_normimal + 1) * audio->n_channels_tx * audio->n_bytes_per_sample_tx);
// Endpoint size must larger than packet size
TU_ASSERT(packet_sz_tx_max <= audio->ep_in_sz);
// Frmt20.pdf 2.3.1.1 USB Packets
- if (sample_reminder)
- {
+ if (sample_reminder) {
// All virtual frame packets must either contain INT(nav) audio slots (small VFP) or INT(nav)+1 (large VFP) audio slots
audio->packet_sz_tx[0] = packet_sz_tx_norm;
audio->packet_sz_tx[1] = packet_sz_tx_norm;
audio->packet_sz_tx[2] = packet_sz_tx_max;
- } else
- {
+ } else {
// In the case where nav = INT(nav), ni may vary between INT(nav)-1 (small VFP), INT(nav)
// (medium VFP) and INT(nav)+1 (large VFP).
audio->packet_sz_tx[0] = packet_sz_tx_min;
@@ -2847,49 +2676,37 @@ static bool audiod_calc_tx_packet_sz(audiod_function_t* audio)
return true;
}
-static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_depth)
-{
+static uint16_t audiod_tx_packet_size(const uint16_t *norminal_size, uint16_t data_count, uint16_t fifo_depth, uint16_t max_depth) {
// Flow control need a FIFO size of at least 4*Navg
- if(norminal_size[1] && norminal_size[1] <= fifo_depth * 4)
- {
+ if (norminal_size[1] && norminal_size[1] <= fifo_depth * 4) {
// Use blackout to prioritize normal size packet
static int ctrl_blackout = 0;
uint16_t packet_size;
uint16_t slot_size = norminal_size[2] - norminal_size[1];
- if (data_count < norminal_size[0])
- {
- // If you get here frequently, then your I2S clock deviation is too big !
- packet_size = 0;
- } else
- if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout)
- {
+ if (data_count < norminal_size[0]) {
+ // If you get here frequently, then your I2S clock deviation is too big !
+ packet_size = 0;
+ } else if (data_count < fifo_depth / 2 - slot_size && !ctrl_blackout) {
packet_size = norminal_size[0];
ctrl_blackout = 10;
- } else
- if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout)
- {
+ } else if (data_count > fifo_depth / 2 + slot_size && !ctrl_blackout) {
packet_size = norminal_size[2];
- if(norminal_size[0] == norminal_size[1])
- {
+ if (norminal_size[0] == norminal_size[1]) {
// nav > INT(nav), eg. 44.1k, 88.2k
ctrl_blackout = 0;
- } else
- {
+ } else {
// nav = INT(nav), eg. 48k, 96k
ctrl_blackout = 10;
}
- } else
- {
+ } else {
packet_size = norminal_size[1];
- if (ctrl_blackout)
- {
+ if (ctrl_blackout) {
ctrl_blackout--;
}
}
// Normally this cap is not necessary
return tu_min16(packet_size, max_depth);
- } else
- {
+ } else {
return tu_min16(data_count, max_depth);
}
}
@@ -2897,13 +2714,11 @@ static uint16_t audiod_tx_packet_size(const uint16_t* norminal_size, uint16_t da
#endif
// No security checks here - internal function only which should always succeed
-static uint8_t audiod_get_audio_fct_idx(audiod_function_t * audio)
-{
- for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO; cnt++)
- {
+static uint8_t audiod_get_audio_fct_idx(audiod_function_t *audio) {
+ for (uint8_t cnt = 0; cnt < CFG_TUD_AUDIO; cnt++) {
if (&_audiod_fct[cnt] == audio) return cnt;
}
return 0;
}
-#endif //CFG_TUD_ENABLED && CFG_TUD_AUDIO
+#endif // (CFG_TUD_ENABLED && CFG_TUD_AUDIO)
diff --git a/src/class/audio/audio_device.h b/src/class/audio/audio_device.h
index ae253f49d2..0a7bff2122 100644
--- a/src/class/audio/audio_device.h
+++ b/src/class/audio/audio_device.h
@@ -203,6 +203,9 @@
#define CFG_TUD_AUDIO_ENABLE_INTERRUPT_EP 0 // Feedback - 0 or 1
#endif
+// Audio control interrupt EP - 6 Bytes according to UAC 2 specification (p. 74)
+#define CFG_TUD_AUDIO_INTERRUPT_EP_SZ 6
+
// Use software encoding/decoding
// The software coding feature of the driver is not mandatory. It is useful if, for instance, you have two I2S streams which need to be interleaved
diff --git a/src/class/hid/hid.h b/src/class/hid/hid.h
index c2b5a8a482..db9a500eec 100644
--- a/src/class/hid/hid.h
+++ b/src/class/hid/hid.h
@@ -949,6 +949,116 @@ enum {
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
};
+/// HID Usage Table: Physical Input Device Page (0x0F)
+enum {
+ HID_USAGE_PID_UNDEFINED = 0x00,
+ HID_USAGE_PID_PHYSICAL_INPUT_DEVICE = 0x01,
+ HID_USAGE_PID_NORMAL = 0x20,
+ HID_USAGE_PID_SET_EFFECT_REPORT = 0x21,
+ HID_USAGE_PID_EFFECT_PARAMETER_BLOCK_INDEX = 0x22,
+ HID_USAGE_PID_PARAMETER_BLOCK_OFFSET = 0x23,
+ HID_USAGE_PID_ROM_FLAG = 0x24,
+ HID_USAGE_PID_EFFECT_TYPE = 0x25,
+ HID_USAGE_PID_ET_CONSTANTFORCE = 0x26,
+ HID_USAGE_PID_ET_RAMP = 0x27,
+ HID_USAGE_PID_ET_CUSTOMFORCE = 0x28,
+ HID_USAGE_PID_ET_SQUARE = 0x30,
+ HID_USAGE_PID_ET_SINE = 0x31,
+ HID_USAGE_PID_ET_TRIANGLE = 0x32,
+ HID_USAGE_PID_ET_SAWTOOTH_UP = 0x33,
+ HID_USAGE_PID_ET_SAWTOOTH_DOWN = 0x34,
+ HID_USAGE_PID_ET_SPRING = 0x40,
+ HID_USAGE_PID_ET_DAMPER = 0x41,
+ HID_USAGE_PID_ET_INERTIA = 0x42,
+ HID_USAGE_PID_ET_FRICTION = 0x43,
+ HID_USAGE_PID_DURATION = 0x50,
+ HID_USAGE_PID_SAMPLE_PERIOD = 0x51,
+ HID_USAGE_PID_GAIN = 0x52,
+ HID_USAGE_PID_TRIGGER_BUTTON = 0x53,
+ HID_USAGE_PID_TRIGGER_REPEAT_INTERVAL = 0x54,
+ HID_USAGE_PID_AXES_ENABLE = 0x55,
+ HID_USAGE_PID_DIRECTION_ENABLE = 0x56,
+ HID_USAGE_PID_DIRECTION = 0x57,
+ HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_OFFSET = 0x58,
+ HID_USAGE_PID_BLOCK_TYPE = 0x59,
+ HID_USAGE_PID_SET_ENVELOPE_REPORT = 0x5a,
+ HID_USAGE_PID_ATTACK_LEVEL = 0x5b,
+ HID_USAGE_PID_ATTACK_TIME = 0x5c,
+ HID_USAGE_PID_FADE_LEVEL = 0x5d,
+ HID_USAGE_PID_FADE_TIME = 0x5e,
+ HID_USAGE_PID_SET_CONDITION_REPORT = 0x5f,
+ HID_USAGE_PID_CENTERPOINT_OFFSET = 0x60,
+ HID_USAGE_PID_POSITIVE_COEFFICIENT = 0x61,
+ HID_USAGE_PID_NEGATIVE_COEFFICIENT = 0x62,
+ HID_USAGE_PID_POSITIVE_SATURATION = 0x63,
+ HID_USAGE_PID_NEGATIVE_SATURATION = 0x64,
+ HID_USAGE_PID_DEAD_BAND = 0x65,
+ HID_USAGE_PID_DOWNLOAD_FORCE_SAMPLE = 0x66,
+ HID_USAGE_PID_ISOCH_CUSTOMFORCE_ENABLE = 0x67,
+ HID_USAGE_PID_CUSTOMFORCE_DATA_REPORT = 0x68,
+ HID_USAGE_PID_CUSTOMFORCE_DATA = 0x69,
+ HID_USAGE_PID_CUSTOMFORCE_VENDOR_DEFINED_DATA = 0x6a,
+ HID_USAGE_PID_SET_CUSTOMFORCE_REPORT = 0x6b,
+ HID_USAGE_PID_CUSTOMFORCE_DATA_OFFSET = 0x6c,
+ HID_USAGE_PID_SAMPLE_COUNT = 0x6d,
+ HID_USAGE_PID_SET_PERIODIC_REPORT = 0x6e,
+ HID_USAGE_PID_OFFSET = 0x6f,
+ HID_USAGE_PID_MAGNITUDE = 0x70,
+ HID_USAGE_PID_PHASE = 0x71,
+ HID_USAGE_PID_PERIOD = 0x72,
+ HID_USAGE_PID_SET_CONSTANTFORCE_REPORT = 0x73,
+ HID_USAGE_PID_SET_RAMPFORCE_REPORT = 0x74,
+ HID_USAGE_PID_RAMP_START = 0x75,
+ HID_USAGE_PID_RAMP_END = 0x76,
+ HID_USAGE_PID_EFFECT_OPERATION_REPORT = 0x77,
+ HID_USAGE_PID_EFFECT_OPERATION = 0x78,
+ HID_USAGE_PID_OP_EFFECT_START = 0x79,
+ HID_USAGE_PID_OP_EFFECT_START_SOLO = 0x7a,
+ HID_USAGE_PID_OP_EFFECT_STOP = 0x7b,
+ HID_USAGE_PID_LOOP_COUNT = 0x7c,
+ HID_USAGE_PID_DEVICE_GAIN_REPORT = 0x7d,
+ HID_USAGE_PID_DEVICE_GAIN = 0x7e,
+ HID_USAGE_PID_PARAMETER_BLOCK_POOLS_REPORT = 0x7f,
+ HID_USAGE_PID_RAM_POOL_SIZE = 0x80,
+ HID_USAGE_PID_ROM_POOL_SIZE = 0x81,
+ HID_USAGE_PID_ROM_EFFECT_BLOCK_COUNT = 0x82,
+ HID_USAGE_PID_SIMULTANEOUS_EFFECTS_MAX = 0x83,
+ HID_USAGE_PID_POOL_ALIGNMENT = 0x84,
+ HID_USAGE_PID_PARAMETER_BLOCK_MOVE_REPORT = 0x85,
+ HID_USAGE_PID_MOVE_SOURCE = 0x86,
+ HID_USAGE_PID_MOVE_DESTINATION = 0x87,
+ HID_USAGE_PID_MOVE_LENGTH = 0x88,
+ HID_USAGE_PID_EFFECT_PARAMETER_BLOCK_LOAD_REPORT = 0x89,
+ HID_USAGE_PID_EFFECT_PARAMETER_BLOCK_LOAD_STATUS = 0x8b,
+ HID_USAGE_PID_BLOCK_LOAD_SUCCESS = 0x8c,
+ HID_USAGE_PID_BLOCK_LOAD_FULL = 0x8d,
+ HID_USAGE_PID_BLOCK_LOAD_ERROR = 0x8e,
+ HID_USAGE_PID_BLOCK_HANDLE = 0x8f,
+ HID_USAGE_PID_EFFECT_PARAMETER_BLOCK_FREE_REPORT = 0x90,
+ HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_HANDLE = 0x91,
+ HID_USAGE_PID_PID_STATE_REPORT = 0x92,
+ HID_USAGE_PID_EFFECT_PLAYING = 0x94,
+ HID_USAGE_PID_PID_DEVICE_CONTROL_REPORT = 0x95,
+ HID_USAGE_PID_PID_DEVICE_CONTROL = 0x96,
+ HID_USAGE_PID_DC_ENABLE_ACTUATORS = 0x97,
+ HID_USAGE_PID_DC_DISABLE_ACTUATORS = 0x98,
+ HID_USAGE_PID_DC_STOP_ALL_EFFECTS = 0x99,
+ HID_USAGE_PID_DC_RESET = 0x9a,
+ HID_USAGE_PID_DC_PAUSE = 0x9b,
+ HID_USAGE_PID_DC_CONTINUE = 0x9c,
+ HID_USAGE_PID_DEVICE_PAUSED = 0x9f,
+ HID_USAGE_PID_ACTUATORS_ENABLED = 0xa0,
+ HID_USAGE_PID_SAFETY_SWITCH = 0xa4,
+ HID_USAGE_PID_ACTUATOR_OVERRIDE_SWITCH = 0xa5,
+ HID_USAGE_PID_ACTUATOR_POWER = 0xa6,
+ HID_USAGE_PID_START_DELAY = 0xa7,
+ HID_USAGE_PID_PARAMETER_BLOCK_SIZE = 0xa8,
+ HID_USAGE_PID_DEVICEMANAGED_POOL = 0xa9,
+ HID_USAGE_PID_SHARED_PARAMETER_BLOCKS = 0xaa,
+ HID_USAGE_PID_CREATE_NEW_EFFECT_PARAMETER_BLOCK_REPORT = 0xab,
+ HID_USAGE_PID_RAM_POOL_AVAILABLE = 0xac,
+};
+
/*--------------------------------------------------------------------
* ASCII to KEYCODE Conversion
* Expand to array of [128][2] (shift, keycode)
diff --git a/src/class/hid/hid_host.c b/src/class/hid/hid_host.c
index eef584d741..a3cc7d6d7b 100644
--- a/src/class/hid/hid_host.c
+++ b/src/class/hid/hid_host.c
@@ -410,7 +410,7 @@ bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const vo
++len; // 1 more byte for report_id
}
- TU_LOG3_MEM(p_hid->epout_buf, len, 2);
+ TU_LOG3_MEM(epbuf->epout, len, 2);
if (!usbh_edpt_xfer(daddr, p_hid->ep_out, epbuf->epout, len)) {
usbh_edpt_release(daddr, p_hid->ep_out);
@@ -445,7 +445,7 @@ bool hidh_xfer_cb(uint8_t daddr, uint8_t ep_addr, xfer_result_t result, uint32_t
if (dir == TUSB_DIR_IN) {
TU_LOG_DRV(" Get Report callback (%u, %u)\r\n", daddr, idx);
- TU_LOG3_MEM(p_hid->epin_buf, xferred_bytes, 2);
+ TU_LOG3_MEM(epbuf->epin, xferred_bytes, 2);
tuh_hid_report_received_cb(daddr, idx, epbuf->epin, (uint16_t) xferred_bytes);
} else {
if (tuh_hid_report_sent_cb) {
diff --git a/src/class/net/ncm_device.c b/src/class/net/ncm_device.c
index 4e6088340a..aac11a0589 100644
--- a/src/class/net/ncm_device.c
+++ b/src/class/net/ncm_device.c
@@ -390,7 +390,7 @@ static bool xmit_requested_datagram_fits_into_current_ntb(uint16_t datagram_size
if (ncm_interface.xmit_glue_ntb_datagram_ndx >= CFG_TUD_NCM_IN_MAX_DATAGRAMS_PER_NTB) {
return false;
}
- if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + XMIT_ALIGN_OFFSET(datagram_size) > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) {
+ if (ncm_interface.xmit_glue_ntb->nth.wBlockLength + datagram_size + XMIT_ALIGN_OFFSET(datagram_size) > CFG_TUD_NCM_IN_NTB_MAX_SIZE) {
return false;
}
return true;
@@ -674,7 +674,7 @@ static void recv_transfer_datagram_to_glue_logic(void) {
bool tud_network_can_xmit(uint16_t size) {
TU_LOG_DRV("tud_network_can_xmit(%d)\n", size);
- TU_ASSERT(size <= CFG_TUD_NCM_OUT_NTB_MAX_SIZE - (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), false);
+ TU_ASSERT(size <= CFG_TUD_NCM_IN_NTB_MAX_SIZE - (sizeof(nth16_t) + sizeof(ndp16_t) + 2 * sizeof(ndp16_datagram_t)), false);
if (xmit_requested_datagram_fits_into_current_ntb(size) || xmit_setup_next_glue_ntb()) {
// -> everything is fine
@@ -709,7 +709,7 @@ void tud_network_xmit(void *ref, uint16_t arg) {
ntb->nth.wBlockLength += (uint16_t) (size + XMIT_ALIGN_OFFSET(size));
- if (ntb->nth.wBlockLength > CFG_TUD_NCM_OUT_NTB_MAX_SIZE) {
+ if (ntb->nth.wBlockLength > CFG_TUD_NCM_IN_NTB_MAX_SIZE) {
TU_LOG_DRV("(EE) tud_network_xmit: buffer overflow\n"); // must not happen (really)
return;
}
diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h
index d282c890dc..a0175d664a 100644
--- a/src/common/tusb_mcu.h
+++ b/src/common/tusb_mcu.h
@@ -108,12 +108,20 @@
#define TUP_DCD_ENDPOINT_MAX 16
#elif TU_CHECK_MCU(OPT_MCU_MIMXRT1XXX)
+ #include "fsl_device_registers.h"
+
#define TUP_USBIP_CHIPIDEA_HS
#define TUP_USBIP_EHCI
#define TUP_DCD_ENDPOINT_MAX 8
#define TUP_RHPORT_HIGHSPEED 1
+ #if __CORTEX_M == 7
+ #define CFG_TUD_MEM_DCACHE_ENABLE_DEFAULT 1
+ #define CFG_TUH_MEM_DCACHE_ENABLE_DEFAULT 1
+ #define CFG_TUSB_MEM_DCACHE_LINE_SIZE 32
+ #endif
+
#elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32L, OPT_MCU_KINETIS_K)
#define TUP_USBIP_CHIPIDEA_FS
#define TUP_USBIP_CHIPIDEA_FS_KINETIS
diff --git a/src/device/usbd_control.c b/src/device/usbd_control.c
index d964a75d0d..c9700fd9db 100644
--- a/src/device/usbd_control.c
+++ b/src/device/usbd_control.c
@@ -44,10 +44,6 @@ TU_ATTR_WEAK void dcd_edpt0_status_complete(uint8_t rhport, const tusb_control_r
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
-#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
-extern void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback);
-#endif
-
enum {
EDPT_CTRL_OUT = 0x00,
EDPT_CTRL_IN = 0x80
diff --git a/src/device/usbd_pvt.h b/src/device/usbd_pvt.h
index 90f37db3ed..190d6fd7fc 100644
--- a/src/device/usbd_pvt.h
+++ b/src/device/usbd_pvt.h
@@ -127,6 +127,11 @@ void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en);
bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const* p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t* ep_out, uint8_t* ep_in);
void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr);
+
+#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
+void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/src/portable/chipidea/ci_hs/ci_hs_imxrt.h b/src/portable/chipidea/ci_hs/ci_hs_imxrt.h
index c59c107ff6..75d1d55b8a 100644
--- a/src/portable/chipidea/ci_hs/ci_hs_imxrt.h
+++ b/src/portable/chipidea/ci_hs/ci_hs_imxrt.h
@@ -56,14 +56,23 @@ static const ci_hs_controller_t _ci_controller[] =
#define CI_HS_REG(_port) ((ci_hs_regs_t*) _ci_controller[_port].reg_base)
//------------- DCD -------------//
-#define CI_DCD_INT_ENABLE(_p) NVIC_EnableIRQ (_ci_controller[_p].irqnum)
-#define CI_DCD_INT_DISABLE(_p) NVIC_DisableIRQ(_ci_controller[_p].irqnum)
+#define CI_DCD_INT_ENABLE(_p) NVIC_EnableIRQ ((IRQn_Type)_ci_controller[_p].irqnum)
+#define CI_DCD_INT_DISABLE(_p) NVIC_DisableIRQ((IRQn_Type)_ci_controller[_p].irqnum)
//------------- HCD -------------//
-#define CI_HCD_INT_ENABLE(_p) NVIC_EnableIRQ (_ci_controller[_p].irqnum)
-#define CI_HCD_INT_DISABLE(_p) NVIC_DisableIRQ(_ci_controller[_p].irqnum)
+#define CI_HCD_INT_ENABLE(_p) NVIC_EnableIRQ ((IRQn_Type)_ci_controller[_p].irqnum)
+#define CI_HCD_INT_DISABLE(_p) NVIC_DisableIRQ((IRQn_Type)_ci_controller[_p].irqnum)
//------------- DCache -------------//
+#if CFG_TUD_MEM_DCACHE_ENABLE || CFG_TUH_MEM_DCACHE_ENABLE
+#if __CORTEX_M == 7
+TU_ATTR_ALWAYS_INLINE static inline uint32_t round_up_to_cache_line_size(uint32_t size) {
+ if (size & (CFG_TUD_MEM_DCACHE_LINE_SIZE-1)) {
+ size = (size & ~(CFG_TUD_MEM_DCACHE_LINE_SIZE-1)) + CFG_TUD_MEM_DCACHE_LINE_SIZE;
+ }
+ return size;
+}
+
TU_ATTR_ALWAYS_INLINE static inline bool imxrt_is_cache_mem(uintptr_t addr) {
return !(0x20000000 <= addr && addr < 0x20100000);
}
@@ -72,6 +81,7 @@ TU_ATTR_ALWAYS_INLINE static inline bool imxrt_dcache_clean(void const* addr, ui
const uintptr_t addr32 = (uintptr_t) addr;
if (imxrt_is_cache_mem(addr32)) {
TU_ASSERT(tu_is_aligned32(addr32));
+ data_size = round_up_to_cache_line_size(data_size);
SCB_CleanDCache_by_Addr((uint32_t *) addr32, (int32_t) data_size);
}
return true;
@@ -84,6 +94,7 @@ TU_ATTR_ALWAYS_INLINE static inline bool imxrt_dcache_invalidate(void const* add
// *very* careful when we do it. If we're not aligned, then we risk resetting
// values back to their RAM state.
TU_ASSERT(tu_is_aligned32(addr32));
+ data_size = round_up_to_cache_line_size(data_size);
SCB_InvalidateDCache_by_Addr((void*) addr32, (int32_t) data_size);
}
return true;
@@ -93,9 +104,15 @@ TU_ATTR_ALWAYS_INLINE static inline bool imxrt_dcache_clean_invalidate(void cons
const uintptr_t addr32 = (uintptr_t) addr;
if (imxrt_is_cache_mem(addr32)) {
TU_ASSERT(tu_is_aligned32(addr32));
+ data_size = round_up_to_cache_line_size(data_size);
SCB_CleanInvalidateDCache_by_Addr((uint32_t *) addr32, (int32_t) data_size);
}
return true;
}
+#elif __CORTEX_M == 4
+#error "Secondary M4 core's cache controller is not supported yet."
+#endif
+#endif
+
#endif
diff --git a/src/portable/chipidea/ci_hs/dcd_ci_hs.c b/src/portable/chipidea/ci_hs/dcd_ci_hs.c
index d9f7ca8eae..a716dc24ca 100644
--- a/src/portable/chipidea/ci_hs/dcd_ci_hs.c
+++ b/src/portable/chipidea/ci_hs/dcd_ci_hs.c
@@ -34,17 +34,19 @@
#if CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX
#include "ci_hs_imxrt.h"
- bool dcd_dcache_clean(void const* addr, uint32_t data_size) {
- return imxrt_dcache_clean(addr, data_size);
- }
+#if CFG_TUD_MEM_DCACHE_ENABLE
+bool dcd_dcache_clean(void const* addr, uint32_t data_size) {
+ return imxrt_dcache_clean(addr, data_size);
+}
- bool dcd_dcache_invalidate(void const* addr, uint32_t data_size) {
- return imxrt_dcache_invalidate(addr, data_size);
- }
+bool dcd_dcache_invalidate(void const* addr, uint32_t data_size) {
+ return imxrt_dcache_invalidate(addr, data_size);
+}
- bool dcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) {
- return imxrt_dcache_clean_invalidate(addr, data_size);
- }
+bool dcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) {
+ return imxrt_dcache_clean_invalidate(addr, data_size);
+}
+#endif
#elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX)
#include "ci_hs_lpc18_43.h"
@@ -311,9 +313,7 @@ void dcd_sof_enable(uint8_t rhport, bool en)
static void qtd_init(dcd_qtd_t* p_qtd, void * data_ptr, uint16_t total_bytes)
{
- // Force the CPU to flush the buffer. We increase the size by 31 because the call aligns the
- // address to 32-byte boundaries. Buffer must be word aligned
- dcd_dcache_clean_invalidate((uint32_t*) tu_align((uint32_t) data_ptr, 4), total_bytes + 31);
+ dcd_dcache_clean_invalidate((uint32_t*) tu_align((uint32_t) data_ptr, 4), total_bytes);
tu_memclr(p_qtd, sizeof(dcd_qtd_t));
@@ -479,7 +479,9 @@ bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t t
return true;
}
+#if !CFG_TUD_MEM_DCACHE_ENABLE
// fifo has to be aligned to 4k boundary
+// It's incompatible with dcache enabled transfer, since neither address nor size is aligned to cache line
bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16_t total_bytes)
{
uint8_t const epnum = tu_edpt_number(ep_addr);
@@ -525,8 +527,6 @@ bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16
page++;
}
}
-
- dcd_dcache_clean_invalidate((uint32_t*) tu_align((uint32_t) fifo_info.ptr_wrap, 4), total_bytes - fifo_info.len_wrap + 31);
}
else
{
@@ -541,6 +541,7 @@ bool dcd_edpt_xfer_fifo (uint8_t rhport, uint8_t ep_addr, tu_fifo_t * ff, uint16
return true;
}
+#endif
//--------------------------------------------------------------------+
// ISR
diff --git a/src/portable/chipidea/ci_hs/hcd_ci_hs.c b/src/portable/chipidea/ci_hs/hcd_ci_hs.c
index 14f8acb45e..c4c342a704 100644
--- a/src/portable/chipidea/ci_hs/hcd_ci_hs.c
+++ b/src/portable/chipidea/ci_hs/hcd_ci_hs.c
@@ -42,6 +42,7 @@
#include "ci_hs_imxrt.h"
+#if CFG_TUH_MEM_DCACHE_ENABLE
bool hcd_dcache_clean(void const* addr, uint32_t data_size) {
return imxrt_dcache_clean(addr, data_size);
}
@@ -53,6 +54,7 @@ bool hcd_dcache_invalidate(void const* addr, uint32_t data_size) {
bool hcd_dcache_clean_invalidate(void const* addr, uint32_t data_size) {
return imxrt_dcache_clean_invalidate(addr, data_size);
}
+#endif
#elif TU_CHECK_MCU(OPT_MCU_LPC18XX, OPT_MCU_LPC43XX)
diff --git a/src/tusb_option.h b/src/tusb_option.h
index dca1e4109c..86cb6d046c 100644
--- a/src/tusb_option.h
+++ b/src/tusb_option.h
@@ -31,7 +31,7 @@
// Version is release as major.minor.revision eg 1.0.0
#define TUSB_VERSION_MAJOR 0
-#define TUSB_VERSION_MINOR 17
+#define TUSB_VERSION_MINOR 18
#define TUSB_VERSION_REVISION 0
#define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION)
@@ -152,7 +152,7 @@
#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631
#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651
#define OPT_MCU_RX72N 1402 ///< Renesas RX72N
-#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families
+#define OPT_MCU_RAXXX 1403 ///< Renesas RA generic
// Mind Motion
#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327
diff --git a/test/unit-test/project.yml b/test/unit-test/project.yml
index 7fbbabfe60..6c86b0205e 100644
--- a/test/unit-test/project.yml
+++ b/test/unit-test/project.yml
@@ -1,102 +1,226 @@
----
-
-# Notes:
-# Sample project C code is not presently written to produce a release artifact.
-# As such, release build options are disabled.
-# This sample, therefore, only demonstrates running a collection of unit tests.
+# =========================================================================
+# Ceedling - Test-Centered Build System for C
+# ThrowTheSwitch.org
+# Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
+# SPDX-License-Identifier: MIT
+# =========================================================================
+---
:project:
- :use_exceptions: TRUE
+ # how to use ceedling. If you're not sure, leave this as `gem` and `?`
+ :which_ceedling: gem
+ :ceedling_version: 1.0.0
+ :verbosity: 3
+
+ # optional features. If you don't need them, keep them turned off for performance
:use_mocks: TRUE
- :use_test_preprocessor: TRUE
- :use_auxiliary_dependencies: TRUE
- :use_deep_dependencies: TRUE
+ :use_test_preprocessor: :mocks # options are :none, :mocks, :tests, or :all
+ :use_deep_dependencies: :all # options are :none, :mocks, :tests, or :all
+ :use_backtrace: :simple # options are :none, :simple, or :gdb
+ :use_decorators: :auto # decorate Ceedling's output text. options are :auto, :all, or :none
+
+ # tweak the way ceedling handles automatic tasks
:build_root: _build
-# :release_build: TRUE
:test_file_prefix: test_
- :which_ceedling: vendor/ceedling
- :ceedling_version: 0.31.1
:default_tasks:
- test:all
-#:test_build:
-# :use_assembly: TRUE
+ # performance options. If your tools start giving mysterious errors, consider
+ # dropping this to 1 to force single-tasking
+ :test_threads: 8
+ :compile_threads: 8
+
+ # enable release build (more details in release_build section below)
+ :release_build: FALSE
-#:release_build:
-# :output: MyApp.out
-# :use_assembly: FALSE
+# Specify where to find mixins and any that should be enabled automatically
+:mixins:
+ :enabled: []
+ :load_paths: []
+
+# further details to configure the way Ceedling handles test code
+:test_build:
+ :use_assembly: FALSE
+
+:test_runner:
+ # Insert additional #include statements in a generated runner
+ :includes:
+ - osal.h
+
+# further details to configure the way Ceedling handles release code
+:release_build:
+ :output: MyApp.out
+ :use_assembly: FALSE
+ :artifacts: []
+
+# Plugins are optional Ceedling features which can be enabled. Ceedling supports
+# a variety of plugins which may effect the way things are compiled, reported,
+# or may provide new command options. Refer to the readme in each plugin for
+# details on how to use it.
+:plugins:
+ :load_paths: []
+ :enabled:
+ #- beep # beeps when finished, so you don't waste time waiting for ceedling
+ - module_generator # handy for quickly creating source, header, and test templates
+ #- gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr
+ #- bullseye # test coverage using bullseye. Requires bullseye for your platform
+ #- command_hooks # write custom actions to be called at different points during the build process
+ #- compile_commands_json_db # generate a compile_commands.json file
+ #- dependencies # automatically fetch 3rd party libraries, etc.
+ #- subprojects # managing builds and test for static libraries
+ #- fake_function_framework # use FFF instead of CMock
-:environment:
+ # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired)
+ #- report_build_warnings_log
+ #- report_tests_gtestlike_stdout
+ #- report_tests_ide_stdout
+ #- report_tests_log_factory
+ - report_tests_pretty_stdout
+ #- report_tests_raw_output_log
+ #- report_tests_teamcity_stdout
+# Specify which reports you'd like from the log factory
+:report_tests_log_factory:
+ :reports:
+ - json
+ - junit
+ - cppunit
+ - html
+
+# override the default extensions for your system and toolchain
:extension:
+ #:header: .h
+ #:source: .c
+ #:assembly: .s
+ #:dependencies: .d
+ #:object: .o
:executable: .out
+ #:testpass: .pass
+ #:testfail: .fail
+ #:subprojects: .a
+# This is where Ceedling should look for your source and test files.
+# see documentation for the many options for specifying this.
:paths:
:test:
- +:test/**
- -:test/support
:source:
- ../../src/**
+ :include:
+ - ../../src/**
:support:
- test/support
+ :libraries: []
+
+# You can even specify specific files to add or remove from your test
+# and release collections. Usually it's better to use paths and let
+# Ceedling do the work for you!
+:files:
+ :test: []
+ :source: []
+# Compilation symbols to be injected into builds
+# See documentation for advanced options:
+# - Test name matchers for different symbols per test executable build
+# - Referencing symbols in multiple lists using advanced YAML
+# - Specifying symbols used during test preprocessing
:defines:
- # in order to add common defines:
- # 1) remove the trailing [] from the :common: section
- # 2) add entries to the :common: section (e.g. :test: has TEST defined)
- :common: &common_defines []
:test:
- _UNITY_TEST_
- #- *common_defines
- :test_preprocess:
- - _UNITY_TEST_
- #- *common_defines
+ :release: []
+
+ # Enable to inject name of a test as a unique compilation symbol into its respective executable build.
+ :use_test_definition: FALSE
+
+# Configure additional command line flags provided to tools used in each build step
+# :flags:
+# :release:
+# :compile: # Add '-Wall' and '--02' to compilation of all files in release target
+# - -Wall
+# - --O2
+# :test:
+# :compile:
+# '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names
+# - -pedantic
+# '*': # Add '-foo' to compilation of all files in all test executables
+# - -foo
+# Configuration Options specific to CMock. See CMock docs for details
:cmock:
- :mock_prefix: mock_
- :when_no_prototypes: :warn
- :enforce_strict_ordering: TRUE
- :plugins:
+ # Core configuration
+ :plugins: # What plugins should be used by CMock?
- :ignore
- :ignore_arg
- :return_thru_ptr
- :callback
- :array
- :treat_as:
+ :verbosity: 2 # the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose
+ :when_no_prototypes: :warn # the options being :ignore, :warn, or :error
+
+ # File configuration
+ :skeleton_path: '' # Subdirectory to store stubs when generated (default: '')
+ :mock_prefix: 'mock_' # Prefix to append to filenames for mocks
+ :mock_suffix: '' # Suffix to append to filenames for mocks
+
+ # Parser configuration
+ :strippables: ['(?:__attribute__\s*\([ (]*.*?[ )]*\)+)']
+ :attributes:
+ - __ramfunc
+ - __irq
+ - __fiq
+ - register
+ - extern
+ :c_calling_conventions:
+ - __stdcall
+ - __cdecl
+ - __fastcall
+ :treat_externs: :exclude # the options being :include or :exclud
+ :treat_inlines: :exclude # the options being :include or :exclud
+
+ # Type handling configuration
+ #:unity_helper_path: '' # specify a string of where to find a unity_helper.h file to discover custom type assertions
+ :treat_as: # optionally add additional types to map custom types
uint8: HEX8
uint16: HEX16
uint32: UINT32
int8: INT8
bool: UINT8
+ #:treat_as_array: {} # hint to cmock that these types are pointers to something
+ #:treat_as_void: [] # hint to cmock that these types are actually aliases of void
+ :memcmp_if_unknown: true # allow cmock to use the memory comparison assertions for unknown types
+ :when_ptr: :compare_data # hint to cmock how to handle pointers in general, the options being :compare_ptr, :compare_data, or :smart
-# Add -gcov to the plugins list to make sure of the gcov plugin
-# You will need to have gcov and gcovr both installed to make it work.
-# For more information on these options, see docs in plugins/gcov
-:gcov:
- :html_report: TRUE
- :html_report_type: detailed
- :html_medium_threshold: 75
- :html_high_threshold: 90
- :xml_report: FALSE
-
-:tools:
- :test_compiler:
- :executable: gcc
- :name: 'gcc compiler'
- :arguments:
- - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE #expands to -I search paths
- - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR #expands to -I search paths
- - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR #expands to all -D defined symbols
- #- -fsanitize=address
- - -c ${1} #source code input file (Ruby method call param list sub)
- - -o ${2} #object file output (Ruby method call param list sub)
- :test_linker:
- :executable: gcc
- :name: 'gcc linker'
- :arguments:
- #- -fsanitize=address
- - ${1} #list of object files to link (Ruby method call param list sub)
- - -o ${2} #executable file output (Ruby method call param list sub)
+ # Mock generation configuration
+ :weak: '' # Symbol to use to declare weak functions
+ :enforce_strict_ordering: true # Do we want cmock to enforce ordering of all function calls?
+ :fail_on_unexpected_calls: true # Do we want cmock to fail when it encounters a function call that wasn't expected?
+ :callback_include_count: true # Do we want cmock to include the number of calls to this callback, when using callbacks?
+ :callback_after_arg_check: false # Do we want cmock to enforce an argument check first when using a callback?
+ #:includes: [] # You can add additional includes here, or specify the location with the options below
+ #:includes_h_pre_orig_header: []
+ #:includes_h_post_orig_header: []
+ #:includes_c_pre_header: []
+ #:includes_c_post_header: []
+ #:array_size_type: [] # Specify a type or types that should be used for array lengths
+ #:array_size_name: 'size|len' # Specify a name or names that CMock might automatically recognize as the length of an array
+ :exclude_setjmp_h: false # Don't use setjmp when running CMock. Note that this might result in late reporting or out-of-order failures.
+
+# Configuration options specific to Unity.
+:unity:
+ :defines:
+ - UNITY_EXCLUDE_FLOAT
+
+# You can optionally have ceedling create environment variables for you before
+# performing the rest of its tasks.
+:environment: []
+# :environment:
+# # List enforces order allowing later to reference earlier with inline Ruby substitution
+# - :var1: value
+# - :var2: another value
+# - :path: # Special PATH handling with platform-specific path separators
+# - #{ENV['PATH']} # Environment variables can use inline Ruby substitution
+# - /another/path/to/include
# LIBRARIES
# These libraries are automatically injected into the build process. Those specified as
@@ -104,19 +228,210 @@
# tests or releases. These options are MERGED with the options in supplemental yaml files.
:libraries:
:placement: :end
- :flag: "${1}" # or "-L ${1}" for example
- :common: &common_libraries []
- :test:
- #- *common_libraries
- :release:
- #- *common_libraries
+ :flag: "-l${1}"
+ :path_flag: "-L ${1}"
+ :system: [] # for example, you might list 'm' to grab the math library
+ :test: []
+ :release: []
-:plugins:
- :load_paths:
- - vendor/ceedling/plugins
- :enabled:
- - stdout_pretty_tests_report
- - module_generator
- - raw_output_report
- - colour_report
+################################################################
+# PLUGIN CONFIGURATION
+################################################################
+
+# Add -gcov to the plugins list to make sure of the gcov plugin
+# You will need to have gcov and gcovr both installed to make it work.
+# For more information on these options, see docs in plugins/gcov
+:gcov:
+ :summaries: TRUE # Enable simple coverage summaries to console after tests
+ :report_task: FALSE # Disabled dedicated report generation task (this enables automatic report generation)
+ :utilities:
+ - gcovr # Use gcovr to create the specified reports (default).
+ #- ReportGenerator # Use ReportGenerator to create the specified reports.
+ :reports: # Specify one or more reports to generate.
+ # Make an HTML summary report.
+ - HtmlBasic
+ # - HtmlDetailed
+ # - Text
+ # - Cobertura
+ # - SonarQube
+ # - JSON
+ # - HtmlInline
+ # - HtmlInlineAzure
+ # - HtmlInlineAzureDark
+ # - HtmlChart
+ # - MHtml
+ # - Badges
+ # - CsvSummary
+ # - Latex
+ # - LatexSummary
+ # - PngChart
+ # - TeamCitySummary
+ # - lcov
+ # - Xml
+ # - XmlSummary
+ :gcovr:
+ # :html_artifact_filename: TestCoverageReport.html
+ # :html_title: Test Coverage Report
+ :html_medium_threshold: 75
+ :html_high_threshold: 90
+ # :html_absolute_paths: TRUE
+ # :html_encoding: UTF-8
+
+# :module_generator:
+# :project_root: ./
+# :source_root: source/
+# :inc_root: includes/
+# :test_root: tests/
+# :naming: :snake #options: :bumpy, :camel, :caps, or :snake
+# :includes:
+# :tst: []
+# :src: []
+# :boilerplates:
+# :src: ""
+# :inc: ""
+# :tst: ""
+
+# :dependencies:
+# :libraries:
+# - :name: WolfSSL
+# :source_path: third_party/wolfssl/source
+# :build_path: third_party/wolfssl/build
+# :artifact_path: third_party/wolfssl/install
+# :fetch:
+# :method: :zip
+# :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip
+# :environment:
+# - CFLAGS+=-DWOLFSSL_DTLS_ALLOW_FUTURE
+# :build:
+# - "autoreconf -i"
+# - "./configure --enable-tls13 --enable-singlethreaded"
+# - make
+# - make install
+# :artifacts:
+# :static_libraries:
+# - lib/wolfssl.a
+# :dynamic_libraries:
+# - lib/wolfssl.so
+# :includes:
+# - include/**
+
+# :subprojects:
+# :paths:
+# - :name: libprojectA
+# :source:
+# - ./subprojectA/source
+# :include:
+# - ./subprojectA/include
+# :build_root: ./subprojectA/build
+# :defines: []
+
+# :command_hooks:
+# :pre_mock_preprocess:
+# :post_mock_preprocess:
+# :pre_test_preprocess:
+# :post_test_preprocess:
+# :pre_mock_generate:
+# :post_mock_generate:
+# :pre_runner_generate:
+# :post_runner_generate:
+# :pre_compile_execute:
+# :post_compile_execute:
+# :pre_link_execute:
+# :post_link_execute:
+# :pre_test_fixture_execute:
+# :post_test_fixture_execute:
+# :pre_test:
+# :post_test:
+# :pre_release:
+# :post_release:
+# :pre_build:
+# :post_build:
+# :post_error:
+
+################################################################
+# TOOLCHAIN CONFIGURATION
+################################################################
+
+#:tools:
+# Ceedling defaults to using gcc for compiling, linking, etc.
+# As [:tools] is blank, gcc will be used (so long as it's in your system path)
+# See documentation to configure a given toolchain for use
+#:tools:
+# :test_compiler:
+# :executable: gcc
+# :name: 'gcc compiler'
+# :arguments:
+# - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE #expands to -I search paths
+# - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR #expands to -I search paths
+# - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR #expands to all -D defined symbols
+# #- -fsanitize=address
+# - -c ${1} #source code input file (Ruby method call param list sub)
+# - -o ${2} #object file output (Ruby method call param list sub)
+# :test_linker:
+# :executable: gcc
+# :name: 'gcc linker'
+# :arguments:
+# #- -fsanitize=address
+# - ${1} #list of object files to link (Ruby method call param list sub)
+# - -o ${2} #executable file output (Ruby method call param list sub)
+# :test_compiler:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_linker:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_assembler:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_fixture:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_includes_preprocessor:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_file_preprocessor:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_file_preprocessor_directives:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :test_dependencies_generator:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :release_compiler:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :release_linker:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :release_assembler:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
+# :release_dependencies_generator:
+# :executable:
+# :arguments: []
+# :name:
+# :optional: FALSE
...
diff --git a/test/unit-test/test/device/msc/test_msc_device.c b/test/unit-test/test/device/msc/test_msc_device.c
index 55b690313b..3ab46b0f9f 100644
--- a/test/unit-test/test/device/msc/test_msc_device.c
+++ b/test/unit-test/test/device/msc/test_msc_device.c
@@ -32,8 +32,8 @@
#include "tusb_fifo.h"
#include "tusb.h"
#include "usbd.h"
-TEST_FILE("usbd_control.c")
-TEST_FILE("msc_device.c")
+TEST_SOURCE_FILE("usbd_control.c")
+TEST_SOURCE_FILE("msc_device.c")
// Mock File
#include "mock_dcd.h"
diff --git a/test/unit-test/test/device/usbd/test_usbd.c b/test/unit-test/test/device/usbd/test_usbd.c
index e7c6a85783..f0153da3f2 100644
--- a/test/unit-test/test/device/usbd/test_usbd.c
+++ b/test/unit-test/test/device/usbd/test_usbd.c
@@ -29,7 +29,7 @@
#include "tusb_fifo.h"
#include "tusb.h"
#include "usbd.h"
-TEST_FILE("usbd_control.c")
+TEST_SOURCE_FILE("usbd_control.c")
// Mock File
#include "mock_dcd.h"
diff --git a/test/unit-test/vendor/ceedling/bin/ceedling b/test/unit-test/vendor/ceedling/bin/ceedling
deleted file mode 100644
index b317db2f15..0000000000
--- a/test/unit-test/vendor/ceedling/bin/ceedling
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/bin/env ruby
-
-#these are always used
-require 'rubygems'
-require 'fileutils'
-
-# Check for the main project file (either the one defined in the ENV or the default)
-main_filepath = ENV['CEEDLING_MAIN_PROJECT_FILE']
-project_found = (!main_filepath.nil? && File.exists?(main_filepath))
-if (!project_found)
- main_filepath = "project.yml"
- project_found = File.exists?(main_filepath)
-end
-
-def is_windows?
- return ((RbConfig::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false) if defined?(RbConfig)
- return ((Config::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false)
-end
-
-unless (project_found)
-#===================================== We Do Not Have A Project ================================================
-
- puts "Welcome to Ceedling!"
- require 'thor'
-
- def here
- File.dirname(__FILE__) + "/.."
- end
-
- class CeedlingTasks < Thor
- include Thor::Actions
-
- desc "new PROJECT_NAME", "create a new ceedling project"
- method_option :docs, :type => :boolean, :default => false, :desc => "Add docs in project vendor directory"
- method_option :local, :type => :boolean, :default => false, :desc => "Create a copy of Ceedling in the project vendor directory"
- method_option :gitignore, :type => :boolean, :default => false, :desc => "Create a gitignore file for ignoring ceedling generated files"
- method_option :no_configs, :type => :boolean, :default => false, :desc => "Don't install starter configuration files"
- method_option :noconfigs, :type => :boolean, :default => false
-
- #deprecated:
- method_option :no_docs, :type => :boolean, :default => false
- method_option :nodocs, :type => :boolean, :default => false
- method_option :as_gem, :type => :boolean, :default => false
- method_option :asgem, :type => :boolean, :default => false
- method_option :with_ignore, :type => :boolean, :default => false
- method_option :withignore, :type => :boolean, :default => false
- def new(name, silent = false)
- copy_assets_and_create_structure(name, silent, false, options)
- end
-
- desc "upgrade PROJECT_NAME", "upgrade ceedling for a project (not req'd if gem used)"
- def upgrade(name, silent = false)
- as_local = true
- begin
- require "yaml"
- as_local = (YAML.load_file(File.join(name, "project.yml"))[:project][:which_ceedling] != 'gem')
- rescue
- raise "ERROR: Could not find valid project file '#{yaml_path}'"
- end
- found_docs = File.exists?( File.join(name, "docs", "CeedlingPacket.md") )
- copy_assets_and_create_structure(name, silent, true, {:upgrade => true, :no_configs => true, :local => as_local, :docs => found_docs})
- end
-
- no_commands do
- def copy_assets_and_create_structure(name, silent=false, force=false, options = {})
-
- puts "WARNING: --no_docs deprecated. It is now the default. Specify -docs if you want docs installed." if (options[:no_docs] || options[:nodocs])
- puts "WARNING: --as_gem deprecated. It is now the default. Specify -local if you want ceedling installed to this project." if (options[:as_gem] || options[:asgem])
- puts "WARNING: --with_ignore deprecated. It is now called -gitignore" if (options[:with_ignore] || options[:with_ignore])
-
- use_docs = options[:docs] || false
- use_configs = !(options[:no_configs] || options[:noconfigs] || false)
- use_gem = !(options[:local])
- use_ignore = options[:gitignore] || false
- is_upgrade = options[:upgrade] || false
-
- ceedling_path = File.join(name, 'vendor', 'ceedling')
- source_path = File.join(name, 'src')
- test_path = File.join(name, 'test')
- test_support_path = File.join(name, 'test/support')
-
- # If it's not an upgrade, make sure we have the paths we expect
- if (!is_upgrade)
- [source_path, test_path, test_support_path].each do |d|
- FileUtils.mkdir_p d
- end
- end
-
- # Generate gitkeep in test support path
- FileUtils.touch(File.join(test_support_path, '.gitkeep'))
-
- # If documentation requested, create a place to dump them and do so
- doc_path = ""
- if use_docs
- doc_path = use_gem ? File.join(name, 'docs') : File.join(ceedling_path, 'docs')
- FileUtils.mkdir_p doc_path
-
- in_doc_path = lambda {|f| File.join(doc_path, f)}
-
- # Add documentation from main projects to list
- doc_files = {}
- ['docs','vendor/unity/docs','vendor/cmock/docs','vendor/cexception/docs'].each do |p|
- Dir[ File.expand_path(File.join(here, p, '*.md')) ].each do |f|
- doc_files[ File.basename(f) ] = f unless(doc_files.include? f)
- end
- end
-
- # Add documentation from plugins to list
- Dir[ File.join(here, 'plugins/**/README.md') ].each do |plugin_path|
- k = "plugin_" + plugin_path.split(/\\|\//)[-2] + ".md"
- doc_files[ k ] = File.expand_path(plugin_path)
- end
-
- # Copy all documentation
- doc_files.each_pair do |k, v|
- copy_file(v, in_doc_path.call(k), :force => force)
- end
- end
-
- # If installed locally to project, copy ceedling, unity, cmock, & supports to vendor
- unless use_gem
- FileUtils.mkdir_p ceedling_path
-
- #copy full folders from ceedling gem into project
- %w{plugins lib bin}.map do |f|
- {:src => f, :dst => File.join(ceedling_path, f)}
- end.each do |f|
- directory(f[:src], f[:dst], :force => force)
- end
-
- # mark ceedling as an executable
- File.chmod(0755, File.join(ceedling_path, 'bin', 'ceedling')) unless is_windows?
-
- #copy necessary subcomponents from ceedling gem into project
- sub_components = [
- {:src => 'vendor/c_exception/lib/', :dst => 'vendor/c_exception/lib'},
- {:src => 'vendor/cmock/config/', :dst => 'vendor/cmock/config'},
- {:src => 'vendor/cmock/lib/', :dst => 'vendor/cmock/lib'},
- {:src => 'vendor/cmock/src/', :dst => 'vendor/cmock/src'},
- {:src => 'vendor/diy/lib', :dst => 'vendor/diy/lib'},
- {:src => 'vendor/unity/auto/', :dst => 'vendor/unity/auto'},
- {:src => 'vendor/unity/src/', :dst => 'vendor/unity/src'},
- ]
-
- sub_components.each do |c|
- directory(c[:src], File.join(ceedling_path, c[:dst]), :force => force)
- end
- end
-
- # We're copying in a configuration file if we haven't said not to
- if (use_configs)
- dst_yaml = File.join(name, 'project.yml')
- src_yaml = if use_gem
- File.join(here, 'assets', 'project_as_gem.yml')
- else
- if is_windows?
- copy_file(File.join('assets', 'ceedling.cmd'), File.join(name, 'ceedling.cmd'), :force => force)
- else
- copy_file(File.join('assets', 'ceedling'), File.join(name, 'ceedling'), :force => force)
- File.chmod(0755, File.join(name, 'ceedling'))
- end
- File.join(here, 'assets', 'project_with_guts.yml')
- end
-
- # Perform the actual clone of the config file, while updating the version
- File.open(dst_yaml,'w') do |dst|
- require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb"))
- dst << File.read(src_yaml).gsub(":ceedling_version: '?'",":ceedling_version: #{Ceedling::Version::CEEDLING}")
- puts " create #{dst_yaml}"
- end
- end
-
- # Copy the gitignore file if requested
- if (use_ignore)
- copy_file(File.join('assets', 'default_gitignore'), File.join(name, '.gitignore'), :force => force)
- end
-
- unless silent
- puts "\n"
- puts "Project '#{name}' #{force ? "upgraded" : "created"}!"
- puts " - Tool documentation is located in #{doc_path}" if use_docs
- puts " - Execute 'ceedling help' from #{name} to view available test & build tasks"
- puts ''
- end
- end
- end
-
- desc "examples", "list available example projects"
- def examples()
- puts "Available sample projects:"
- FileUtils.cd(File.join(here, "examples")) do
- Dir["*"].each {|proj| puts " #{proj}"}
- end
- end
-
- desc "example PROJ_NAME [DEST]", "new specified example project (in DEST, if specified)"
- def example(proj_name, dest=nil)
- if dest.nil? then dest = proj_name end
-
- copy_assets_and_create_structure(dest, true, false, {:local=>true, :docs=>true})
-
- dest_src = File.join(dest,'src')
- dest_test = File.join(dest,'test')
- dest_project = File.join(dest,'project.yml')
-
- directory "examples/#{proj_name}/src", dest_src
- directory "examples/#{proj_name}/test", dest_test
- remove_file dest_project
- copy_file "examples/#{proj_name}/project.yml", dest_project
-
- puts "\n"
- puts "Example project '#{proj_name}' created!"
- puts " - Tool documentation is located in vendor/ceedling/docs"
- puts " - Execute 'ceedling help' to view available test & build tasks"
- puts ''
- end
-
- desc "version", "return the version of the tools installed"
- def version()
- require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb"))
- puts " Ceedling:: #{Ceedling::Version::CEEDLING}"
- puts " CMock:: #{Ceedling::Version::CMOCK}"
- puts " Unity:: #{Ceedling::Version::UNITY}"
- puts " CException:: #{Ceedling::Version::CEXCEPTION}"
- end
- end
-
- if (ARGV[0] =~ /^\-T$/)
- puts "\n(No Project Detected, Therefore Showing Options to Create Projects)"
- CeedlingTasks.tasks.each_pair do |k,v|
- puts v.usage.ljust(25,' ') + v.description
- end
- puts "\n"
- else
- CeedlingTasks.source_root here
- CeedlingTasks.start
- end
-
-#===================================== We Have A Project Already ================================================
-else
- require 'yaml'
- require 'rbconfig'
-
- #determine platform
- platform = begin
- case(RbConfig::CONFIG['host_os'])
- when /mswin|mingw|cygwin/i
- :mswin
- when /darwin/
- :osx
- else
- :linux
- end
- rescue
- :linux
- end
-
- #create our default meta-runner option set
- options = {
- :pretest => nil,
- :args => [],
- :add_path => [],
- :path_connector => (platform == :mswin) ? ";" : ":",
- :graceful_fail => false,
- :which_ceedling => (Dir.exists?("vendor/ceedling") ? "vendor/ceedling" : 'gem'),
- :default_tasks => [ 'test:all' ],
- :list_tasks => false
- }
-
- #guess that we need a special script file first if it exists
- if (platform == :mswin)
- options[:pretest] = File.exists?("#{ platform.to_s }_setup.bat") ? "#{ platform.to_s }_setup.bat" : nil
- else
- options[:pretest] = File.exists?("#{ platform.to_s }_setup.sh") ? "source #{ platform.to_s }_setup.sh" : nil
- end
-
- #merge in project settings if they can be found here
- yaml_options = YAML.load_file(main_filepath)
- if (yaml_options[:paths])
- options[:add_path] = yaml_options[:paths][:tools] || []
- else
- options[:add_path] = []
- end
- options[:graceful_fail] = yaml_options[:graceful_fail] if yaml_options[:graceful_fail]
- options[:which_ceedling] = yaml_options[:project][:which_ceedling] if (yaml_options[:project] && yaml_options[:project][:which_ceedling])
- options[:default_tasks] = yaml_options[:default_tasks] if yaml_options[:default_tasks]
-
- #sort through command line options
- ARGV.each do |v|
- case(v)
- when /^(?:new|examples?|templates?)$/
- puts "\nOops. You called ceedling with argument '#{v}'.\n" +
- " This is an operation that will create a new project... \n" +
- " but it looks like you're already in a project. If you really \n" +
- " want to do this, try moving to an empty folder.\n\n"
- abort
- when /^help$/
- options[:list_tasks] = true
- when /^-T$/
- options[:list_tasks] = true
- when /^--tasks$/
- options[:list_tasks] = true
- when /^project:(\w+)/
- ENV['CEEDLING_USER_PROJECT_FILE'] = "#{$1}.yml"
- else
- options[:args].push(v)
- end
- end
-
- #add to the path
- if (options[:add_path] && !options[:add_path].empty?)
- path = ENV["PATH"]
- options[:add_path].each do |p|
- f = File.expand_path(File.dirname(__FILE__),p)
- path = (f + options[:path_connector] + path) unless path.include? f
- end
- ENV["PATH"] = path
- end
-
- # Load Ceedling (either through the rakefile OR directly)
- if (File.exists?("rakefile.rb"))
- load 'rakefile.rb'
- else
- if (options[:which_ceedling] == 'gem')
- require 'ceedling'
- else
- load "#{options[:which_ceedling]}/lib/ceedling.rb"
- end
- Ceedling.load_project
- end
-
- Rake.application.standard_exception_handling do
- if options[:list_tasks]
- # Display helpful task list when requested. This required us to dig into Rake internals a bit
- Rake.application.define_singleton_method(:name=) {|n| @name = n}
- Rake.application.name = 'ceedling'
- Rake.application.options.show_tasks = :tasks
- Rake.application.options.show_task_pattern = /^(?!.*build).*$/
- Rake.application.display_tasks_and_comments()
- else
- task :default => options[:default_tasks]
-
- # Run our Tasks!
- Rake.application.collect_command_line_tasks(options[:args])
- Rake.application.top_level
- end
- end
- true
-#===================================================================================================================
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling.rb b/test/unit-test/vendor/ceedling/lib/ceedling.rb
deleted file mode 100644
index 063cfddd5c..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling.rb
+++ /dev/null
@@ -1,98 +0,0 @@
-##
-# This module defines the interface for interacting with and loading a project
-# with Ceedling.
-module Ceedling
- ##
- # Returns the location where the gem is installed.
- # === Return
- # _String_ - The location where the gem lives.
- def self.location
- File.join( File.dirname(__FILE__), '..')
- end
-
- ##
- # Return the path to the "built-in" plugins.
- # === Return
- # _String_ - The path where the default plugins live.
- def self.load_path
- File.join( self.location, 'plugins')
- end
-
- ##
- # Return the path to the Ceedling Rakefile
- # === Return
- # _String_
- def self.rakefile
- File.join( self.location, 'lib', 'ceedling', 'rakefile.rb' )
- end
-
- ##
- # This method selects the project file that Ceedling will use by setting the
- # CEEDLING_MAIN_PROJECT_FILE environment variable before loading the ceedling
- # rakefile. A path supplied as an argument to this method will override the
- # current value of the environment variable. If no path is supplied as an
- # argument then the existing value of the environment variable is used. If
- # the environment variable has not been set and no argument has been supplied
- # then a default path of './project.yml' will be used.
- #
- # === Arguments
- # +options+ _Hash_::
- # A hash containing the options for ceedling. Currently the following
- # options are supported:
- # * +config+ - The path to the project YAML configuration file.
- # * +root+ - The root of the project directory.
- # * +prefix+ - A prefix to prepend to plugin names in order to determine the
- # corresponding gem name.
- # * +plugins+ - The list of ceedling plugins to load
- def self.load_project(options = {})
- # Make sure our path to the yaml file is setup
- if options.has_key? :config
- ENV['CEEDLING_MAIN_PROJECT_FILE'] = options[:config]
- elsif ENV['CEEDLING_MAIN_PROJECT_FILE'].nil?
- ENV['CEEDLING_MAIN_PROJECT_FILE'] = './project.yml'
- end
-
- # Register the plugins
- if options.has_key? :plugins
- options[:plugins].each do |plugin|
- register_plugin( plugin, options[:prefix] )
- end
- end
-
- # Define the root of the project if specified
- Object.const_set('PROJECT_ROOT', options[:root]) if options.has_key? :root
-
- # Load ceedling
- load "#{self.rakefile}"
- end
-
- ##
- # Register a plugin for ceedling to use when a project is loaded. This method
- # *must* be called prior to calling the _load_project_ method.
- #
- # This method is intended to be used for loading plugins distributed via the
- # RubyGems mechanism. As such, the following gem structure is assumed for
- # plugins.
- #
- # * The gem name must be prefixed with 'ceedling-' followed by the plugin
- # name (ex. 'ceedling-bullseye')
- #
- # * The contents of the plugin must be installed into a subdirectory of
- # the gem with the same name as the plugin (ex. 'bullseye/')
- #
- # === Arguments
- # +name+ _String_:: The name of the plugin to load.
- # +prefix+ _String_::
- # (optional, default = nil) The prefix to use for the full gem name.
- def self.register_plugin(name, prefix=nil)
- # Figure out the full name of the gem and location
- prefix ||= 'ceedling-'
- gem_name = prefix + name
- gem_dir = Gem::Specification.find_by_name(gem_name).gem_dir()
-
- # Register the plugin with Ceedling
- require 'ceedling/defaults'
- DEFAULT_CEEDLING_CONFIG[:plugins][:enabled] << name
- DEFAULT_CEEDLING_CONFIG[:plugins][:load_paths] << gem_dir
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/build_invoker_utils.rb b/test/unit-test/vendor/ceedling/lib/ceedling/build_invoker_utils.rb
deleted file mode 100644
index 31abe6d99d..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/build_invoker_utils.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'ceedling/constants'
-
-##
-# Utilities for raiser and reporting errors during building.
-class BuildInvokerUtils
-
- constructor :configurator, :streaminator
-
- ##
- # Processes exceptions and tries to display a useful message for the user.
- #
- # ==== Attributes
- #
- # * _exception_: The exception given by a rescue statement.
- # * _context_: A symbol representing where in the build the exception
- # occurs.
- # * _test_build_: A bool to signify if the exception occurred while building
- # from test or source.
- #
- def process_exception(exception, context, test_build=true)
- if (exception.message =~ /Don't know how to build task '(.+)'/i)
- error_header = "ERROR: Rake could not find file referenced in source"
- error_header += " or test" if (test_build)
- error_header += ": '#{$1}'. Possible stale dependency."
-
- @streaminator.stderr_puts( error_header )
-
- if (@configurator.project_use_deep_dependencies)
- help_message = "Try fixing #include statements or adding missing file. Then run '#{REFRESH_TASK_ROOT}#{context.to_s}' task and try again."
- @streaminator.stderr_puts( help_message )
- end
-
- raise ''
- else
- raise exception
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator.rb
deleted file mode 100644
index fd7451fa71..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-
-class Cacheinator
-
- constructor :cacheinator_helper, :file_path_utils, :file_wrapper, :yaml_wrapper
-
- def cache_test_config(hash)
- @yaml_wrapper.dump( @file_path_utils.form_test_build_cache_path( INPUT_CONFIGURATION_CACHE_FILE), hash )
- end
-
- def cache_release_config(hash)
- @yaml_wrapper.dump( @file_path_utils.form_release_build_cache_path( INPUT_CONFIGURATION_CACHE_FILE ), hash )
- end
-
-
- def diff_cached_test_file( filepath )
- cached_filepath = @file_path_utils.form_test_build_cache_path( filepath )
-
- if (@file_wrapper.exist?( cached_filepath ) and (!@file_wrapper.compare( filepath, cached_filepath )))
- @file_wrapper.cp(filepath, cached_filepath, {:preserve => false})
- return filepath
- elsif (!@file_wrapper.exist?( cached_filepath ))
- @file_wrapper.cp(filepath, cached_filepath, {:preserve => false})
- return filepath
- end
-
- return cached_filepath
- end
-
- def diff_cached_test_config?(hash)
- cached_filepath = @file_path_utils.form_test_build_cache_path(INPUT_CONFIGURATION_CACHE_FILE)
-
- return @cacheinator_helper.diff_cached_config?( cached_filepath, hash )
- end
-
- def diff_cached_test_defines?(files)
- cached_filepath = @file_path_utils.form_test_build_cache_path(DEFINES_DEPENDENCY_CACHE_FILE)
-
- return @cacheinator_helper.diff_cached_defines?( cached_filepath, files )
- end
-
- def diff_cached_release_config?(hash)
- cached_filepath = @file_path_utils.form_release_build_cache_path(INPUT_CONFIGURATION_CACHE_FILE)
-
- return @cacheinator_helper.diff_cached_config?( cached_filepath, hash )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator_helper.rb
deleted file mode 100644
index b7fa5863f3..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/cacheinator_helper.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-
-class CacheinatorHelper
-
- constructor :file_wrapper, :yaml_wrapper
-
- def diff_cached_config?(cached_filepath, hash)
- return false if ( not @file_wrapper.exist?(cached_filepath) )
- return true if (@yaml_wrapper.load(cached_filepath) != hash)
- return false
- end
-
- def diff_cached_defines?(cached_filepath, files)
- changed_defines = false
- current_defines = COLLECTION_DEFINES_TEST_AND_VENDOR.reject(&:empty?)
-
- current_dependencies = Hash[files.collect { |source| [source, current_defines.dup] }]
- if not @file_wrapper.exist?(cached_filepath)
- @yaml_wrapper.dump(cached_filepath, current_dependencies)
- return changed_defines
- end
-
- dependencies = @yaml_wrapper.load(cached_filepath)
- common_dependencies = current_dependencies.select { |file, defines| dependencies.has_key?(file) }
-
- if dependencies.values_at(*common_dependencies.keys) != common_dependencies.values
- changed_defines = true
- end
-
- dependencies.merge!(current_dependencies)
- @yaml_wrapper.dump(cached_filepath, dependencies)
-
- return changed_defines
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/cmock_builder.rb b/test/unit-test/vendor/ceedling/lib/ceedling/cmock_builder.rb
deleted file mode 100644
index 82ef961355..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/cmock_builder.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'cmock'
-
-class CmockBuilder
-
- attr_accessor :cmock
-
- def setup
- @cmock = nil
- end
-
- def manufacture(cmock_config)
- @cmock = CMock.new(cmock_config)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/configurator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/configurator.rb
deleted file mode 100644
index 8dc11aa5a3..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/configurator.rb
+++ /dev/null
@@ -1,381 +0,0 @@
-require 'ceedling/defaults'
-require 'ceedling/constants'
-require 'ceedling/file_path_utils'
-require 'deep_merge'
-
-
-
-class Configurator
-
- attr_reader :project_config_hash, :script_plugins, :rake_plugins
- attr_accessor :project_logging, :project_debug, :project_verbosity, :sanity_checks
-
- constructor(:configurator_setup, :configurator_builder, :configurator_plugins, :cmock_builder, :yaml_wrapper, :system_wrapper) do
- @project_logging = false
- @project_debug = false
- @project_verbosity = Verbosity::NORMAL
- @sanity_checks = TestResultsSanityChecks::NORMAL
- end
-
- def setup
- # special copy of cmock config to provide to cmock for construction
- @cmock_config_hash = {}
-
- # note: project_config_hash is an instance variable so constants and accessors created
- # in eval() statements in build() have something of proper scope and persistence to reference
- @project_config_hash = {}
- @project_config_hash_backup = {}
-
- @script_plugins = []
- @rake_plugins = []
- end
-
-
- def replace_flattened_config(config)
- @project_config_hash.merge!(config)
- @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
- end
-
-
- def store_config
- @project_config_hash_backup = @project_config_hash.clone
- end
-
-
- def restore_config
- @project_config_hash = @project_config_hash_backup
- @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
- end
-
-
- def reset_defaults(config)
- [:test_compiler,
- :test_linker,
- :test_fixture,
- :test_includes_preprocessor,
- :test_file_preprocessor,
- :test_file_preprocessor_directives,
- :test_dependencies_generator,
- :release_compiler,
- :release_assembler,
- :release_linker,
- :release_dependencies_generator].each do |tool|
- config[:tools].delete(tool) if (not (config[:tools][tool].nil?))
- end
- end
-
-
- # The default values defined in defaults.rb (eg. DEFAULT_TOOLS_TEST) are populated
- # into @param config
- def populate_defaults(config)
- new_config = DEFAULT_CEEDLING_CONFIG.deep_clone
- new_config.deep_merge!(config)
- config.replace(new_config)
-
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST )
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_PREPROCESSORS ) if (config[:project][:use_test_preprocessor])
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_DEPENDENCIES ) if (config[:project][:use_deep_dependencies])
-
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE ) if (config[:project][:release_build])
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_ASSEMBLER ) if (config[:project][:release_build] and config[:release_build][:use_assembly])
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_DEPENDENCIES ) if (config[:project][:release_build] and config[:project][:use_deep_dependencies])
- end
-
-
- def populate_unity_defaults(config)
- unity = config[:unity] || {}
- @runner_config = unity.merge(@runner_config || config[:test_runner] || {})
- end
-
- def populate_cmock_defaults(config)
- # cmock has its own internal defaults handling, but we need to set these specific values
- # so they're present for the build environment to access;
- # note: these need to end up in the hash given to initialize cmock for this to be successful
- cmock = config[:cmock] || {}
-
- # yes, we're duplicating the default mock_prefix in cmock, but it's because we need CMOCK_MOCK_PREFIX always available in Ceedling's environment
- cmock[:mock_prefix] = 'Mock' if (cmock[:mock_prefix].nil?)
-
- # just because strict ordering is the way to go
- cmock[:enforce_strict_ordering] = true if (cmock[:enforce_strict_ordering].nil?)
-
- cmock[:mock_path] = File.join(config[:project][:build_root], TESTS_BASE_PATH, 'mocks') if (cmock[:mock_path].nil?)
- cmock[:verbosity] = @project_verbosity if (cmock[:verbosity].nil?)
-
- cmock[:plugins] = [] if (cmock[:plugins].nil?)
- cmock[:plugins].map! { |plugin| plugin.to_sym }
- cmock[:plugins] << (:cexception) if (!cmock[:plugins].include?(:cexception) and (config[:project][:use_exceptions]))
- cmock[:plugins].uniq!
-
- cmock[:unity_helper] = false if (cmock[:unity_helper].nil?)
-
- if (cmock[:unity_helper])
- cmock[:unity_helper] = [cmock[:unity_helper]] if cmock[:unity_helper].is_a? String
- cmock[:includes] += cmock[:unity_helper].map{|helper| File.basename(helper) }
- cmock[:includes].uniq!
- end
-
- @runner_config = cmock.merge(@runner_config || config[:test_runner] || {})
-
- @cmock_builder.manufacture(cmock)
- end
-
-
- def get_runner_config
- @runner_config
- end
-
-
- # grab tool names from yaml and insert into tool structures so available for error messages
- # set up default values
- def tools_setup(config)
- config[:tools].each_key do |name|
- tool = config[:tools][name]
-
- # populate name if not given
- tool[:name] = name.to_s if (tool[:name].nil?)
-
- # handle inline ruby string substitution in executable
- if (tool[:executable] =~ RUBY_STRING_REPLACEMENT_PATTERN)
- tool[:executable].replace(@system_wrapper.module_eval(tool[:executable]))
- end
-
- # populate stderr redirect option
- tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?)
-
- # populate background execution option
- tool[:background_exec] = BackgroundExec::NONE if (tool[:background_exec].nil?)
-
- # populate optional option to control verification of executable in search paths
- tool[:optional] = false if (tool[:optional].nil?)
- end
- end
-
-
- def tools_supplement_arguments(config)
- tools_name_prefix = 'tools_'
- config[:tools].each_key do |name|
- tool = @project_config_hash[(tools_name_prefix + name.to_s).to_sym]
-
- # smoosh in extra arguments if specified at top-level of config (useful for plugins & default gcc tools)
- # arguments are squirted in at _end_ of list
- top_level_tool = (tools_name_prefix + name.to_s).to_sym
- if (not config[top_level_tool].nil?)
- # adding and flattening is not a good idea: might over-flatten if there's array nesting in tool args
- tool[:arguments].concat config[top_level_tool][:arguments]
- end
- end
- end
-
-
- def find_and_merge_plugins(config)
- # plugins must be loaded before generic path evaluation & magic that happen later;
- # perform path magic here as discrete step
- config[:plugins][:load_paths].each do |path|
- path.replace(@system_wrapper.module_eval(path)) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
- FilePathUtils::standardize(path)
- end
-
- config[:plugins][:load_paths] << FilePathUtils::standardize(Ceedling.load_path)
- config[:plugins][:load_paths].uniq!
-
- paths_hash = @configurator_plugins.add_load_paths(config)
-
- @rake_plugins = @configurator_plugins.find_rake_plugins(config, paths_hash)
- @script_plugins = @configurator_plugins.find_script_plugins(config, paths_hash)
- config_plugins = @configurator_plugins.find_config_plugins(config, paths_hash)
- plugin_yml_defaults = @configurator_plugins.find_plugin_yml_defaults(config, paths_hash)
- plugin_hash_defaults = @configurator_plugins.find_plugin_hash_defaults(config, paths_hash)
-
- config_plugins.each do |plugin|
- plugin_config = @yaml_wrapper.load(plugin)
- config.deep_merge(plugin_config)
- end
-
- plugin_yml_defaults.each do |defaults|
- @configurator_builder.populate_defaults( config, @yaml_wrapper.load(defaults) )
- end
-
- plugin_hash_defaults.each do |defaults|
- @configurator_builder.populate_defaults( config, defaults )
- end
-
- # special plugin setting for results printing
- config[:plugins][:display_raw_test_results] = true if (config[:plugins][:display_raw_test_results].nil?)
-
- paths_hash.each_pair { |name, path| config[:plugins][name] = path }
- end
-
-
- def merge_imports(config)
- if config[:import]
- if config[:import].is_a? Array
- until config[:import].empty?
- path = config[:import].shift
- path = @system_wrapper.module_eval(path) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
- config.deep_merge!(@yaml_wrapper.load(path))
- end
- else
- config[:import].each_value do |path|
- if !path.nil?
- path = @system_wrapper.module_eval(path) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
- config.deep_merge!(@yaml_wrapper.load(path))
- end
- end
- end
- end
- config.delete(:import)
- end
-
-
- def eval_environment_variables(config)
- config[:environment].each do |hash|
- key = hash.keys[0]
- value = hash[key]
- items = []
-
- interstitial = ((key == :path) ? File::PATH_SEPARATOR : '')
- items = ((value.class == Array) ? hash[key] : [value])
-
- items.each do |item|
- if item.is_a? String and item =~ RUBY_STRING_REPLACEMENT_PATTERN
- item.replace( @system_wrapper.module_eval( item ) )
- end
- end
- hash[key] = items.join( interstitial )
-
- @system_wrapper.env_set( key.to_s.upcase, hash[key] )
- end
- end
-
-
- def eval_paths(config)
- # [:plugins]:[load_paths] already handled
-
- paths = [ # individual paths that don't follow convention processed below
- config[:project][:build_root],
- config[:release_build][:artifacts]]
-
- eval_path_list( paths )
-
- config[:paths].each_pair { |collection, paths| eval_path_list( paths ) }
-
- config[:files].each_pair { |collection, files| eval_path_list( files ) }
-
- # all other paths at secondary hash key level processed by convention:
- # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are evaluated
- config.each_pair { |parent, child| eval_path_list( collect_path_list( child ) ) }
- end
-
-
- def standardize_paths(config)
- # [:plugins]:[load_paths] already handled
-
- paths = [ # individual paths that don't follow convention processed below
- config[:project][:build_root],
- config[:release_build][:artifacts]] # cmock path in case it was explicitly set in config
-
- paths.flatten.each { |path| FilePathUtils::standardize( path ) }
-
- config[:paths].each_pair do |collection, paths|
- # ensure that list is an array (i.e. handle case of list being a single string,
- # or a multidimensional array)
- config[:paths][collection] = [paths].flatten.map{|path| FilePathUtils::standardize( path )}
- end
-
- config[:files].each_pair { |collection, files| files.each{ |path| FilePathUtils::standardize( path ) } }
-
- config[:tools].each_pair { |tool, config| FilePathUtils::standardize( config[:executable] ) if (config.include? :executable) }
-
- # all other paths at secondary hash key level processed by convention:
- # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are standardized
- config.each_pair do |parent, child|
- collect_path_list( child ).each { |path| FilePathUtils::standardize( path ) }
- end
- end
-
-
- def validate(config)
- # collect felonies and go straight to jail
- raise if (not @configurator_setup.validate_required_sections( config ))
-
- # collect all misdemeanors, everybody on probation
- blotter = []
- blotter << @configurator_setup.validate_required_section_values( config )
- blotter << @configurator_setup.validate_paths( config )
- blotter << @configurator_setup.validate_tools( config )
- blotter << @configurator_setup.validate_plugins( config )
-
- raise if (blotter.include?( false ))
- end
-
-
- # create constants and accessors (attached to this object) from given hash
- def build(config, *keys)
- # create flattened & expanded configuration hash
- built_config = @configurator_setup.build_project_config( config, @configurator_builder.flattenify( config ) )
-
- @project_config_hash = built_config.clone
- store_config()
-
- @configurator_setup.build_constants_and_accessors(built_config, binding())
-
- # top-level keys disappear when we flatten, so create global constants & accessors to any specified keys
- keys.each do |key|
- hash = { key => config[key] }
- @configurator_setup.build_constants_and_accessors(hash, binding())
- end
- end
-
-
- # add to constants and accessors as post build step
- def build_supplement(config_base, config_more)
- # merge in our post-build additions to base configuration hash
- config_base.deep_merge!( config_more )
-
- # flatten our addition hash
- config_more_flattened = @configurator_builder.flattenify( config_more )
-
- # merge our flattened hash with built hash from previous build
- @project_config_hash.deep_merge!( config_more_flattened )
- store_config()
-
- # create more constants and accessors
- @configurator_setup.build_constants_and_accessors(config_more_flattened, binding())
-
- # recreate constants & update accessors with new merged, base values
- config_more.keys.each do |key|
- hash = { key => config_base[key] }
- @configurator_setup.build_constants_and_accessors(hash, binding())
- end
- end
-
-
- def insert_rake_plugins(plugins)
- plugins.each do |plugin|
- @project_config_hash[:project_rakefile_component_files] << plugin
- end
- end
-
- ### private ###
-
- private
-
- def collect_path_list( container )
- paths = []
- container.each_key { |key| paths << container[key] if (key.to_s =~ /_path(s)?$/) } if (container.class == Hash)
- return paths.flatten
- end
-
- def eval_path_list( paths )
- if paths.kind_of?(Array)
- paths = Array.new(paths)
- end
-
- paths.flatten.each do |path|
- path.replace( @system_wrapper.module_eval( path ) ) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
- end
- end
-
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_builder.rb b/test/unit-test/vendor/ceedling/lib/ceedling/configurator_builder.rb
deleted file mode 100644
index f202d8a65d..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_builder.rb
+++ /dev/null
@@ -1,475 +0,0 @@
-require 'rubygems'
-require 'rake' # for ext() method
-require 'ceedling/file_path_utils' # for class methods
-require 'ceedling/defaults'
-require 'ceedling/constants' # for Verbosity constants class & base file paths
-
-
-
-class ConfiguratorBuilder
-
- constructor :file_system_utils, :file_wrapper, :system_wrapper
-
-
- def build_global_constants(config)
- config.each_pair do |key, value|
- formatted_key = key.to_s.upcase
- # undefine global constant if it already exists
- Object.send(:remove_const, formatted_key.to_sym) if @system_wrapper.constants_include?(formatted_key)
- # create global constant
- Object.module_eval("#{formatted_key} = value")
- end
- end
-
-
- def build_accessor_methods(config, context)
- config.each_pair do |key, value|
- # fill configurator object with accessor methods
- eval("def #{key.to_s.downcase}() return @project_config_hash[:#{key.to_s}] end", context)
- end
- end
-
-
- # create a flattened hash from the original configuration structure
- def flattenify(config)
- new_hash = {}
-
- config.each_key do | parent |
-
- # gracefully handle empty top-level entries
- next if (config[parent].nil?)
-
- case config[parent]
- when Array
- config[parent].each do |hash|
- key = "#{parent.to_s.downcase}_#{hash.keys[0].to_s.downcase}".to_sym
- new_hash[key] = hash[hash.keys[0]]
- end
- when Hash
- config[parent].each_pair do | child, value |
- key = "#{parent.to_s.downcase}_#{child.to_s.downcase}".to_sym
- new_hash[key] = value
- end
- # handle entries with no children, only values
- else
- new_hash["#{parent.to_s.downcase}".to_sym] = config[parent]
- end
-
- end
-
- return new_hash
- end
-
-
- def populate_defaults(config, defaults)
- defaults.keys.sort.each do |section|
- defaults[section].keys.sort.each do |entry|
- config[section] = {} if config[section].nil?
- config[section][entry] = defaults[section][entry].deep_clone if (config[section][entry].nil?)
- end
- end
- end
-
-
- def clean(in_hash)
- # ensure that include files inserted into test runners have file extensions & proper ones at that
- in_hash[:test_runner_includes].map!{|include| include.ext(in_hash[:extension_header])}
- end
-
-
- def set_build_paths(in_hash)
- out_hash = {}
-
- project_build_artifacts_root = File.join(in_hash[:project_build_root], 'artifacts')
- project_build_tests_root = File.join(in_hash[:project_build_root], TESTS_BASE_PATH)
- project_build_release_root = File.join(in_hash[:project_build_root], RELEASE_BASE_PATH)
-
- paths = [
- [:project_build_artifacts_root, project_build_artifacts_root, true ],
- [:project_build_tests_root, project_build_tests_root, true ],
- [:project_build_release_root, project_build_release_root, in_hash[:project_release_build] ],
-
- [:project_test_artifacts_path, File.join(project_build_artifacts_root, TESTS_BASE_PATH), true ],
- [:project_test_runners_path, File.join(project_build_tests_root, 'runners'), true ],
- [:project_test_results_path, File.join(project_build_tests_root, 'results'), true ],
- [:project_test_build_output_path, File.join(project_build_tests_root, 'out'), true ],
- [:project_test_build_output_asm_path, File.join(project_build_tests_root, 'out', 'asm'), true ],
- [:project_test_build_output_c_path, File.join(project_build_tests_root, 'out', 'c'), true ],
- [:project_test_build_cache_path, File.join(project_build_tests_root, 'cache'), true ],
- [:project_test_dependencies_path, File.join(project_build_tests_root, 'dependencies'), true ],
-
- [:project_release_artifacts_path, File.join(project_build_artifacts_root, RELEASE_BASE_PATH), in_hash[:project_release_build] ],
- [:project_release_build_cache_path, File.join(project_build_release_root, 'cache'), in_hash[:project_release_build] ],
- [:project_release_build_output_path, File.join(project_build_release_root, 'out'), in_hash[:project_release_build] ],
- [:project_release_build_output_asm_path, File.join(project_build_release_root, 'out', 'asm'), in_hash[:project_release_build] ],
- [:project_release_build_output_c_path, File.join(project_build_release_root, 'out', 'c'), in_hash[:project_release_build] ],
- [:project_release_dependencies_path, File.join(project_build_release_root, 'dependencies'), in_hash[:project_release_build] ],
-
- [:project_log_path, File.join(in_hash[:project_build_root], 'logs'), true ],
- [:project_temp_path, File.join(in_hash[:project_build_root], 'temp'), true ],
-
- [:project_test_preprocess_includes_path, File.join(project_build_tests_root, 'preprocess/includes'), in_hash[:project_use_test_preprocessor] ],
- [:project_test_preprocess_files_path, File.join(project_build_tests_root, 'preprocess/files'), in_hash[:project_use_test_preprocessor] ],
- ]
-
- out_hash[:project_build_paths] = []
-
- # fetch already set mock path
- out_hash[:project_build_paths] << in_hash[:cmock_mock_path] if (in_hash[:project_use_mocks])
-
- paths.each do |path|
- build_path_name = path[0]
- build_path = path[1]
- build_path_add_condition = path[2]
-
- # insert path into build paths if associated with true condition
- out_hash[:project_build_paths] << build_path if build_path_add_condition
- # set path symbol name and path for each entry in paths array
- out_hash[build_path_name] = build_path
- end
-
- return out_hash
- end
-
-
- def set_force_build_filepaths(in_hash)
- out_hash = {}
-
- out_hash[:project_test_force_rebuild_filepath] = File.join( in_hash[:project_test_dependencies_path], 'force_build' )
- out_hash[:project_release_force_rebuild_filepath] = File.join( in_hash[:project_release_dependencies_path], 'force_build' ) if (in_hash[:project_release_build])
-
- return out_hash
- end
-
-
- def set_rakefile_components(in_hash)
- out_hash = {
- :project_rakefile_component_files =>
- [File.join(CEEDLING_LIB, 'ceedling', 'tasks_base.rake'),
- File.join(CEEDLING_LIB, 'ceedling', 'tasks_filesystem.rake'),
- File.join(CEEDLING_LIB, 'ceedling', 'tasks_tests.rake'),
- File.join(CEEDLING_LIB, 'ceedling', 'tasks_vendor.rake'),
- File.join(CEEDLING_LIB, 'ceedling', 'rules_tests.rake')]}
-
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_cmock.rake') if (in_hash[:project_use_mocks])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_preprocess.rake') if (in_hash[:project_use_test_preprocessor])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_tests_deep_dependencies.rake') if (in_hash[:project_use_deep_dependencies])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'tasks_tests_deep_dependencies.rake') if (in_hash[:project_use_deep_dependencies])
-
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_release_deep_dependencies.rake') if (in_hash[:project_release_build] and in_hash[:project_use_deep_dependencies])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'rules_release.rake') if (in_hash[:project_release_build])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'tasks_release_deep_dependencies.rake') if (in_hash[:project_release_build] and in_hash[:project_use_deep_dependencies])
- out_hash[:project_rakefile_component_files] << File.join(CEEDLING_LIB, 'ceedling', 'tasks_release.rake') if (in_hash[:project_release_build])
-
- return out_hash
- end
-
-
- def set_release_target(in_hash)
- return {} if (not in_hash[:project_release_build])
-
- release_target_file = ((in_hash[:release_build_output].nil?) ? (DEFAULT_RELEASE_TARGET_NAME.ext(in_hash[:extension_executable])) : in_hash[:release_build_output])
- release_map_file = ((in_hash[:release_build_output].nil?) ? (DEFAULT_RELEASE_TARGET_NAME.ext(in_hash[:extension_map])) : in_hash[:release_build_output].ext(in_hash[:extension_map]))
-
- return {
- # tempted to make a helper method in file_path_utils? stop right there, pal. you'll introduce a cyclical dependency
- :project_release_build_target => File.join(in_hash[:project_build_release_root], release_target_file),
- :project_release_build_map => File.join(in_hash[:project_build_release_root], release_map_file)
- }
- end
-
-
- def collect_project_options(in_hash)
- options = []
-
- in_hash[:project_options_paths].each do |path|
- options << @file_wrapper.directory_listing( File.join(path, '*.yml') )
- end
-
- return {
- :collection_project_options => options.flatten
- }
- end
-
-
- def expand_all_path_globs(in_hash)
- out_hash = {}
- path_keys = []
-
- in_hash.each_key do |key|
- next if (not key.to_s[0..4] == 'paths')
- path_keys << key
- end
-
- # sorted to provide assured order of traversal in test calls on mocks
- path_keys.sort.each do |key|
- out_hash["collection_#{key.to_s}".to_sym] = @file_system_utils.collect_paths( in_hash[key] )
- end
-
- return out_hash
- end
-
-
- def collect_source_and_include_paths(in_hash)
- return {
- :collection_paths_source_and_include =>
- ( in_hash[:collection_paths_source] +
- in_hash[:collection_paths_include] ).select {|x| File.directory?(x)}
- }
- end
-
-
- def collect_source_include_vendor_paths(in_hash)
- extra_paths = []
- extra_paths << File.join(in_hash[:cexception_vendor_path], CEXCEPTION_LIB_PATH) if (in_hash[:project_use_exceptions])
-
- return {
- :collection_paths_source_include_vendor =>
- in_hash[:collection_paths_source_and_include] +
- extra_paths
- }
- end
-
-
- def collect_test_support_source_include_paths(in_hash)
- return {
- :collection_paths_test_support_source_include =>
- (in_hash[:collection_paths_test] +
- in_hash[:collection_paths_support] +
- in_hash[:collection_paths_source] +
- in_hash[:collection_paths_include] ).select {|x| File.directory?(x)}
- }
- end
-
-
- def collect_vendor_paths(in_hash)
- return {:collection_paths_vendor => get_vendor_paths(in_hash)}
- end
-
-
- def collect_test_support_source_include_vendor_paths(in_hash)
- return {
- :collection_paths_test_support_source_include_vendor =>
- get_vendor_paths(in_hash) +
- in_hash[:collection_paths_test_support_source_include]
- }
- end
-
-
- def collect_tests(in_hash)
- all_tests = @file_wrapper.instantiate_file_list
-
- in_hash[:collection_paths_test].each do |path|
- all_tests.include( File.join(path, "#{in_hash[:project_test_file_prefix]}*#{in_hash[:extension_source]}") )
- end
-
- @file_system_utils.revise_file_list( all_tests, in_hash[:files_test] )
-
- return {:collection_all_tests => all_tests}
- end
-
-
- def collect_assembly(in_hash)
- all_assembly = @file_wrapper.instantiate_file_list
-
- return {:collection_all_assembly => all_assembly} if ((not in_hash[:release_build_use_assembly]) && (not in_hash[:test_build_use_assembly]))
-
- # Sprinkle in all assembly files we can find in the source folders
- in_hash[:collection_paths_source].each do |path|
- all_assembly.include( File.join(path, "*#{in_hash[:extension_assembly]}") )
- end
-
- # Also add all assembly files we can find in the support folders
- in_hash[:collection_paths_support].each do |path|
- all_assembly.include( File.join(path, "*#{in_hash[:extension_assembly]}") )
- end
-
- # Also add files that we are explicitly adding via :files:assembly: section
- @file_system_utils.revise_file_list( all_assembly, in_hash[:files_assembly] )
-
- return {:collection_all_assembly => all_assembly}
- end
-
-
- def collect_source(in_hash)
- all_source = @file_wrapper.instantiate_file_list
- in_hash[:collection_paths_source].each do |path|
- if File.exists?(path) and not File.directory?(path)
- all_source.include( path )
- else
- all_source.include( File.join(path, "*#{in_hash[:extension_source]}") )
- end
- end
- @file_system_utils.revise_file_list( all_source, in_hash[:files_source] )
-
- return {:collection_all_source => all_source}
- end
-
-
- def collect_headers(in_hash)
- all_headers = @file_wrapper.instantiate_file_list
-
- paths =
- in_hash[:collection_paths_test] +
- in_hash[:collection_paths_support] +
- in_hash[:collection_paths_source] +
- in_hash[:collection_paths_include]
-
- paths.each do |path|
- all_headers.include( File.join(path, "*#{in_hash[:extension_header]}") )
- end
-
- @file_system_utils.revise_file_list( all_headers, in_hash[:files_include] )
-
- return {:collection_all_headers => all_headers}
- end
-
-
- def collect_release_existing_compilation_input(in_hash)
- release_input = @file_wrapper.instantiate_file_list
-
- paths =
- in_hash[:collection_paths_source] +
- in_hash[:collection_paths_include]
-
- paths << File.join(in_hash[:cexception_vendor_path], CEXCEPTION_LIB_PATH) if (in_hash[:project_use_exceptions])
-
- paths.each do |path|
- release_input.include( File.join(path, "*#{in_hash[:extension_header]}") )
- if File.exists?(path) and not File.directory?(path)
- release_input.include( path )
- else
- release_input.include( File.join(path, "*#{in_hash[:extension_source]}") )
- end
- end
-
- @file_system_utils.revise_file_list( release_input, in_hash[:files_source] )
- @file_system_utils.revise_file_list( release_input, in_hash[:files_include] )
- # finding assembly files handled explicitly through other means
-
- return {:collection_release_existing_compilation_input => release_input}
- end
-
-
- def collect_all_existing_compilation_input(in_hash)
- all_input = @file_wrapper.instantiate_file_list
-
- paths =
- in_hash[:collection_paths_test] +
- in_hash[:collection_paths_support] +
- in_hash[:collection_paths_source] +
- in_hash[:collection_paths_include] +
- [File.join(in_hash[:unity_vendor_path], UNITY_LIB_PATH)]
-
- paths << File.join(in_hash[:cexception_vendor_path], CEXCEPTION_LIB_PATH) if (in_hash[:project_use_exceptions])
- paths << File.join(in_hash[:cmock_vendor_path], CMOCK_LIB_PATH) if (in_hash[:project_use_mocks])
-
- paths.each do |path|
- all_input.include( File.join(path, "*#{in_hash[:extension_header]}") )
- if File.exists?(path) and not File.directory?(path)
- all_input.include( path )
- else
- all_input.include( File.join(path, "*#{in_hash[:extension_source]}") )
- all_input.include( File.join(path, "*#{in_hash[:extension_assembly]}") ) if (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY)
- end
- end
-
- @file_system_utils.revise_file_list( all_input, in_hash[:files_test] )
- @file_system_utils.revise_file_list( all_input, in_hash[:files_support] )
- @file_system_utils.revise_file_list( all_input, in_hash[:files_source] )
- @file_system_utils.revise_file_list( all_input, in_hash[:files_include] )
- # finding assembly files handled explicitly through other means
-
- return {:collection_all_existing_compilation_input => all_input}
- end
-
-
- def get_vendor_defines(in_hash)
- defines = in_hash[:unity_defines].clone
- defines.concat(in_hash[:cmock_defines]) if (in_hash[:project_use_mocks])
- defines.concat(in_hash[:cexception_defines]) if (in_hash[:project_use_exceptions])
-
- return defines
- end
-
-
- def collect_vendor_defines(in_hash)
- return {:collection_defines_vendor => get_vendor_defines(in_hash)}
- end
-
-
- def collect_test_and_vendor_defines(in_hash)
- defines = in_hash[:defines_test].clone
- vendor_defines = get_vendor_defines(in_hash)
- defines.concat(vendor_defines) if vendor_defines
-
- return {:collection_defines_test_and_vendor => defines}
- end
-
-
- def collect_release_and_vendor_defines(in_hash)
- release_defines = in_hash[:defines_release].clone
-
- release_defines.concat(in_hash[:cexception_defines]) if (in_hash[:project_use_exceptions])
-
- return {:collection_defines_release_and_vendor => release_defines}
- end
-
-
- def collect_release_artifact_extra_link_objects(in_hash)
- objects = []
-
- # no build paths here so plugins can remap if necessary (i.e. path mapping happens at runtime)
- objects << CEXCEPTION_C_FILE.ext( in_hash[:extension_object] ) if (in_hash[:project_use_exceptions])
-
- return {:collection_release_artifact_extra_link_objects => objects}
- end
-
-
- def collect_test_fixture_extra_link_objects(in_hash)
- # Note: Symbols passed to compiler at command line can change Unity and CException behavior / configuration;
- # we also handle those dependencies elsewhere in compilation dependencies
-
- sources = [UNITY_C_FILE]
-
- in_hash[:files_support].each { |file| sources << file }
-
- # we don't include paths here because use of plugins or mixing different compilers may require different build paths
- sources << CEXCEPTION_C_FILE if (in_hash[:project_use_exceptions])
- sources << CMOCK_C_FILE if (in_hash[:project_use_mocks])
-
- # if we're using mocks & a unity helper is defined & that unity helper includes a source file component (not only a header of macros),
- # then link in the unity_helper object file too
- if ( in_hash[:project_use_mocks] and in_hash[:cmock_unity_helper] )
- in_hash[:cmock_unity_helper].each do |helper|
- if @file_wrapper.exist?(helper.ext(in_hash[:extension_source]))
- sources << helper
- end
- end
- end
-
- # create object files from all the sources
- objects = sources.map { |file| File.basename(file) }
-
- # no build paths here so plugins can remap if necessary (i.e. path mapping happens at runtime)
- objects.map! { |object| object.ext(in_hash[:extension_object]) }
-
- return { :collection_all_support => sources,
- :collection_test_fixture_extra_link_objects => objects
- }
- end
-
-
- private
-
- def get_vendor_paths(in_hash)
- vendor_paths = []
- vendor_paths << File.join(in_hash[:unity_vendor_path], UNITY_LIB_PATH)
- vendor_paths << File.join(in_hash[:cexception_vendor_path], CEXCEPTION_LIB_PATH) if (in_hash[:project_use_exceptions])
- vendor_paths << File.join(in_hash[:cmock_vendor_path], CMOCK_LIB_PATH) if (in_hash[:project_use_mocks])
- vendor_paths << in_hash[:cmock_mock_path] if (in_hash[:project_use_mocks])
-
- return vendor_paths
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_plugins.rb b/test/unit-test/vendor/ceedling/lib/ceedling/configurator_plugins.rb
deleted file mode 100644
index c2e198597c..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_plugins.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-require 'ceedling/constants'
-
-class ConfiguratorPlugins
-
- constructor :stream_wrapper, :file_wrapper, :system_wrapper
- attr_reader :rake_plugins, :script_plugins
-
- def setup
- @rake_plugins = []
- @script_plugins = []
- end
-
-
- def add_load_paths(config)
- plugin_paths = {}
-
- config[:plugins][:enabled].each do |plugin|
- config[:plugins][:load_paths].each do |root|
- path = File.join(root, plugin)
-
- is_script_plugin = ( not @file_wrapper.directory_listing( File.join( path, 'lib', '*.rb' ) ).empty? )
- is_rake_plugin = ( not @file_wrapper.directory_listing( File.join( path, '*.rake' ) ).empty? )
-
- if is_script_plugin or is_rake_plugin
- plugin_paths[(plugin + '_path').to_sym] = path
-
- if is_script_plugin
- @system_wrapper.add_load_path( File.join( path, 'lib') )
- @system_wrapper.add_load_path( File.join( path, 'config') )
- end
- break
- end
- end
- end
-
- return plugin_paths
- end
-
-
- # gather up and return .rake filepaths that exist on-disk
- def find_rake_plugins(config, plugin_paths)
- @rake_plugins = []
- plugins_with_path = []
-
- config[:plugins][:enabled].each do |plugin|
- if path = plugin_paths[(plugin + '_path').to_sym]
- rake_plugin_path = File.join(path, "#{plugin}.rake")
- if (@file_wrapper.exist?(rake_plugin_path))
- plugins_with_path << rake_plugin_path
- @rake_plugins << plugin
- end
- end
- end
-
- return plugins_with_path
- end
-
-
- # gather up and return just names of .rb classes that exist on-disk
- def find_script_plugins(config, plugin_paths)
- @script_plugins = []
-
- config[:plugins][:enabled].each do |plugin|
- if path = plugin_paths[(plugin + '_path').to_sym]
- script_plugin_path = File.join(path, "lib", "#{plugin}.rb")
-
- if @file_wrapper.exist?(script_plugin_path)
- @script_plugins << plugin
- end
- end
- end
-
- return @script_plugins
- end
-
-
- # gather up and return configuration .yml filepaths that exist on-disk
- def find_config_plugins(config, plugin_paths)
- plugins_with_path = []
-
- config[:plugins][:enabled].each do |plugin|
- if path = plugin_paths[(plugin + '_path').to_sym]
- config_plugin_path = File.join(path, "config", "#{plugin}.yml")
-
- if @file_wrapper.exist?(config_plugin_path)
- plugins_with_path << config_plugin_path
- end
- end
- end
-
- return plugins_with_path
- end
-
-
- # gather up and return default .yml filepaths that exist on-disk
- def find_plugin_yml_defaults(config, plugin_paths)
- defaults_with_path = []
-
- config[:plugins][:enabled].each do |plugin|
- if path = plugin_paths[(plugin + '_path').to_sym]
- default_path = File.join(path, 'config', 'defaults.yml')
-
- if @file_wrapper.exist?(default_path)
- defaults_with_path << default_path
- end
- end
- end
-
- return defaults_with_path
- end
-
- # gather up and return
- def find_plugin_hash_defaults(config, plugin_paths)
- defaults_hash= []
-
- config[:plugins][:enabled].each do |plugin|
- if path = plugin_paths[(plugin + '_path').to_sym]
- default_path = File.join(path, "config", "defaults_#{plugin}.rb")
- if @file_wrapper.exist?(default_path)
- @system_wrapper.require_file( "defaults_#{plugin}.rb")
-
- object = eval("get_default_config()")
- defaults_hash << object
- end
- end
- end
-
- return defaults_hash
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_setup.rb b/test/unit-test/vendor/ceedling/lib/ceedling/configurator_setup.rb
deleted file mode 100644
index cba88df3c2..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_setup.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-
-# add sort-ability to symbol so we can order keys array in hash for test-ability
-class Symbol
- include Comparable
-
- def <=>(other)
- self.to_s <=> other.to_s
- end
-end
-
-
-class ConfiguratorSetup
-
- constructor :configurator_builder, :configurator_validator, :configurator_plugins, :stream_wrapper
-
-
- def build_project_config(config, flattened_config)
- ### flesh out config
- @configurator_builder.clean(flattened_config)
-
- ### add to hash values we build up from configuration & file system contents
- flattened_config.merge!(@configurator_builder.set_build_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.set_force_build_filepaths(flattened_config))
- flattened_config.merge!(@configurator_builder.set_rakefile_components(flattened_config))
- flattened_config.merge!(@configurator_builder.set_release_target(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_project_options(flattened_config))
-
- ### iterate through all entries in paths section and expand any & all globs to actual paths
- flattened_config.merge!(@configurator_builder.expand_all_path_globs(flattened_config))
-
- flattened_config.merge!(@configurator_builder.collect_vendor_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_source_and_include_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_source_include_vendor_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_test_support_source_include_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_test_support_source_include_vendor_paths(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_tests(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_assembly(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_source(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_headers(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_release_existing_compilation_input(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_all_existing_compilation_input(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_vendor_defines(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_test_and_vendor_defines(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_release_and_vendor_defines(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_release_artifact_extra_link_objects(flattened_config))
- flattened_config.merge!(@configurator_builder.collect_test_fixture_extra_link_objects(flattened_config))
-
- return flattened_config
- end
-
-
- def build_constants_and_accessors(config, context)
- @configurator_builder.build_global_constants(config)
- @configurator_builder.build_accessor_methods(config, context)
- end
-
-
- def validate_required_sections(config)
- validation = []
- validation << @configurator_validator.exists?(config, :project)
- validation << @configurator_validator.exists?(config, :paths)
-
- return false if (validation.include?(false))
- return true
- end
-
- def validate_required_section_values(config)
- validation = []
- validation << @configurator_validator.exists?(config, :project, :build_root)
- validation << @configurator_validator.exists?(config, :paths, :test)
- validation << @configurator_validator.exists?(config, :paths, :source)
-
- return false if (validation.include?(false))
- return true
- end
-
- def validate_paths(config)
- validation = []
-
- if config[:cmock][:unity_helper]
- config[:cmock][:unity_helper].each do |path|
- validation << @configurator_validator.validate_filepath_simple( path, :cmock, :unity_helper )
- end
- end
-
- config[:project][:options_paths].each do |path|
- validation << @configurator_validator.validate_filepath_simple( path, :project, :options_paths )
- end
-
- config[:plugins][:load_paths].each do |path|
- validation << @configurator_validator.validate_filepath_simple( path, :plugins, :load_paths )
- end
-
- config[:paths].keys.sort.each do |key|
- validation << @configurator_validator.validate_path_list(config, :paths, key)
- end
-
- return false if (validation.include?(false))
- return true
- end
-
- def validate_tools(config)
- validation = []
-
- config[:tools].keys.sort.each do |key|
- validation << @configurator_validator.exists?(config, :tools, key, :executable)
- validation << @configurator_validator.validate_executable_filepath(config, :tools, key, :executable) if (not config[:tools][key][:optional])
- validation << @configurator_validator.validate_tool_stderr_redirect(config, :tools, key)
- end
-
- return false if (validation.include?(false))
- return true
- end
-
- def validate_plugins(config)
- missing_plugins =
- Set.new( config[:plugins][:enabled] ) -
- Set.new( @configurator_plugins.rake_plugins ) -
- Set.new( @configurator_plugins.script_plugins )
-
- missing_plugins.each do |plugin|
- @stream_wrapper.stderr_puts("ERROR: Ceedling plugin '#{plugin}' contains no rake or ruby class entry point. (Misspelled or missing files?)")
- end
-
- return ( (missing_plugins.size > 0) ? false : true )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_validator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/configurator_validator.rb
deleted file mode 100644
index fc2950e0bd..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/configurator_validator.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-require 'rubygems'
-require 'rake' # for ext()
-require 'ceedling/constants'
-require 'ceedling/tool_executor' # for argument replacement pattern
-require 'ceedling/file_path_utils' # for glob handling class methods
-
-
-class ConfiguratorValidator
-
- constructor :file_wrapper, :stream_wrapper, :system_wrapper
-
- # walk into config hash verify existence of data at key depth
- def exists?(config, *keys)
- hash = retrieve_value(config, keys)
- exist = !hash[:value].nil?
-
- if (not exist)
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Required config file entry #{format_key_sequence(keys, hash[:depth])} does not exist.")
- end
-
- return exist
- end
-
-
- # walk into config hash. verify directory path(s) at given key depth
- def validate_path_list(config, *keys)
- hash = retrieve_value(config, keys)
- list = hash[:value]
-
- # return early if we couldn't walk into hash and find a value
- return false if (list.nil?)
-
- path_list = []
- exist = true
-
- case list
- when String then path_list << list
- when Array then path_list = list
- end
-
- path_list.each do |path|
- base_path = FilePathUtils::extract_path(path) # lop off add/subtract notation & glob specifiers
-
- if (not @file_wrapper.exist?(base_path))
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Config path #{format_key_sequence(keys, hash[:depth])}['#{base_path}'] does not exist on disk.")
- exist = false
- end
- end
-
- return exist
- end
-
-
- # simple path verification
- def validate_filepath_simple(path, *keys)
- validate_path = path
-
- if (not @file_wrapper.exist?(validate_path))
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Config path '#{validate_path}' associated with #{format_key_sequence(keys, keys.size)} does not exist on disk.")
- return false
- end
-
- return true
- end
-
- # walk into config hash. verify specified file exists.
- def validate_filepath(config, *keys)
- hash = retrieve_value(config, keys)
- filepath = hash[:value]
-
- # return early if we couldn't walk into hash and find a value
- return false if (filepath.nil?)
-
- # skip everything if we've got an argument replacement pattern
- return true if (filepath =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN)
-
- if (not @file_wrapper.exist?(filepath))
-
- # See if we can deal with it internally.
- if GENERATED_DIR_PATH.include?(filepath)
- # we already made this directory before let's make it again.
- FileUtils.mkdir_p File.join(File.dirname(__FILE__), filepath)
- @stream_wrapper.stderr_puts("WARNING: Generated filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk. Recreating")
-
- else
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk.")
- return false
- end
- end
-
- return true
- end
-
- # walk into config hash. verify specified file exists.
- def validate_executable_filepath(config, *keys)
- exe_extension = config[:extension][:executable]
- hash = retrieve_value(config, keys)
- filepath = hash[:value]
-
- # return early if we couldn't walk into hash and find a value
- return false if (filepath.nil?)
-
- # skip everything if we've got an argument replacement pattern
- return true if (filepath =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN)
-
- # if there's no path included, verify file exists somewhere in system search paths
- if (not filepath.include?('/'))
- exists = false
-
- @system_wrapper.search_paths.each do |path|
- if (@file_wrapper.exist?( File.join(path, filepath)) )
- exists = true
- break
- end
-
- if (@file_wrapper.exist?( (File.join(path, filepath)).ext( exe_extension ) ))
- exists = true
- break
- elsif (@system_wrapper.windows? and @file_wrapper.exist?( (File.join(path, filepath)).ext( EXTENSION_WIN_EXE ) ))
- exists = true
- break
- end
- end
-
- if (not exists)
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist in system search paths.")
- return false
- end
-
- # if there is a path included, check that explicit filepath exists
- else
- if (not @file_wrapper.exist?(filepath))
- # no verbosity checking since this is lowest level anyhow & verbosity checking depends on configurator
- @stream_wrapper.stderr_puts("ERROR: Config filepath #{format_key_sequence(keys, hash[:depth])}['#{filepath}'] does not exist on disk.")
- return false
- end
- end
-
- return true
- end
-
- def validate_tool_stderr_redirect(config, tools, tool)
- redirect = config[tools][tool][:stderr_redirect]
- if (redirect.class == Symbol)
- # map constants and force to array of strings for runtime universality across ruby versions
- if (not StdErrRedirect.constants.map{|constant| constant.to_s}.include?(redirect.to_s.upcase))
- error = "ERROR: [:#{tools}][:#{tool}][:stderr_redirect][:#{redirect}] is not a recognized option " +
- "{#{StdErrRedirect.constants.map{|constant| ':' + constant.to_s.downcase}.join(', ')}}."
- @stream_wrapper.stderr_puts(error)
- return false
- end
- end
-
- return true
- end
-
- private #########################################
-
-
- def retrieve_value(config, keys)
- value = nil
- hash = config
- depth = 0
-
- # walk into hash & extract value at requested key sequence
- keys.each do |symbol|
- depth += 1
- if (not hash[symbol].nil?)
- hash = hash[symbol]
- value = hash
- else
- value = nil
- break
- end
- end
-
- return {:value => value, :depth => depth}
- end
-
-
- def format_key_sequence(keys, depth)
- walked_keys = keys.slice(0, depth)
- formatted_keys = walked_keys.map{|key| "[:#{key.to_s}]"}
-
- return formatted_keys.join
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/constants.rb b/test/unit-test/vendor/ceedling/lib/ceedling/constants.rb
deleted file mode 100644
index 19484f0638..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/constants.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-
-class Verbosity
- SILENT = 0 # as silent as possible (though there are some messages that must be spit out)
- ERRORS = 1 # only errors
- COMPLAIN = 2 # spit out errors and warnings/notices
- NORMAL = 3 # errors, warnings/notices, standard status messages
- OBNOXIOUS = 4 # all messages including extra verbose output (used for lite debugging / verification)
- DEBUG = 5 # special extra verbose output for hardcore debugging
-end
-
-
-class TestResultsSanityChecks
- NONE = 0 # no sanity checking of test results
- NORMAL = 1 # perform non-problematic checks
- THOROUGH = 2 # perform checks that require inside knowledge of system workings
-end
-
-
-class StdErrRedirect
- NONE = :none
- AUTO = :auto
- WIN = :win
- UNIX = :unix
- TCSH = :tcsh
-end
-
-
-class BackgroundExec
- NONE = :none
- AUTO = :auto
- WIN = :win
- UNIX = :unix
-end
-
-unless defined?(PROJECT_ROOT)
- PROJECT_ROOT = Dir.pwd()
-end
-
-GENERATED_DIR_PATH = [['vendor', 'ceedling'], 'src', "test", ['test', 'support'], 'build'].each{|p| File.join(*p)}
-
-EXTENSION_WIN_EXE = '.exe'
-EXTENSION_NONWIN_EXE = '.out'
-
-
-CEXCEPTION_ROOT_PATH = 'c_exception'
-CEXCEPTION_LIB_PATH = "#{CEXCEPTION_ROOT_PATH}/lib"
-CEXCEPTION_C_FILE = 'CException.c'
-CEXCEPTION_H_FILE = 'CException.h'
-
-UNITY_ROOT_PATH = 'unity'
-UNITY_LIB_PATH = "#{UNITY_ROOT_PATH}/src"
-UNITY_C_FILE = 'unity.c'
-UNITY_H_FILE = 'unity.h'
-UNITY_INTERNALS_H_FILE = 'unity_internals.h'
-
-CMOCK_ROOT_PATH = 'cmock'
-CMOCK_LIB_PATH = "#{CMOCK_ROOT_PATH}/src"
-CMOCK_C_FILE = 'cmock.c'
-CMOCK_H_FILE = 'cmock.h'
-
-
-DEFAULT_CEEDLING_MAIN_PROJECT_FILE = 'project.yml' unless defined?(DEFAULT_CEEDLING_MAIN_PROJECT_FILE) # main project file
-DEFAULT_CEEDLING_USER_PROJECT_FILE = 'user.yml' unless defined?(DEFAULT_CEEDLING_USER_PROJECT_FILE) # supplemental user config file
-
-INPUT_CONFIGURATION_CACHE_FILE = 'input.yml' unless defined?(INPUT_CONFIGURATION_CACHE_FILE) # input configuration file dump
-DEFINES_DEPENDENCY_CACHE_FILE = 'defines_dependency.yml' unless defined?(DEFINES_DEPENDENCY_CACHE_FILE) # preprocessor definitions for files
-
-TEST_ROOT_NAME = 'test' unless defined?(TEST_ROOT_NAME)
-TEST_TASK_ROOT = TEST_ROOT_NAME + ':' unless defined?(TEST_TASK_ROOT)
-TEST_SYM = TEST_ROOT_NAME.to_sym unless defined?(TEST_SYM)
-
-RELEASE_ROOT_NAME = 'release' unless defined?(RELEASE_ROOT_NAME)
-RELEASE_TASK_ROOT = RELEASE_ROOT_NAME + ':' unless defined?(RELEASE_TASK_ROOT)
-RELEASE_SYM = RELEASE_ROOT_NAME.to_sym unless defined?(RELEASE_SYM)
-
-REFRESH_ROOT_NAME = 'refresh' unless defined?(REFRESH_ROOT_NAME)
-REFRESH_TASK_ROOT = REFRESH_ROOT_NAME + ':' unless defined?(REFRESH_TASK_ROOT)
-REFRESH_SYM = REFRESH_ROOT_NAME.to_sym unless defined?(REFRESH_SYM)
-
-UTILS_ROOT_NAME = 'utils' unless defined?(UTILS_ROOT_NAME)
-UTILS_TASK_ROOT = UTILS_ROOT_NAME + ':' unless defined?(UTILS_TASK_ROOT)
-UTILS_SYM = UTILS_ROOT_NAME.to_sym unless defined?(UTILS_SYM)
-
-OPERATION_COMPILE_SYM = :compile unless defined?(OPERATION_COMPILE_SYM)
-OPERATION_ASSEMBLE_SYM = :assemble unless defined?(OPERATION_ASSEMBLE_SYM)
-OPERATION_LINK_SYM = :link unless defined?(OPERATION_LINK_SYM)
-
-
-RUBY_STRING_REPLACEMENT_PATTERN = /#\{.+\}/
-RUBY_EVAL_REPLACEMENT_PATTERN = /^\{(.+)\}$/
-TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN = /(\$\{(\d+)\})/
-TEST_STDOUT_STATISTICS_PATTERN = /\n-+\s*(\d+)\s+Tests\s+(\d+)\s+Failures\s+(\d+)\s+Ignored\s+(OK|FAIL)\s*/i
-
-NULL_FILE_PATH = '/dev/null'
-
-TESTS_BASE_PATH = TEST_ROOT_NAME
-RELEASE_BASE_PATH = RELEASE_ROOT_NAME
-
-VENDORS_FILES = %w(unity UnityHelper cmock CException).freeze
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/defaults.rb b/test/unit-test/vendor/ceedling/lib/ceedling/defaults.rb
deleted file mode 100644
index 1300a1aab1..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/defaults.rb
+++ /dev/null
@@ -1,471 +0,0 @@
-require 'ceedling/constants'
-require 'ceedling/system_wrapper'
-require 'ceedling/file_path_utils'
-
-#this should be defined already, but not always during system specs
-CEEDLING_VENDOR = File.expand_path(File.dirname(__FILE__) + '/../../vendor') unless defined? CEEDLING_VENDOR
-CEEDLING_PLUGINS = [] unless defined? CEEDLING_PLUGINS
-
-DEFAULT_TEST_COMPILER_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_test_compiler'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
- "-DGNU_COMPILER".freeze,
- "-g".freeze,
- ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
- "-c \"${1}\"".freeze,
- "-o \"${2}\"".freeze,
- # gcc's list file output options are complex; no use of ${3} parameter in default config
- "-MMD".freeze,
- "-MF \"${4}\"".freeze,
- ].freeze
- }
-
-DEFAULT_TEST_LINKER_TOOL = {
- :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0],
- :name => 'default_test_linker'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1],
- ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
- ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split,
- "\"${1}\"".freeze,
- "${5}".freeze,
- "-o \"${2}\"".freeze,
- "".freeze,
- "${4}".freeze,
- ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split
- ].freeze
- }
-
-DEFAULT_TEST_FIXTURE_TOOL = {
- :executable => '${1}'.freeze,
- :name => 'default_test_fixture'.freeze,
- :stderr_redirect => StdErrRedirect::AUTO.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [].freeze
- }
-
-DEFAULT_TEST_INCLUDES_PREPROCESSOR_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_test_includes_preprocessor'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- '-E'.freeze, # OSX clang
- '-MM'.freeze,
- '-MG'.freeze,
- # avoid some possibility of deep system lib header file complications by omitting vendor paths
- # if cpp is run on *nix system, escape spaces in paths; if cpp on windows just use the paths collection as is
- # {"-I\"$\"" => "{SystemWrapper.windows? ? COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE : COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE.map{|path| path.gsub(\/ \/, \'\\\\ \') }}"}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
- {"-D$" => 'DEFINES_TEST_PREPROCESS'}.freeze,
- "-DGNU_COMPILER".freeze, # OSX clang
- # '-nostdinc'.freeze, # disabled temporarily due to stdio access violations on OSX
- "\"${1}\"".freeze
- ].freeze
- }
-
-DEFAULT_TEST_FILE_PREPROCESSOR_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_test_file_preprocessor'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- '-E'.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
- {"-D$" => 'DEFINES_TEST_PREPROCESS'}.freeze,
- "-DGNU_COMPILER".freeze,
- # '-nostdinc'.freeze, # disabled temporarily due to stdio access violations on OSX
- "\"${1}\"".freeze,
- "-o \"${2}\"".freeze
- ].freeze
- }
-
-DEFAULT_TEST_FILE_PREPROCESSOR_DIRECTIVES_TOOL = {
- :executable => FilePathUtils.os_executable_ext('gcc').freeze,
- :name => 'default_test_file_preprocessor_directives'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- '-E'.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
- {"-D$" => 'DEFINES_TEST_PREPROCESS'}.freeze,
- "-DGNU_COMPILER".freeze,
- '-fdirectives-only'.freeze,
- # '-nostdinc'.freeze, # disabled temporarily due to stdio access violations on OSX
- "\"${1}\"".freeze,
- "-o \"${2}\"".freeze
- ].freeze
- }
-
-# Disable the -MD flag for OSX LLVM Clang, since unsupported
-if RUBY_PLATFORM =~ /darwin/ && `gcc --version 2> /dev/null` =~ /Apple LLVM version .* \(clang/m # OSX w/LLVM Clang
- MD_FLAG = '' # Clang doesn't support the -MD flag
-else
- MD_FLAG = '-MD'
-end
-
-DEFAULT_TEST_DEPENDENCIES_GENERATOR_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_test_dependencies_generator'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- '-E'.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
- {"-D$" => 'DEFINES_TEST_PREPROCESS'}.freeze,
- "-DGNU_COMPILER".freeze,
- "-MT \"${3}\"".freeze,
- '-MM'.freeze,
- MD_FLAG.freeze,
- '-MG'.freeze,
- "-MF \"${2}\"".freeze,
- "-c \"${1}\"".freeze,
- # '-nostdinc'.freeze,
- ].freeze
- }
-
-DEFAULT_RELEASE_DEPENDENCIES_GENERATOR_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_release_dependencies_generator'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- '-E'.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_RELEASE_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_RELEASE_AND_VENDOR'}.freeze,
- {"-D$" => 'DEFINES_RELEASE_PREPROCESS'}.freeze,
- "-DGNU_COMPILER".freeze,
- "-MT \"${3}\"".freeze,
- '-MM'.freeze,
- MD_FLAG.freeze,
- '-MG'.freeze,
- "-MF \"${2}\"".freeze,
- "-c \"${1}\"".freeze,
- # '-nostdinc'.freeze,
- ].freeze
- }
-
-
-DEFAULT_RELEASE_COMPILER_TOOL = {
- :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
- :name => 'default_release_compiler'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
- ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
- {"-I\"$\"" => 'COLLECTION_PATHS_SOURCE_INCLUDE_VENDOR'}.freeze,
- {"-I\"$\"" => 'COLLECTION_PATHS_RELEASE_TOOLCHAIN_INCLUDE'}.freeze,
- {"-D$" => 'COLLECTION_DEFINES_RELEASE_AND_VENDOR'}.freeze,
- "-DGNU_COMPILER".freeze,
- ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
- "-c \"${1}\"".freeze,
- "-o \"${2}\"".freeze,
- # gcc's list file output options are complex; no use of ${3} parameter in default config
- "-MMD".freeze,
- "-MF \"${4}\"".freeze,
- ].freeze
- }
-
-DEFAULT_RELEASE_ASSEMBLER_TOOL = {
- :executable => ENV['AS'].nil? ? FilePathUtils.os_executable_ext('as').freeze : ENV['AS'].split[0],
- :name => 'default_release_assembler'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['AS'].nil? ? "" : ENV['AS'].split[1..-1],
- ENV['ASFLAGS'].nil? ? "" : ENV['ASFLAGS'].split,
- {"-I\"$\"" => 'COLLECTION_PATHS_SOURCE_AND_INCLUDE'}.freeze,
- "\"${1}\"".freeze,
- "-o \"${2}\"".freeze,
- ].freeze
- }
-
-DEFAULT_RELEASE_LINKER_TOOL = {
- :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0],
- :name => 'default_release_linker'.freeze,
- :stderr_redirect => StdErrRedirect::NONE.freeze,
- :background_exec => BackgroundExec::NONE.freeze,
- :optional => false.freeze,
- :arguments => [
- ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1],
- ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
- ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split,
- "\"${1}\"".freeze,
- "${5}".freeze,
- "-o \"${2}\"".freeze,
- "".freeze,
- "${4}".freeze,
- ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split
- ].freeze
- }
-
-
-DEFAULT_TOOLS_TEST = {
- :tools => {
- :test_compiler => DEFAULT_TEST_COMPILER_TOOL,
- :test_linker => DEFAULT_TEST_LINKER_TOOL,
- :test_fixture => DEFAULT_TEST_FIXTURE_TOOL,
- }
- }
-
-DEFAULT_TOOLS_TEST_PREPROCESSORS = {
- :tools => {
- :test_includes_preprocessor => DEFAULT_TEST_INCLUDES_PREPROCESSOR_TOOL,
- :test_file_preprocessor => DEFAULT_TEST_FILE_PREPROCESSOR_TOOL,
- :test_file_preprocessor_directives => DEFAULT_TEST_FILE_PREPROCESSOR_DIRECTIVES_TOOL,
- }
- }
-
-DEFAULT_TOOLS_TEST_DEPENDENCIES = {
- :tools => {
- :test_dependencies_generator => DEFAULT_TEST_DEPENDENCIES_GENERATOR_TOOL,
- }
- }
-
-
-DEFAULT_TOOLS_RELEASE = {
- :tools => {
- :release_compiler => DEFAULT_RELEASE_COMPILER_TOOL,
- :release_linker => DEFAULT_RELEASE_LINKER_TOOL,
- }
- }
-
-DEFAULT_TOOLS_RELEASE_ASSEMBLER = {
- :tools => {
- :release_assembler => DEFAULT_RELEASE_ASSEMBLER_TOOL,
- }
- }
-
-DEFAULT_TOOLS_RELEASE_DEPENDENCIES = {
- :tools => {
- :release_dependencies_generator => DEFAULT_RELEASE_DEPENDENCIES_GENERATOR_TOOL,
- }
- }
-
-
-DEFAULT_RELEASE_TARGET_NAME = 'project'
-
-DEFAULT_CEEDLING_CONFIG = {
- :project => {
- # :build_root must be set by user
- :use_exceptions => true,
- :use_mocks => true,
- :compile_threads => 1,
- :test_threads => 1,
- :use_test_preprocessor => false,
- :use_preprocessor_directives => false,
- :use_deep_dependencies => false,
- :generate_deep_dependencies => true, # only applicable if use_deep_dependencies is true
- :auto_link_deep_dependencies => false,
- :test_file_prefix => 'test_',
- :options_paths => [],
- :release_build => false,
- },
-
- :release_build => {
- # :output is set while building configuration -- allows smart default system-dependent file extension handling
- :use_assembly => false,
- :artifacts => [],
- },
-
- :paths => {
- :test => [], # must be populated by user
- :source => [], # must be populated by user
- :support => [],
- :include => [],
- :libraries => [],
- :test_toolchain_include => [],
- :release_toolchain_include => [],
- },
-
- :files => {
- :test => [],
- :source => [],
- :assembly => [],
- :support => [],
- :include => [],
- },
-
- # unlike other top-level entries, environment's value is an array to preserve order
- :environment => [
- # when evaluated, this provides wider text field for rake task comments
- {:rake_columns => '120'},
- ],
-
- :defines => {
- :test => [],
- :test_preprocess => [],
- :release => [],
- :release_preprocess => [],
- :use_test_definition => false,
- },
-
- :libraries => {
- :flag => '-l${1}',
- :path_flag => '-L ${1}',
- :test => [],
- :test_preprocess => [],
- :release => [],
- :release_preprocess => [],
- },
-
- :flags => {},
-
- :extension => {
- :header => '.h',
- :source => '.c',
- :assembly => '.s',
- :object => '.o',
- :libraries => ['.a','.so'],
- :executable => ( SystemWrapper.windows? ? EXTENSION_WIN_EXE : EXTENSION_NONWIN_EXE ),
- :map => '.map',
- :list => '.lst',
- :testpass => '.pass',
- :testfail => '.fail',
- :dependencies => '.d',
- },
-
- :unity => {
- :vendor_path => CEEDLING_VENDOR,
- :defines => []
- },
-
- :cmock => {
- :vendor_path => CEEDLING_VENDOR,
- :defines => [],
- :includes => []
- },
-
- :cexception => {
- :vendor_path => CEEDLING_VENDOR,
- :defines => []
- },
-
- :test_runner => {
- :includes => [],
- :file_suffix => '_runner',
- },
-
- # all tools populated while building up config structure
- :tools => {},
-
- # empty argument lists for default tools
- # (these can be overridden in project file to add arguments to tools without totally redefining tools)
- :test_compiler => { :arguments => [] },
- :test_linker => { :arguments => [] },
- :test_fixture => {
- :arguments => [],
- :link_objects => [], # compiled object files to always be linked in (e.g. cmock.o if using mocks)
- },
- :test_includes_preprocessor => { :arguments => [] },
- :test_file_preprocessor => { :arguments => [] },
- :test_file_preprocessor_directives => { :arguments => [] },
- :test_dependencies_generator => { :arguments => [] },
- :release_compiler => { :arguments => [] },
- :release_linker => { :arguments => [] },
- :release_assembler => { :arguments => [] },
- :release_dependencies_generator => { :arguments => [] },
-
- :plugins => {
- :load_paths => CEEDLING_PLUGINS,
- :enabled => [],
- }
- }.freeze
-
-
-DEFAULT_TESTS_RESULTS_REPORT_TEMPLATE = %q{
-% ignored = hash[:results][:counts][:ignored]
-% failed = hash[:results][:counts][:failed]
-% stdout_count = hash[:results][:counts][:stdout]
-% header_prepend = ((hash[:header].length > 0) ? "#{hash[:header]}: " : '')
-% banner_width = 25 + header_prepend.length # widest message
-
-% if (stdout_count > 0)
-<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + 'TEST OUTPUT')%>
-% hash[:results][:stdout].each do |string|
-% string[:collection].each do |item|
-<%=string[:source][:path]%><%=File::SEPARATOR%><%=string[:source][:file]%>: "<%=item%>"
-% end
-% end
-
-% end
-% if (ignored > 0)
-<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + 'IGNORED TEST SUMMARY')%>
-% hash[:results][:ignores].each do |ignore|
-% ignore[:collection].each do |item|
-<%=ignore[:source][:path]%><%=File::SEPARATOR%><%=ignore[:source][:file]%>:<%=item[:line]%>:<%=item[:test]%>
-% if (item[:message].length > 0)
-: "<%=item[:message]%>"
-% else
-<%="\n"%>
-% end
-% end
-% end
-
-% end
-% if (failed > 0)
-<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + 'FAILED TEST SUMMARY')%>
-% hash[:results][:failures].each do |failure|
-% failure[:collection].each do |item|
-<%=failure[:source][:path]%><%=File::SEPARATOR%><%=failure[:source][:file]%>:<%=item[:line]%>:<%=item[:test]%>
-% if (item[:message].length > 0)
-: "<%=item[:message]%>"
-% else
-<%="\n"%>
-% end
-% end
-% end
-
-% end
-% total_string = hash[:results][:counts][:total].to_s
-% format_string = "%#{total_string.length}i"
-<%=@ceedling[:plugin_reportinator].generate_banner(header_prepend + 'OVERALL TEST SUMMARY')%>
-% if (hash[:results][:counts][:total] > 0)
-TESTED: <%=hash[:results][:counts][:total].to_s%>
-PASSED: <%=sprintf(format_string, hash[:results][:counts][:passed])%>
-FAILED: <%=sprintf(format_string, failed)%>
-IGNORED: <%=sprintf(format_string, ignored)%>
-% else
-
-No tests executed.
-% end
-
-}
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/dependinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/dependinator.rb
deleted file mode 100644
index accfe80c91..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/dependinator.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-
-class Dependinator
-
- constructor :configurator, :project_config_manager, :test_includes_extractor, :file_path_utils, :rake_wrapper, :file_wrapper
-
- def touch_force_rebuild_files
- @file_wrapper.touch( @configurator.project_test_force_rebuild_filepath )
- @file_wrapper.touch( @configurator.project_release_force_rebuild_filepath ) if (@configurator.project_release_build)
- end
-
-
-
- def load_release_object_deep_dependencies(dependencies_list)
- dependencies_list.each do |dependencies_file|
- if File.exists?(dependencies_file)
- @rake_wrapper.load_dependencies( dependencies_file )
- end
- end
- end
-
-
- def enhance_release_file_dependencies(files)
- files.each do |filepath|
- @rake_wrapper[filepath].enhance( [@configurator.project_release_force_rebuild_filepath] ) if (@project_config_manager.release_config_changed)
- end
- end
-
-
-
- def load_test_object_deep_dependencies(files_list)
- dependencies_list = @file_path_utils.form_test_dependencies_filelist(files_list)
- dependencies_list.each do |dependencies_file|
- if File.exists?(dependencies_file)
- @rake_wrapper.load_dependencies(dependencies_file)
- end
- end
- end
-
-
- def enhance_runner_dependencies(runner_filepath)
- @rake_wrapper[runner_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- end
-
-
- def enhance_shallow_include_lists_dependencies(include_lists)
- include_lists.each do |include_list_filepath|
- @rake_wrapper[include_list_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- end
- end
-
-
- def enhance_preprocesed_file_dependencies(files)
- files.each do |filepath|
- @rake_wrapper[filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- end
- end
-
-
- def enhance_mock_dependencies(mocks_list)
- # if input configuration or ceedling changes, make sure these guys get rebuilt
- mocks_list.each do |mock_filepath|
- @rake_wrapper[mock_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- @rake_wrapper[mock_filepath].enhance( @configurator.cmock_unity_helper ) if (@configurator.cmock_unity_helper)
- end
- end
-
-
- def enhance_dependencies_dependencies(dependencies)
- dependencies.each do |dependencies_filepath|
- @rake_wrapper[dependencies_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- end
- end
-
-
- def enhance_test_build_object_dependencies(objects)
- objects.each do |object_filepath|
- @rake_wrapper[object_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if (@project_config_manager.test_config_changed ||
- @project_config_manager.test_defines_changed)
- end
- end
-
-
- def enhance_results_dependencies(result_filepath)
- @rake_wrapper[result_filepath].enhance( [@configurator.project_test_force_rebuild_filepath] ) if @project_config_manager.test_config_changed
- end
-
-
- def enhance_test_executable_dependencies(test, objects)
- @rake_wrapper[ @file_path_utils.form_test_executable_filepath(test) ].enhance( objects )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/erb_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/erb_wrapper.rb
deleted file mode 100644
index dab8d736b5..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/erb_wrapper.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'erb'
-
-class ErbWrapper
- def generate_file(template, data, output_file)
- File.open(output_file, "w") do |f|
- f << ERB.new(template, 0, "<>").result(binding)
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_finder.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_finder.rb
deleted file mode 100644
index 4a1064c52a..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_finder.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-require 'rubygems'
-require 'rake' # for adding ext() method to string
-require 'thread'
-
-
-class FileFinder
- SEMAPHORE = Mutex.new
-
- constructor :configurator, :file_finder_helper, :cacheinator, :file_path_utils, :file_wrapper, :yaml_wrapper
-
- def prepare_search_sources
- @all_test_source_and_header_file_collection =
- @configurator.collection_all_tests +
- @configurator.collection_all_source +
- @configurator.collection_all_headers
- end
-
-
- def find_header_file(mock_file)
- header = File.basename(mock_file).sub(/#{@configurator.cmock_mock_prefix}/, '').ext(@configurator.extension_header)
-
- found_path = @file_finder_helper.find_file_in_collection(header, @configurator.collection_all_headers, :error)
-
- return found_path
- end
-
-
- def find_header_input_for_mock_file(mock_file)
- found_path = find_header_file(mock_file)
- mock_input = found_path
-
- if (@configurator.project_use_test_preprocessor)
- mock_input = @cacheinator.diff_cached_test_file( @file_path_utils.form_preprocessed_file_filepath( found_path ) )
- end
-
- return mock_input
- end
-
-
- def find_source_from_test(test, complain)
- test_prefix = @configurator.project_test_file_prefix
- source_paths = @configurator.collection_all_source
-
- source = File.basename(test).sub(/#{test_prefix}/, '')
-
- # we don't blow up if a test file has no corresponding source file
- return @file_finder_helper.find_file_in_collection(source, source_paths, complain)
- end
-
-
- def find_test_from_runner_path(runner_path)
- extension_source = @configurator.extension_source
-
- test_file = File.basename(runner_path).sub(/#{@configurator.test_runner_file_suffix}#{'\\'+extension_source}/, extension_source)
-
- found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error)
-
- return found_path
- end
-
-
- def find_test_input_for_runner_file(runner_path)
- found_path = find_test_from_runner_path(runner_path)
- runner_input = found_path
-
- if (@configurator.project_use_test_preprocessor)
- runner_input = @cacheinator.diff_cached_test_file( @file_path_utils.form_preprocessed_file_filepath( found_path ) )
- end
-
- return runner_input
- end
-
-
- def find_test_from_file_path(file_path)
- test_file = File.basename(file_path).ext(@configurator.extension_source)
-
- found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error)
-
- return found_path
- end
-
-
- def find_test_or_source_or_header_file(file_path)
- file = File.basename(file_path)
- return @file_finder_helper.find_file_in_collection(file, @all_test_source_and_header_file_collection, :error)
- end
-
-
- def find_compilation_input_file(file_path, complain=:error, release=false)
- found_file = nil
-
- source_file = File.basename(file_path).ext(@configurator.extension_source)
-
- # We only collect files that already exist when we start up.
- # FileLists can produce undesired results for dynamically generated files depending on when they're accessed.
- # So collect mocks and runners separately and right now.
-
- SEMAPHORE.synchronize {
-
- if (source_file =~ /#{@configurator.test_runner_file_suffix}/)
- found_file =
- @file_finder_helper.find_file_in_collection(
- source_file,
- @file_wrapper.directory_listing( File.join(@configurator.project_test_runners_path, '*') ),
- complain)
-
- elsif (@configurator.project_use_mocks and (source_file =~ /#{@configurator.cmock_mock_prefix}/))
- found_file =
- @file_finder_helper.find_file_in_collection(
- source_file,
- @file_wrapper.directory_listing( File.join(@configurator.cmock_mock_path, '*') ),
- complain)
-
- elsif release
- found_file =
- @file_finder_helper.find_file_in_collection(
- source_file,
- @configurator.collection_release_existing_compilation_input,
- complain)
- else
- temp_complain = (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) ? :ignore : complain
- found_file =
- @file_finder_helper.find_file_in_collection(
- source_file,
- @configurator.collection_all_existing_compilation_input,
- temp_complain)
- found_file ||= find_assembly_file(file_path, false) if (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY)
- end
- }
- return found_file
- end
-
-
- def find_source_file(file_path, complain)
- source_file = File.basename(file_path).ext(@configurator.extension_source)
- return @file_finder_helper.find_file_in_collection(source_file, @configurator.collection_all_source, complain)
- end
-
-
- def find_assembly_file(file_path, complain = :error)
- assembly_file = File.basename(file_path).ext(@configurator.extension_assembly)
- return @file_finder_helper.find_file_in_collection(assembly_file, @configurator.collection_all_assembly, complain)
- end
-
- def find_file_from_list(file_path, file_list, complain)
- return @file_finder_helper.find_file_in_collection(file_path, file_list, complain)
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_finder_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_finder_helper.rb
deleted file mode 100644
index f2d6a5e91f..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_finder_helper.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'fileutils'
-require 'ceedling/constants' # for Verbosity enumeration
-
-class FileFinderHelper
-
- constructor :streaminator
-
-
- def find_file_in_collection(file_name, file_list, complain, extra_message="")
- file_to_find = nil
-
- file_list.each do |item|
- base_file = File.basename(item)
-
- # case insensitive comparison
- if (base_file.casecmp(file_name) == 0)
- # case sensitive check
- if (base_file == file_name)
- file_to_find = item
- break
- else
- blow_up(file_name, "However, a filename having different capitalization was found: '#{item}'.")
- end
- end
-
- end
-
- if file_to_find.nil?
- case (complain)
- when :error then blow_up(file_name, extra_message)
- when :warn then gripe(file_name, extra_message)
- #when :ignore then
- end
- end
-
- return file_to_find
- end
-
- private
-
- def blow_up(file_name, extra_message="")
- error = "ERROR: Found no file '#{file_name}' in search paths."
- error += ' ' if (extra_message.length > 0)
- @streaminator.stderr_puts(error + extra_message, Verbosity::ERRORS)
- raise
- end
-
- def gripe(file_name, extra_message="")
- warning = "WARNING: Found no file '#{file_name}' in search paths."
- warning += ' ' if (extra_message.length > 0)
- @streaminator.stderr_puts(warning + extra_message, Verbosity::COMPLAIN)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_path_utils.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_path_utils.rb
deleted file mode 100644
index 89a28ba7fa..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_path_utils.rb
+++ /dev/null
@@ -1,202 +0,0 @@
-require 'rubygems'
-require 'rake' # for ext()
-require 'fileutils'
-require 'ceedling/system_wrapper'
-
-# global utility methods (for plugins, project files, etc.)
-def ceedling_form_filepath(destination_path, original_filepath, new_extension=nil)
- filename = File.basename(original_filepath)
- filename.replace(filename.ext(new_extension)) if (!new_extension.nil?)
- return File.join( destination_path.gsub(/\\/, '/'), filename )
-end
-
-class FilePathUtils
-
- GLOB_MATCHER = /[\*\?\{\}\[\]]/
-
- constructor :configurator, :file_wrapper
-
-
- ######### class methods ##########
-
- # standardize path to use '/' path separator & have no trailing path separator
- def self.standardize(path)
- if path.is_a? String
- path.strip!
- path.gsub!(/\\/, '/')
- path.chomp!('/')
- end
- return path
- end
-
- def self.os_executable_ext(executable)
- return executable.ext('.exe') if SystemWrapper.windows?
- return executable
- end
-
- # extract directory path from between optional add/subtract aggregation modifiers and up to glob specifiers
- # note: slightly different than File.dirname in that /files/foo remains /files/foo and does not become /files
- def self.extract_path(path)
- path = path.sub(/^(\+|-):/, '')
-
- # find first occurrence of path separator followed by directory glob specifier: *, ?, {, }, [, ]
- find_index = (path =~ GLOB_MATCHER)
-
- # no changes needed (lop off final path separator)
- return path.chomp('/') if (find_index.nil?)
-
- # extract up to first glob specifier
- path = path[0..(find_index-1)]
-
- # lop off everything up to and including final path separator
- find_index = path.rindex('/')
- return path[0..(find_index-1)] if (not find_index.nil?)
-
- # return string up to first glob specifier if no path separator found
- return path
- end
-
- # return whether the given path is to be aggregated (no aggregation modifier defaults to same as +:)
- def self.add_path?(path)
- return (path =~ /^-:/).nil?
- end
-
- # get path (and glob) lopping off optional +: / -: prefixed aggregation modifiers
- def self.extract_path_no_aggregation_operators(path)
- return path.sub(/^(\+|-):/, '')
- end
-
- # all the globs that may be in a path string work fine with one exception;
- # to recurse through all subdirectories, the glob is dir/**/** but our paths use
- # convention of only dir/**
- def self.reform_glob(path)
- return path if (path =~ /\/\*\*$/).nil?
- return path + '/**'
- end
-
- ######### instance methods ##########
-
- def form_temp_path(filepath, prefix='')
- return File.join( @configurator.project_temp_path, prefix + File.basename(filepath) )
- end
-
- ### release ###
- def form_release_build_cache_path(filepath)
- return File.join( @configurator.project_release_build_cache_path, File.basename(filepath) )
- end
-
- def form_release_dependencies_filepath(filepath)
- return File.join( @configurator.project_release_dependencies_path, File.basename(filepath).ext(@configurator.extension_dependencies) )
- end
-
- def form_release_build_c_object_filepath(filepath)
- return File.join( @configurator.project_release_build_output_c_path, File.basename(filepath).ext(@configurator.extension_object) )
- end
-
- def form_release_build_asm_object_filepath(filepath)
- return File.join( @configurator.project_release_build_output_asm_path, File.basename(filepath).ext(@configurator.extension_object) )
- end
-
- def form_release_build_c_objects_filelist(files)
- return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_build_output_c_path}/%n#{@configurator.extension_object}")
- end
-
- def form_release_build_asm_objects_filelist(files)
- return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_build_output_asm_path}/%n#{@configurator.extension_object}")
- end
-
- def form_release_build_c_list_filepath(filepath)
- return File.join( @configurator.project_release_build_output_c_path, File.basename(filepath).ext(@configurator.extension_list) )
- end
-
- def form_release_dependencies_filelist(files)
- return (@file_wrapper.instantiate_file_list(files)).pathmap("#{@configurator.project_release_dependencies_path}/%n#{@configurator.extension_dependencies}")
- end
-
- ### tests ###
- def form_test_build_cache_path(filepath)
- return File.join( @configurator.project_test_build_cache_path, File.basename(filepath) )
- end
-
- def form_test_dependencies_filepath(filepath)
- return File.join( @configurator.project_test_dependencies_path, File.basename(filepath).ext(@configurator.extension_dependencies) )
- end
-
- def form_pass_results_filepath(filepath)
- return File.join( @configurator.project_test_results_path, File.basename(filepath).ext(@configurator.extension_testpass) )
- end
-
- def form_fail_results_filepath(filepath)
- return File.join( @configurator.project_test_results_path, File.basename(filepath).ext(@configurator.extension_testfail) )
- end
-
- def form_runner_filepath_from_test(filepath)
- return File.join( @configurator.project_test_runners_path, File.basename(filepath, @configurator.extension_source)) + @configurator.test_runner_file_suffix + @configurator.extension_source
- end
-
- def form_test_filepath_from_runner(filepath)
- return filepath.sub(/#{TEST_RUNNER_FILE_SUFFIX}/, '')
- end
-
- def form_runner_object_filepath_from_test(filepath)
- return (form_test_build_c_object_filepath(filepath)).sub(/(#{@configurator.extension_object})$/, "#{@configurator.test_runner_file_suffix}\\1")
- end
-
- def form_test_build_c_object_filepath(filepath)
- return File.join( @configurator.project_test_build_output_c_path, File.basename(filepath).ext(@configurator.extension_object) )
- end
-
- def form_test_build_asm_object_filepath(filepath)
- return File.join( @configurator.project_test_build_output_asm_path, File.basename(filepath).ext(@configurator.extension_object) )
- end
-
- def form_test_executable_filepath(filepath)
- return File.join( @configurator.project_test_build_output_path, File.basename(filepath).ext(@configurator.extension_executable) )
- end
-
- def form_test_build_map_filepath(filepath)
- return File.join( @configurator.project_test_build_output_path, File.basename(filepath).ext(@configurator.extension_map) )
- end
-
- def form_test_build_list_filepath(filepath)
- return File.join( @configurator.project_test_build_output_path, File.basename(filepath).ext(@configurator.extension_list) )
- end
-
- def form_preprocessed_file_filepath(filepath)
- return File.join( @configurator.project_test_preprocess_files_path, File.basename(filepath) )
- end
-
- def form_preprocessed_includes_list_filepath(filepath)
- return File.join( @configurator.project_test_preprocess_includes_path, File.basename(filepath) )
- end
-
- def form_test_build_objects_filelist(sources)
- return (@file_wrapper.instantiate_file_list(sources)).pathmap("#{@configurator.project_test_build_output_c_path}/%n#{@configurator.extension_object}")
- end
-
- def form_preprocessed_mockable_headers_filelist(mocks)
- list = @file_wrapper.instantiate_file_list(mocks)
- headers = list.map do |file|
- module_name = File.basename(file).sub(/^#{@configurator.cmock_mock_prefix}/, '').sub(/\.[a-zA-Z]+$/,'')
- "#{@configurator.project_test_preprocess_files_path}/#{module_name}#{@configurator.extension_header}"
- end
- return headers
- end
-
- def form_mocks_source_filelist(mocks)
- list = (@file_wrapper.instantiate_file_list(mocks))
- sources = list.map{|file| "#{@configurator.cmock_mock_path}/#{file}#{@configurator.extension_source}"}
- return sources
- end
-
- def form_test_dependencies_filelist(files)
- list = @file_wrapper.instantiate_file_list(files)
- return list.pathmap("#{@configurator.project_test_dependencies_path}/%n#{@configurator.extension_dependencies}")
- end
-
- def form_pass_results_filelist(path, files)
- list = @file_wrapper.instantiate_file_list(files)
- return list.pathmap("#{path}/%n#{@configurator.extension_testpass}")
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_system_utils.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_system_utils.rb
deleted file mode 100644
index 245d8f8260..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_system_utils.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'rubygems'
-require 'rake'
-require 'set'
-require 'fileutils'
-require 'ceedling/file_path_utils'
-
-
-class FileSystemUtils
-
- constructor :file_wrapper
-
- # build up path list from input of one or more strings or arrays of (+/-) paths & globs
- def collect_paths(*paths)
- raw = [] # all paths and globs
- plus = Set.new # all paths to expand and add
- minus = Set.new # all paths to remove from plus set
-
- # assemble all globs and simple paths, reforming our glob notation to ruby globs
- paths.each do |paths_container|
- case (paths_container)
- when String then raw << (FilePathUtils::reform_glob(paths_container))
- when Array then paths_container.each {|path| raw << (FilePathUtils::reform_glob(path))}
- else raise "Don't know how to handle #{paths_container.class}"
- end
- end
-
- # iterate through each path and glob
- raw.each do |path|
-
- dirs = [] # container for only (expanded) paths
-
- # if a glob, expand it and slurp up all non-file paths
- if path.include?('*')
- # grab base directory only if globs are snug up to final path separator
- if (path =~ /\/\*+$/)
- dirs << FilePathUtils.extract_path(path)
- end
-
- # grab expanded sub-directory globs
- expanded = @file_wrapper.directory_listing( FilePathUtils.extract_path_no_aggregation_operators(path) )
- expanded.each do |entry|
- dirs << entry if @file_wrapper.directory?(entry)
- end
-
- # else just grab simple path
- # note: we could just run this through glob expansion but such an
- # approach doesn't handle a path not yet on disk)
- else
- dirs << FilePathUtils.extract_path_no_aggregation_operators(path)
- end
-
- # add dirs to the appropriate set based on path aggregation modifier if present
- FilePathUtils.add_path?(path) ? plus.merge(dirs) : minus.merge(dirs)
- end
-
- return (plus - minus).to_a.uniq
- end
-
-
- # given a file list, add to it or remove from it
- def revise_file_list(list, revisions)
- revisions.each do |revision|
- # include or exclude file or glob to file list
- file = FilePathUtils.extract_path_no_aggregation_operators( revision )
- FilePathUtils.add_path?(revision) ? list.include(file) : list.exclude(file)
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_system_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_system_wrapper.rb
deleted file mode 100644
index 1bb2883ee6..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_system_wrapper.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-
-class FileSystemWrapper
-
- def cd(path)
- FileUtils.cd path do
- yield
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/file_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/file_wrapper.rb
deleted file mode 100644
index 9e5a909b4b..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/file_wrapper.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require 'rubygems'
-require 'rake' # for FileList
-require 'fileutils'
-require 'ceedling/constants'
-
-
-class FileWrapper
-
- def get_expanded_path(path)
- return File.expand_path(path)
- end
-
- def basename(path, extension=nil)
- return File.basename(path, extension) if extension
- return File.basename(path)
- end
-
- def exist?(filepath)
- return true if (filepath == NULL_FILE_PATH)
- return File.exist?(filepath)
- end
-
- def directory?(path)
- return File.directory?(path)
- end
-
- def dirname(path)
- return File.dirname(path)
- end
-
- def directory_listing(glob)
- return Dir.glob(glob, File::FNM_PATHNAME)
- end
-
- def rm_f(filepath, options={})
- FileUtils.rm_f(filepath, **options)
- end
-
- def rm_r(filepath, options={})
- FileUtils.rm_r(filepath, **options={})
- end
-
- def cp(source, destination, options={})
- FileUtils.cp(source, destination, **options)
- end
-
- def compare(from, to)
- return FileUtils.compare_file(from, to)
- end
-
- def open(filepath, flags)
- File.open(filepath, flags) do |file|
- yield(file)
- end
- end
-
- def read(filepath)
- return File.read(filepath)
- end
-
- def touch(filepath, options={})
- FileUtils.touch(filepath, **options)
- end
-
- def write(filepath, contents, flags='w')
- File.open(filepath, flags) do |file|
- file.write(contents)
- end
- end
-
- def readlines(filepath)
- return File.readlines(filepath)
- end
-
- def instantiate_file_list(files=[])
- return FileList.new(files)
- end
-
- def mkdir(folder)
- return FileUtils.mkdir_p(folder)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/flaginator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/flaginator.rb
deleted file mode 100644
index 175b3c5acd..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/flaginator.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-require 'rubygems'
-require 'rake' # for ext()
-require 'fileutils'
-require 'ceedling/constants'
-
-
-# :flags:
-# :release:
-# :compile:
-# :'test_.+'
-# - -pedantic # add '-pedantic' to every test file
-# :*: # add '-foo' to compilation of all files not main.c
-# - -foo
-# :main: # add '-Wall' to compilation of main.c
-# - -Wall
-# :test:
-# :link:
-# :test_main: # add '--bar --baz' to linking of test_main.exe
-# - --bar
-# - --baz
-
-def partition(hash, &predicate)
- hash.partition(&predicate).map(&:to_h)
-end
-
-class Flaginator
-
- constructor :configurator
-
- def get_flag(hash, file_name)
- file_key = file_name.to_sym
-
- # 1. try literals
- literals, magic = partition(hash) { |k, v| k.to_s =~ /^\w+$/ }
- return literals[file_key] if literals.include?(file_key)
-
- any, regex = partition(magic) { |k, v| (k == :'*') || (k == :'.*') } # glob or regex wild card
-
- # 2. try regexes
- find_res = regex.find { |k, v| file_name =~ /^#{k.to_s}$/ }
- return find_res[1] if find_res
-
- # 3. try anything
- find_res = any.find { |k, v| file_name =~ /.*/ }
- return find_res[1] if find_res
-
- # 4. well, we've tried
- return []
- end
-
- def flag_down( operation, context, file )
- # create configurator accessor method
- accessor = ('flags_' + context.to_s).to_sym
-
- # create simple filename key from whatever filename provided
- file_name = File.basename( file ).ext('')
- file_key = File.basename( file ).ext('').to_sym
-
- # if no entry in configuration for flags for this context, bail out
- return [] if not @configurator.respond_to?( accessor )
-
- # get flags sub hash associated with this context
- flags = @configurator.send( accessor )
-
- # if operation not represented in flags hash, bail out
- return [] if not flags.include?( operation )
-
- # redefine flags to sub hash associated with the operation
- flags = flags[operation]
-
- return get_flag(flags, file_name)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/generator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/generator.rb
deleted file mode 100644
index 0b89024753..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/generator.rb
+++ /dev/null
@@ -1,186 +0,0 @@
-require 'ceedling/constants'
-
-class Generator
-
- constructor :configurator,
- :generator_helper,
- :preprocessinator,
- :cmock_builder,
- :generator_test_runner,
- :generator_test_results,
- :flaginator,
- :test_includes_extractor,
- :tool_executor,
- :file_finder,
- :file_path_utils,
- :streaminator,
- :plugin_manager,
- :file_wrapper
-
-
- def generate_shallow_includes_list(context, file)
- @streaminator.stdout_puts("Generating include list for #{File.basename(file)}...", Verbosity::NORMAL)
- @preprocessinator.preprocess_shallow_includes(file)
- end
-
- def generate_preprocessed_file(context, file)
- @streaminator.stdout_puts("Preprocessing #{File.basename(file)}...", Verbosity::NORMAL)
- @preprocessinator.preprocess_file(file)
- end
-
- def generate_dependencies_file(tool, context, source, object, dependencies)
- @streaminator.stdout_puts("Generating dependencies for #{File.basename(source)}...", Verbosity::NORMAL)
-
- command =
- @tool_executor.build_command_line(
- tool,
- [], # extra per-file command line parameters
- source,
- dependencies,
- object)
-
- @tool_executor.exec( command[:line], command[:options] )
- end
-
- def generate_mock(context, header_filepath)
- arg_hash = {:header_file => header_filepath, :context => context}
- @plugin_manager.pre_mock_generate( arg_hash )
-
- begin
- @cmock_builder.cmock.setup_mocks( arg_hash[:header_file] )
- rescue
- raise
- ensure
- @plugin_manager.post_mock_generate( arg_hash )
- end
- end
-
- # test_filepath may be either preprocessed test file or original test file
- def generate_test_runner(context, test_filepath, runner_filepath)
- arg_hash = {:context => context, :test_file => test_filepath, :runner_file => runner_filepath}
- @plugin_manager.pre_runner_generate(arg_hash)
-
- # collect info we need
- module_name = File.basename(arg_hash[:test_file])
- test_cases = @generator_test_runner.find_test_cases( @file_finder.find_test_from_runner_path(runner_filepath) )
- mock_list = @test_includes_extractor.lookup_raw_mock_list(arg_hash[:test_file])
-
- @streaminator.stdout_puts("Generating runner for #{module_name}...", Verbosity::NORMAL)
-
- test_file_includes = [] # Empty list for now, since apparently unused
-
- # build runner file
- begin
- @generator_test_runner.generate(module_name, runner_filepath, test_cases, mock_list, test_file_includes)
- rescue
- raise
- ensure
- @plugin_manager.post_runner_generate(arg_hash)
- end
- end
-
- def generate_object_file(tool, operation, context, source, object, list='', dependencies='')
- shell_result = {}
- arg_hash = {:tool => tool, :operation => operation, :context => context, :source => source, :object => object, :list => list, :dependencies => dependencies}
- @plugin_manager.pre_compile_execute(arg_hash)
-
- @streaminator.stdout_puts("Compiling #{File.basename(arg_hash[:source])}...", Verbosity::NORMAL)
- command =
- @tool_executor.build_command_line( arg_hash[:tool],
- @flaginator.flag_down( operation, context, source ),
- arg_hash[:source],
- arg_hash[:object],
- arg_hash[:list],
- arg_hash[:dependencies])
-
- @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG)
-
- begin
- shell_result = @tool_executor.exec( command[:line], command[:options] )
- rescue ShellExecutionException => ex
- shell_result = ex.shell_result
- raise ex
- ensure
- arg_hash[:shell_command] = command[:line]
- arg_hash[:shell_result] = shell_result
- @plugin_manager.post_compile_execute(arg_hash)
- end
- end
-
- def generate_executable_file(tool, context, objects, executable, map='', libraries=[], libpaths=[])
- shell_result = {}
- arg_hash = { :tool => tool,
- :context => context,
- :objects => objects,
- :executable => executable,
- :map => map,
- :libraries => libraries,
- :libpaths => libpaths
- }
-
- @plugin_manager.pre_link_execute(arg_hash)
-
- @streaminator.stdout_puts("Linking #{File.basename(arg_hash[:executable])}...", Verbosity::NORMAL)
- command =
- @tool_executor.build_command_line( arg_hash[:tool],
- @flaginator.flag_down( OPERATION_LINK_SYM, context, executable ),
- arg_hash[:objects],
- arg_hash[:executable],
- arg_hash[:map],
- arg_hash[:libraries],
- arg_hash[:libpaths]
- )
- @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG)
-
- begin
- shell_result = @tool_executor.exec( command[:line], command[:options] )
- rescue ShellExecutionException => ex
- notice = "\n" +
- "NOTICE: If the linker reports missing symbols, the following may be to blame:\n" +
- " 1. Test lacks #include statements corresponding to needed source files.\n" +
- " 2. Project search paths do not contain source files corresponding to #include statements in the test.\n"
-
- if (@configurator.project_use_mocks)
- notice += " 3. Test does not #include needed mocks.\n\n"
- else
- notice += "\n"
- end
-
- @streaminator.stderr_puts(notice, Verbosity::COMPLAIN)
- shell_result = ex.shell_result
- raise ''
- ensure
- arg_hash[:shell_result] = shell_result
- @plugin_manager.post_link_execute(arg_hash)
- end
- end
-
- def generate_test_results(tool, context, executable, result)
- arg_hash = {:tool => tool, :context => context, :executable => executable, :result_file => result}
- @plugin_manager.pre_test_fixture_execute(arg_hash)
-
- @streaminator.stdout_puts("Running #{File.basename(arg_hash[:executable])}...", Verbosity::NORMAL)
-
- # Unity's exit code is equivalent to the number of failed tests, so we tell @tool_executor not to fail out if there are failures
- # so that we can run all tests and collect all results
- command = @tool_executor.build_command_line(arg_hash[:tool], [], arg_hash[:executable])
- @streaminator.stdout_puts("Command: #{command}", Verbosity::DEBUG)
- command[:options][:boom] = false
- shell_result = @tool_executor.exec( command[:line], command[:options] )
-
- #Don't Let The Failure Count Make Us Believe Things Aren't Working
- shell_result[:exit_code] = 0
- @generator_helper.test_results_error_handler(executable, shell_result)
-
- processed = @generator_test_results.process_and_write_results( shell_result,
- arg_hash[:result_file],
- @file_finder.find_test_from_file_path(arg_hash[:executable]) )
-
- arg_hash[:result_file] = processed[:result_file]
- arg_hash[:results] = processed[:results]
- arg_hash[:shell_result] = shell_result # for raw output display if no plugins for formatted display
-
- @plugin_manager.post_test_fixture_execute(arg_hash)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/generator_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/generator_helper.rb
deleted file mode 100644
index a6682c2752..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/generator_helper.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'ceedling/constants'
-
-
-class GeneratorHelper
-
- constructor :streaminator
-
-
- def test_results_error_handler(executable, shell_result)
- notice = ''
- error = false
-
- if (shell_result[:output].nil? or shell_result[:output].strip.empty?)
- error = true
- # mirror style of generic tool_executor failure output
- notice = "\n" +
- "ERROR: Test executable \"#{File.basename(executable)}\" failed.\n" +
- "> Produced no output to $stdout.\n"
- elsif ((shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN).nil?)
- error = true
- # mirror style of generic tool_executor failure output
- notice = "\n" +
- "ERROR: Test executable \"#{File.basename(executable)}\" failed.\n" +
- "> Produced no final test result counts in $stdout:\n" +
- "#{shell_result[:output].strip}\n"
- end
-
- if (error)
- # since we told the tool executor to ignore the exit code, handle it explicitly here
- notice += "> And exited with status: [#{shell_result[:exit_code]}] (count of failed tests).\n" if (shell_result[:exit_code] != nil)
- notice += "> And then likely crashed.\n" if (shell_result[:exit_code] == nil)
-
- notice += "> This is often a symptom of a bad memory access in source or test code.\n\n"
-
- @streaminator.stderr_puts(notice, Verbosity::COMPLAIN)
- raise
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results.rb b/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results.rb
deleted file mode 100644
index 2cd96478c2..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require 'rubygems'
-require 'rake' # for .ext()
-require 'ceedling/constants'
-
-class GeneratorTestResults
-
- constructor :configurator, :generator_test_results_sanity_checker, :yaml_wrapper
-
- def process_and_write_results(unity_shell_result, results_file, test_file)
- output_file = results_file
-
- results = get_results_structure
-
- results[:source][:path] = File.dirname(test_file)
- results[:source][:file] = File.basename(test_file)
- results[:time] = unity_shell_result[:time] unless unity_shell_result[:time].nil?
-
- # process test statistics
- if (unity_shell_result[:output] =~ TEST_STDOUT_STATISTICS_PATTERN)
- results[:counts][:total] = $1.to_i
- results[:counts][:failed] = $2.to_i
- results[:counts][:ignored] = $3.to_i
- results[:counts][:passed] = (results[:counts][:total] - results[:counts][:failed] - results[:counts][:ignored])
- end
-
- # remove test statistics lines
- output_string = unity_shell_result[:output].sub(TEST_STDOUT_STATISTICS_PATTERN, '')
-
- output_string.lines do |line|
- # process unity output
- case line
- when /(:IGNORE)/
- elements = extract_line_elements(line, results[:source][:file])
- results[:ignores] << elements[0]
- results[:stdout] << elements[1] if (!elements[1].nil?)
- when /(:PASS$)/
- elements = extract_line_elements(line, results[:source][:file])
- results[:successes] << elements[0]
- results[:stdout] << elements[1] if (!elements[1].nil?)
- when /(:PASS \(.* ms\)$)/
- elements = extract_line_elements(line, results[:source][:file])
- results[:successes] << elements[0]
- results[:stdout] << elements[1] if (!elements[1].nil?)
- when /(:FAIL)/
- elements = extract_line_elements(line, results[:source][:file])
- results[:failures] << elements[0]
- results[:stdout] << elements[1] if (!elements[1].nil?)
- else # collect up all other
- results[:stdout] << line.chomp
- end
- end
-
- @generator_test_results_sanity_checker.verify(results, unity_shell_result[:exit_code])
-
- output_file = results_file.ext(@configurator.extension_testfail) if (results[:counts][:failed] > 0)
-
- @yaml_wrapper.dump(output_file, results)
-
- return { :result_file => output_file, :result => results }
- end
-
- private
-
- def get_results_structure
- return {
- :source => {:path => '', :file => ''},
- :successes => [],
- :failures => [],
- :ignores => [],
- :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0},
- :stdout => [],
- :time => 0.0
- }
- end
-
- def extract_line_elements(line, filename)
- # handle anything preceding filename in line as extra output to be collected
- stdout = nil
- stdout_regex = /(.+)#{Regexp.escape(filename)}.+/i
- unity_test_time = 0
-
- if (line =~ stdout_regex)
- stdout = $1.clone
- line.sub!(/#{Regexp.escape(stdout)}/, '')
- end
-
- # collect up test results minus and extra output
- elements = (line.strip.split(':'))[1..-1]
-
- # find timestamp if available
- if (elements[-1] =~ / \((\d*(?:\.\d*)?) ms\)/)
- unity_test_time = $1.to_f / 1000
- elements[-1].sub!(/ \((\d*(?:\.\d*)?) ms\)/, '')
- end
-
- return {:test => elements[1], :line => elements[0].to_i, :message => (elements[3..-1].join(':')).strip, :unity_test_time => unity_test_time}, stdout if elements.size >= 3
- return {:test => '???', :line => -1, :message => nil, :unity_test_time => unity_test_time} #fallback safe option. TODO better handling
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb b/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb
deleted file mode 100644
index 1d193c844b..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_results_sanity_checker.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require 'rubygems'
-require 'rake' # for ext() method
-require 'ceedling/constants'
-
-
-class GeneratorTestResultsSanityChecker
-
- constructor :configurator, :streaminator
-
- def verify(results, unity_exit_code)
-
- # do no sanity checking if it's disabled
- return if (@configurator.sanity_checks == TestResultsSanityChecks::NONE)
- raise "results nil or empty" if results.nil? || results.empty?
-
- ceedling_ignores_count = results[:ignores].size
- ceedling_failures_count = results[:failures].size
- ceedling_tests_summation = (ceedling_ignores_count + ceedling_failures_count + results[:successes].size)
-
- # Exit code handling is not a sanity check that can always be performed because
- # command line simulators may or may not pass through Unity's exit code
- if (@configurator.sanity_checks >= TestResultsSanityChecks::THOROUGH)
- # many platforms limit exit codes to a maximum of 255
- if ((ceedling_failures_count != unity_exit_code) and (unity_exit_code < 255))
- sanity_check_warning(results[:source][:file], "Unity's exit code (#{unity_exit_code}) does not match Ceedling's summation of failed test cases (#{ceedling_failures_count}).")
- end
-
- if ((ceedling_failures_count < 255) and (unity_exit_code == 255))
- sanity_check_warning(results[:source][:file], "Ceedling's summation of failed test cases (#{ceedling_failures_count}) is less than Unity's exit code (255 or more).")
- end
- end
-
- if (ceedling_ignores_count != results[:counts][:ignored])
- sanity_check_warning(results[:source][:file], "Unity's final ignore count (#{results[:counts][:ignored]}) does not match Ceedling's summation of ignored test cases (#{ceedling_ignores_count}).")
- end
-
- if (ceedling_failures_count != results[:counts][:failed])
- sanity_check_warning(results[:source][:file], "Unity's final fail count (#{results[:counts][:failed]}) does not match Ceedling's summation of failed test cases (#{ceedling_failures_count}).")
- end
-
- if (ceedling_tests_summation != results[:counts][:total])
- sanity_check_warning(results[:source][:file], "Unity's final test count (#{results[:counts][:total]}) does not match Ceedling's summation of all test cases (#{ceedling_tests_summation}).")
- end
-
- end
-
- private
-
- def sanity_check_warning(file, message)
- unless defined?(CEEDLING_IGNORE_SANITY_CHECK)
- notice = "\n" +
- "ERROR: Internal sanity check for test fixture '#{file.ext(@configurator.extension_executable)}' finds that #{message}\n" +
- " Possible causes:\n" +
- " 1. Your test + source dereferenced a null pointer.\n" +
- " 2. Your test + source indexed past the end of a buffer.\n" +
- " 3. Your test + source committed a memory access violation.\n" +
- " 4. Your test fixture produced an exit code of 0 despite execution ending prematurely.\n" +
- " Sanity check failures of test results are usually a symptom of interrupted test execution.\n\n"
-
- @streaminator.stderr_puts( notice )
- raise
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_runner.rb b/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_runner.rb
deleted file mode 100644
index 79ed7140fd..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/generator_test_runner.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-
-class GeneratorTestRunner
-
- constructor :configurator, :file_path_utils, :file_wrapper
-
- def find_test_cases(test_file)
-
- #Pull in Unity's Test Runner Generator
- require 'generate_test_runner.rb'
- @test_runner_generator ||= UnityTestRunnerGenerator.new( @configurator.get_runner_config )
-
- if (@configurator.project_use_test_preprocessor)
-
- #redirect to use the preprocessor file if we're doing that sort of thing
- pre_test_file = @file_path_utils.form_preprocessed_file_filepath(test_file)
-
- #actually look for the tests using Unity's test runner generator
- contents = @file_wrapper.read(pre_test_file)
- tests_and_line_numbers = @test_runner_generator.find_tests(contents)
- @test_runner_generator.find_setup_and_teardown(contents)
-
- #look up the line numbers in the original file
- source_lines = @file_wrapper.read(test_file).split("\n")
- source_index = 0;
- tests_and_line_numbers.size.times do |i|
- source_lines[source_index..-1].each_with_index do |line, index|
- if (line =~ /#{tests_and_line_numbers[i][:test]}/)
- source_index += index
- tests_and_line_numbers[i][:line_number] = source_index + 1
- break
- end
- end
- end
- else
- #Just look for the tests using Unity's test runner generator
- contents = @file_wrapper.read(test_file)
- tests_and_line_numbers = @test_runner_generator.find_tests(contents)
- @test_runner_generator.find_setup_and_teardown(contents)
- end
-
- return tests_and_line_numbers
- end
-
- def generate(module_name, runner_filepath, test_cases, mock_list, test_file_includes=[])
- require 'generate_test_runner.rb'
-
- header_extension = @configurator.extension_header
-
- #actually build the test runner using Unity's test runner generator
- #(there is no need to use preprocessor here because we've already looked up test cases and are passing them in here)
- @test_runner_generator ||= UnityTestRunnerGenerator.new( @configurator.get_runner_config )
- @test_runner_generator.generate( module_name,
- runner_filepath,
- test_cases,
- mock_list.map{|f| File.basename(f,'.*')+header_extension},
- test_file_includes.map{|f| File.basename(f,'.*')+header_extension})
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/loginator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/loginator.rb
deleted file mode 100644
index 38147b3220..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/loginator.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-
-class Loginator
-
- constructor :configurator, :project_file_loader, :project_config_manager, :file_wrapper, :system_wrapper
-
-
- def setup_log_filepath
- config_files = []
- config_files << @project_file_loader.main_file
- config_files << @project_file_loader.user_file
- config_files.concat( @project_config_manager.options_files )
- config_files.compact!
- config_files.map! { |file| file.ext('') }
-
- log_name = config_files.join( '_' )
-
- @project_log_filepath = File.join( @configurator.project_log_path, log_name.ext('.log') )
- end
-
-
- def log(string, heading=nil)
- return if (not @configurator.project_logging)
-
- output = "\n[#{@system_wrapper.time_now}]"
- output += " :: #{heading}" if (not heading.nil?)
- output += "\n#{string.strip}\n"
-
- @file_wrapper.write(@project_log_filepath, output, 'a')
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/makefile.rb b/test/unit-test/vendor/ceedling/lib/ceedling/makefile.rb
deleted file mode 100644
index 9ad894ea06..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/makefile.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-
-# modified version of Rake's provided make-style dependency loader
-# customizations:
-# (1) handles windows drives in paths -- colons don't confuse task demarcation
-# (2) handles spaces in directory paths
-
-module Rake
-
- # Makefile loader to be used with the import file loader.
- class MakefileLoader
-
- # Load the makefile dependencies in +fn+.
- def load(fn)
- open(fn) do |mf|
- lines = mf.read
- lines.gsub!(/#[^\n]*\n/m, "") # remove comments
- lines.gsub!(/\\\n/, ' ') # string together line continuations into single line
- lines.split("\n").each do |line|
- process_line(line)
- end
- end
- end
-
- private
-
- # Process one logical line of makefile data.
- def process_line(line)
- # split on presence of task demaractor followed by space (i.e don't get confused by a colon in a win path)
- file_tasks, args = line.split(/:\s/)
-
- return if args.nil?
-
- # split at non-escaped space boundary between files (i.e. escaped spaces in paths are left alone)
- dependents = args.split(/\b\s+/)
- # replace escaped spaces and clean up any extra whitespace
- dependents.map! { |path| path.gsub(/\\ /, ' ').strip }
-
- file_tasks.strip.split.each do |file_task|
- file file_task => dependents
- end
- end
- end
-
- # Install the handler
- Rake.application.add_loader('mf', MakefileLoader.new)
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/objects.yml b/test/unit-test/vendor/ceedling/lib/ceedling/objects.yml
deleted file mode 100644
index d73987f7c9..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/objects.yml
+++ /dev/null
@@ -1,313 +0,0 @@
-
-file_wrapper:
-
-file_system_wrapper:
-
-stream_wrapper:
-
-rake_wrapper:
-
-yaml_wrapper:
-
-system_wrapper:
-
-cmock_builder:
-
-reportinator:
-
-rake_utils:
- compose:
- - rake_wrapper
-
-system_utils:
- compose:
- - system_wrapper
-
-file_path_utils:
- compose:
- - configurator
- - file_wrapper
-
-file_system_utils:
- compose: file_wrapper
-
-project_file_loader:
- compose:
- - yaml_wrapper
- - stream_wrapper
- - system_wrapper
- - file_wrapper
-
-project_config_manager:
- compose:
- - cacheinator
- - configurator
- - yaml_wrapper
- - file_wrapper
-
-cacheinator:
- compose:
- - cacheinator_helper
- - file_path_utils
- - file_wrapper
- - yaml_wrapper
-
-cacheinator_helper:
- compose:
- - file_wrapper
- - yaml_wrapper
-
-tool_executor:
- compose:
- - configurator
- - tool_executor_helper
- - streaminator
- - system_wrapper
-
-tool_executor_helper:
- compose:
- - streaminator
- - system_utils
- - system_wrapper
-
-configurator:
- compose:
- - configurator_setup
- - configurator_plugins
- - configurator_builder
- - cmock_builder
- - yaml_wrapper
- - system_wrapper
-
-configurator_setup:
- compose:
- - configurator_builder
- - configurator_validator
- - configurator_plugins
- - stream_wrapper
-
-configurator_plugins:
- compose:
- - stream_wrapper
- - file_wrapper
- - system_wrapper
-
-configurator_validator:
- compose:
- - file_wrapper
- - stream_wrapper
- - system_wrapper
-
-configurator_builder:
- compose:
- - file_system_utils
- - file_wrapper
- - system_wrapper
-
-loginator:
- compose:
- - configurator
- - project_file_loader
- - project_config_manager
- - file_wrapper
- - system_wrapper
-
-streaminator:
- compose:
- - streaminator_helper
- - verbosinator
- - loginator
- - stream_wrapper
-
-streaminator_helper:
-
-setupinator:
-
-plugin_builder:
-
-plugin_manager:
- compose:
- - configurator
- - plugin_manager_helper
- - streaminator
- - reportinator
- - system_wrapper
-
-plugin_manager_helper:
-
-plugin_reportinator:
- compose:
- - plugin_reportinator_helper
- - plugin_manager
- - reportinator
-
-plugin_reportinator_helper:
- compose:
- - configurator
- - streaminator
- - yaml_wrapper
- - file_wrapper
-
-verbosinator:
- compose: configurator
-
-file_finder:
- compose:
- - configurator
- - file_finder_helper
- - cacheinator
- - file_path_utils
- - file_wrapper
- - yaml_wrapper
-
-file_finder_helper:
- compose: streaminator
-
-test_includes_extractor:
- compose:
- - configurator
- - yaml_wrapper
- - file_wrapper
-
-task_invoker:
- compose:
- - dependinator
- - rake_utils
- - rake_wrapper
- - project_config_manager
-
-flaginator:
- compose:
- - configurator
-
-generator:
- compose:
- - configurator
- - generator_helper
- - preprocessinator
- - cmock_builder
- - generator_test_runner
- - generator_test_results
- - flaginator
- - test_includes_extractor
- - tool_executor
- - file_finder
- - file_path_utils
- - streaminator
- - plugin_manager
- - file_wrapper
-
-generator_helper:
- compose:
- - streaminator
-
-generator_test_results:
- compose:
- - configurator
- - generator_test_results_sanity_checker
- - yaml_wrapper
-
-generator_test_results_sanity_checker:
- compose:
- - configurator
- - streaminator
-
-generator_test_runner:
- compose:
- - configurator
- - file_path_utils
- - file_wrapper
-
-dependinator:
- compose:
- - configurator
- - project_config_manager
- - test_includes_extractor
- - file_path_utils
- - rake_wrapper
- - file_wrapper
-
-preprocessinator:
- compose:
- - preprocessinator_helper
- - preprocessinator_includes_handler
- - preprocessinator_file_handler
- - task_invoker
- - file_path_utils
- - yaml_wrapper
- - project_config_manager
- - configurator
-
-preprocessinator_helper:
- compose:
- - configurator
- - test_includes_extractor
- - task_invoker
- - file_finder
- - file_path_utils
-
-preprocessinator_includes_handler:
- compose:
- - configurator
- - tool_executor
- - task_invoker
- - file_path_utils
- - yaml_wrapper
- - file_wrapper
- - file_finder
-
-preprocessinator_file_handler:
- compose:
- - preprocessinator_extractor
- - configurator
- - tool_executor
- - file_path_utils
- - file_wrapper
-
-preprocessinator_extractor:
-
-test_invoker:
- compose:
- - configurator
- - test_invoker_helper
- - plugin_manager
- - streaminator
- - preprocessinator
- - task_invoker
- - dependinator
- - project_config_manager
- - build_invoker_utils
- - file_path_utils
- - file_wrapper
-
-test_invoker_helper:
- compose:
- - configurator
- - task_invoker
- - test_includes_extractor
- - file_finder
- - file_path_utils
- - file_wrapper
-
-release_invoker:
- compose:
- - configurator
- - release_invoker_helper
- - build_invoker_utils
- - dependinator
- - task_invoker
- - file_path_utils
- - file_wrapper
-
-release_invoker_helper:
- compose:
- - configurator
- - dependinator
- - task_invoker
-
-build_invoker_utils:
- compose:
- - configurator
- - streaminator
-
-erb_wrapper:
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/par_map.rb b/test/unit-test/vendor/ceedling/lib/ceedling/par_map.rb
deleted file mode 100644
index 250b5ad307..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/par_map.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-def par_map(n, things, &block)
- queue = Queue.new
- things.each { |thing| queue << thing }
- threads = (1..n).collect do
- Thread.new do
- begin
- while true
- yield queue.pop(true)
- end
- rescue ThreadError
-
- end
- end
- end
- threads.each { |t| t.join }
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin.rb
deleted file mode 100644
index 835c08c529..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-
-class String
- # reformat a multiline string to have given number of whitespace columns;
- # helpful for formatting heredocs
- def left_margin(margin=0)
- non_whitespace_column = 0
- new_lines = []
-
- # find first line with non-whitespace and count left columns of whitespace
- self.each_line do |line|
- if (line =~ /^\s*\S/)
- non_whitespace_column = $&.length - 1
- break
- end
- end
-
- # iterate through each line, chopping off leftmost whitespace columns and add back the desired whitespace margin
- self.each_line do |line|
- columns = []
- margin.times{columns << ' '}
- # handle special case of line being narrower than width to be lopped off
- if (non_whitespace_column < line.length)
- new_lines << "#{columns.join}#{line[non_whitespace_column..-1]}"
- else
- new_lines << "\n"
- end
- end
-
- return new_lines.join
- end
-end
-
-class Plugin
- attr_reader :name, :environment
- attr_accessor :plugin_objects
-
- def initialize(system_objects, name)
- @environment = []
- @ceedling = system_objects
- @name = name
- self.setup
- end
-
- def setup; end
-
- # mock generation
- def pre_mock_generate(arg_hash); end
- def post_mock_generate(arg_hash); end
-
- # test runner generation
- def pre_runner_generate(arg_hash); end
- def post_runner_generate(arg_hash); end
-
- # compilation (test or source)
- def pre_compile_execute(arg_hash); end
- def post_compile_execute(arg_hash); end
-
- # linking (test or source)
- def pre_link_execute(arg_hash); end
- def post_link_execute(arg_hash); end
-
- # test fixture execution
- def pre_test_fixture_execute(arg_hash); end
- def post_test_fixture_execute(arg_hash); end
-
- # test task
- def pre_test(test); end
- def post_test(test); end
-
- # release task
- def pre_release; end
- def post_release; end
-
- # whole shebang (any use of Ceedling)
- def pre_build; end
- def post_build; end
-
- def summary; end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_builder.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin_builder.rb
deleted file mode 100644
index a010e1d0f3..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_builder.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'ceedling/plugin'
-
-class PluginBuilder
-
- attr_accessor :plugin_objects
-
- def construct_plugin(plugin_name, object_map_yaml, system_objects)
- # @streaminator.stdout_puts("Constructing plugin #{plugin_name}...", Verbosity::OBNOXIOUS)
- object_map = {}
- @plugin_objects = {}
- @system_objects = system_objects
-
- if object_map_yaml
- @object_map = YAML.load(object_map_yaml)
- @object_map.each_key do |obj|
- construct_object(obj)
- end
- else
- raise "Invalid object map for plugin #{plugin_name}!"
- end
-
- return @plugin_objects
- end
-
- private
-
- def camelize(underscored_name)
- return underscored_name.gsub(/(_|^)([a-z0-9])/) {$2.upcase}
- end
-
- def construct_object(obj)
- if @plugin_objects[obj].nil?
- if @object_map[obj] && @object_map[obj]['compose']
- @object_map[obj]['compose'].each do |dep|
- construct_object(dep)
- end
- end
- build_object(obj)
- end
- end
-
- def build_object(new_object)
- if @plugin_objects[new_object.to_sym].nil?
- # @streaminator.stdout_puts("Building plugin object #{new_object}", Verbosity::OBNOXIOUS)
- require new_object
- class_name = camelize(new_object)
- new_instance = eval("#{class_name}.new(@system_objects, class_name.to_s)")
- new_instance.plugin_objects = @plugin_objects
- @plugin_objects[new_object.to_sym] = new_instance
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager.rb
deleted file mode 100644
index 0468f2fc47..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-require 'ceedling/constants'
-
-class PluginManager
-
- constructor :configurator, :plugin_manager_helper, :streaminator, :reportinator, :system_wrapper
-
- def setup
- @build_fail_registry = []
- @plugin_objects = [] # so we can preserve order
- end
-
- def load_plugin_scripts(script_plugins, system_objects)
- environment = []
-
- script_plugins.each do |plugin|
- # protect against instantiating object multiple times due to processing config multiple times (option files, etc)
- next if (@plugin_manager_helper.include?(@plugin_objects, plugin))
- begin
- @system_wrapper.require_file( "#{plugin}.rb" )
- object = @plugin_manager_helper.instantiate_plugin_script( camelize(plugin), system_objects, plugin )
- @plugin_objects << object
- environment += object.environment
-
- # add plugins to hash of all system objects
- system_objects[plugin.downcase.to_sym] = object
- rescue
- puts "Exception raised while trying to load plugin: #{plugin}"
- raise
- end
- end
-
- yield( { :environment => environment } ) if (environment.size > 0)
- end
-
- def plugins_failed?
- return (@build_fail_registry.size > 0)
- end
-
- def print_plugin_failures
- if (@build_fail_registry.size > 0)
- report = @reportinator.generate_banner('BUILD FAILURE SUMMARY')
-
- @build_fail_registry.each do |failure|
- report += "#{' - ' if (@build_fail_registry.size > 1)}#{failure}\n"
- end
-
- report += "\n"
-
- @streaminator.stderr_puts(report, Verbosity::ERRORS)
- end
- end
-
- def register_build_failure(message)
- @build_fail_registry << message if (message and not message.empty?)
- end
-
- #### execute all plugin methods ####
-
- def pre_mock_generate(arg_hash); execute_plugins(:pre_mock_generate, arg_hash); end
- def post_mock_generate(arg_hash); execute_plugins(:post_mock_generate, arg_hash); end
-
- def pre_runner_generate(arg_hash); execute_plugins(:pre_runner_generate, arg_hash); end
- def post_runner_generate(arg_hash); execute_plugins(:post_runner_generate, arg_hash); end
-
- def pre_compile_execute(arg_hash); execute_plugins(:pre_compile_execute, arg_hash); end
- def post_compile_execute(arg_hash); execute_plugins(:post_compile_execute, arg_hash); end
-
- def pre_link_execute(arg_hash); execute_plugins(:pre_link_execute, arg_hash); end
- def post_link_execute(arg_hash); execute_plugins(:post_link_execute, arg_hash); end
-
- def pre_test_fixture_execute(arg_hash); execute_plugins(:pre_test_fixture_execute, arg_hash); end
- def post_test_fixture_execute(arg_hash)
- # special arbitration: raw test results are printed or taken over by plugins handling the job
- @streaminator.stdout_puts(arg_hash[:shell_result][:output]) if (@configurator.plugins_display_raw_test_results)
- execute_plugins(:post_test_fixture_execute, arg_hash)
- end
-
- def pre_test(test); execute_plugins(:pre_test, test); end
- def post_test(test); execute_plugins(:post_test, test); end
-
- def pre_release; execute_plugins(:pre_release); end
- def post_release; execute_plugins(:post_release); end
-
- def pre_build; execute_plugins(:pre_build); end
- def post_build; execute_plugins(:post_build); end
- def post_error; execute_plugins(:post_error); end
-
- def summary; execute_plugins(:summary); end
-
- private ####################################
-
- def camelize(underscored_name)
- return underscored_name.gsub(/(_|^)([a-z0-9])/) {$2.upcase}
- end
-
- def execute_plugins(method, *args)
- @plugin_objects.each do |plugin|
- begin
- plugin.send(method, *args) if plugin.respond_to?(method)
- rescue
- puts "Exception raised in plugin: #{plugin.name}, in method #{method}"
- raise
- end
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb
deleted file mode 100644
index b18248a652..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_manager_helper.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-
-class PluginManagerHelper
-
- def include?(plugins, name)
- include = false
- plugins.each do |plugin|
- if (plugin.name == name)
- include = true
- break
- end
- end
- return include
- end
-
- def instantiate_plugin_script(plugin, system_objects, name)
- return eval("#{plugin}.new(system_objects, name)")
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator.rb
deleted file mode 100644
index afc54494bf..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require 'ceedling/constants'
-require 'ceedling/defaults'
-
-class PluginReportinator
-
- constructor :plugin_reportinator_helper, :plugin_manager, :reportinator
-
- def setup
- @test_results_template = nil
- end
-
-
- def set_system_objects(system_objects)
- @plugin_reportinator_helper.ceedling = system_objects
- end
-
-
- def fetch_results(results_path, test, options={:boom => false})
- return @plugin_reportinator_helper.fetch_results( File.join(results_path, test), options )
- end
-
-
- def generate_banner(message)
- return @reportinator.generate_banner(message)
- end
-
-
- def assemble_test_results(results_list, options={:boom => false})
- aggregated_results = get_results_structure
-
- results_list.each do |result_path|
- results = @plugin_reportinator_helper.fetch_results( result_path, options )
- @plugin_reportinator_helper.process_results(aggregated_results, results)
- end
-
- return aggregated_results
- end
-
-
- def register_test_results_template(template)
- @test_results_template = template if (@test_results_template.nil?)
- end
-
-
- def run_test_results_report(hash, verbosity=Verbosity::NORMAL, &block)
- run_report( $stdout,
- ((@test_results_template.nil?) ? DEFAULT_TESTS_RESULTS_REPORT_TEMPLATE : @test_results_template),
- hash,
- verbosity,
- &block )
- end
-
-
- def run_report(stream, template, hash=nil, verbosity=Verbosity::NORMAL)
- failure = nil
- failure = yield() if block_given?
-
- @plugin_manager.register_build_failure( failure )
-
- @plugin_reportinator_helper.run_report( stream, template, hash, verbosity )
- end
-
- private ###############################
-
- def get_results_structure
- return {
- :successes => [],
- :failures => [],
- :ignores => [],
- :stdout => [],
- :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0, :stdout => 0},
- :time => 0.0
- }
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb
deleted file mode 100644
index 7831587974..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/plugin_reportinator_helper.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'erb'
-require 'rubygems'
-require 'rake' # for ext()
-require 'ceedling/constants'
-
-class PluginReportinatorHelper
-
- attr_writer :ceedling
-
- constructor :configurator, :streaminator, :yaml_wrapper, :file_wrapper
-
- def fetch_results(results_path, options)
- pass_path = File.join(results_path.ext( @configurator.extension_testpass ))
- fail_path = File.join(results_path.ext( @configurator.extension_testfail ))
-
- if (@file_wrapper.exist?(fail_path))
- return @yaml_wrapper.load(fail_path)
- elsif (@file_wrapper.exist?(pass_path))
- return @yaml_wrapper.load(pass_path)
- else
- if (options[:boom])
- @streaminator.stderr_puts("Could find no test results for '#{File.basename(results_path).ext(@configurator.extension_source)}'", Verbosity::ERRORS)
- raise
- end
- end
-
- return {}
- end
-
-
- def process_results(aggregate_results, results)
- return if (results.empty?)
- aggregate_results[:successes] << { :source => results[:source].clone, :collection => results[:successes].clone } if (results[:successes].size > 0)
- aggregate_results[:failures] << { :source => results[:source].clone, :collection => results[:failures].clone } if (results[:failures].size > 0)
- aggregate_results[:ignores] << { :source => results[:source].clone, :collection => results[:ignores].clone } if (results[:ignores].size > 0)
- aggregate_results[:stdout] << { :source => results[:source].clone, :collection => results[:stdout].clone } if (results[:stdout].size > 0)
- aggregate_results[:counts][:total] += results[:counts][:total]
- aggregate_results[:counts][:passed] += results[:counts][:passed]
- aggregate_results[:counts][:failed] += results[:counts][:failed]
- aggregate_results[:counts][:ignored] += results[:counts][:ignored]
- aggregate_results[:counts][:stdout] += results[:stdout].size
- aggregate_results[:time] += results[:time]
- end
-
-
- def run_report(stream, template, hash, verbosity)
- output = ERB.new(template, 0, "%<>")
- @streaminator.stream_puts(stream, output.result(binding()), verbosity)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator.rb
deleted file mode 100644
index 52d82ca292..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-
-class Preprocessinator
-
- constructor :preprocessinator_helper, :preprocessinator_includes_handler, :preprocessinator_file_handler, :task_invoker, :file_path_utils, :yaml_wrapper, :project_config_manager, :configurator
-
-
- def setup
- # fashion ourselves callbacks @preprocessinator_helper can use
- @preprocess_includes_proc = Proc.new { |filepath| self.preprocess_shallow_includes(filepath) }
- @preprocess_mock_file_proc = Proc.new { |filepath| self.preprocess_file(filepath) }
- @preprocess_test_file_directives_proc = Proc.new { |filepath| self.preprocess_file_directives(filepath) }
- @preprocess_test_file_proc = Proc.new { |filepath| self.preprocess_file(filepath) }
- end
-
- def preprocess_shallow_source_includes(test)
- @preprocessinator_helper.preprocess_source_includes(test)
- end
-
- def preprocess_test_and_invoke_test_mocks(test)
- @preprocessinator_helper.preprocess_includes(test, @preprocess_includes_proc)
-
- mocks_list = @preprocessinator_helper.assemble_mocks_list(test)
-
- @project_config_manager.process_test_defines_change(mocks_list)
-
- @preprocessinator_helper.preprocess_mockable_headers(mocks_list, @preprocess_mock_file_proc)
-
- @task_invoker.invoke_test_mocks(mocks_list)
-
- if (@configurator.project_use_preprocessor_directives)
- @preprocessinator_helper.preprocess_test_file(test, @preprocess_test_file_directives_proc)
- else
- @preprocessinator_helper.preprocess_test_file(test, @preprocess_test_file_proc)
- end
-
- return mocks_list
- end
-
- def preprocess_shallow_includes(filepath)
- includes = @preprocessinator_includes_handler.extract_includes(filepath)
-
- @preprocessinator_includes_handler.write_shallow_includes_list(
- @file_path_utils.form_preprocessed_includes_list_filepath(filepath), includes)
- end
-
- def preprocess_file(filepath)
- @preprocessinator_includes_handler.invoke_shallow_includes_list(filepath)
- @preprocessinator_file_handler.preprocess_file( filepath, @yaml_wrapper.load(@file_path_utils.form_preprocessed_includes_list_filepath(filepath)) )
- end
-
- def preprocess_file_directives(filepath)
- @preprocessinator_includes_handler.invoke_shallow_includes_list( filepath )
- @preprocessinator_file_handler.preprocess_file_directives( filepath,
- @yaml_wrapper.load( @file_path_utils.form_preprocessed_includes_list_filepath( filepath ) ) )
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb b/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb
deleted file mode 100644
index 62026e15a0..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_extractor.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-class PreprocessinatorExtractor
- def extract_base_file_from_preprocessed_expansion(filepath)
- # preprocessing by way of toolchain preprocessor expands macros, eliminates
- # comments, strips out #ifdef code, etc. however, it also expands in place
- # each #include'd file. so, we must extract only the lines of the file
- # that belong to the file originally preprocessed
-
- # iterate through all lines and alternate between extract and ignore modes
- # all lines between a '#'line containing file name of our filepath and the
- # next '#'line should be extracted
-
- base_name = File.basename(filepath)
- not_pragma = /^#(?!pragma\b)/ # preprocessor directive that's not a #pragma
- pattern = /^#.*(\s|\/|\\|\")#{Regexp.escape(base_name)}/
- found_file = false # have we found the file we care about?
-
- lines = []
- File.readlines(filepath).each do |line|
- line.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
- if found_file and not line =~ not_pragma
- lines << line
- else
- found_file = false
- end
-
- found_file = true if line =~ pattern
- end
-
- return lines
- end
-
- def extract_base_file_from_preprocessed_directives(filepath)
- # preprocessing by way of toolchain preprocessor eliminates directives only
- # like #ifdef's and leave other code
-
- # iterate through all lines and only get last chunk of file after a last
- # '#'line containing file name of our filepath
-
- base_name = File.basename(filepath)
- pattern = /^#.*(\s|\/|\\|\")#{Regexp.escape(base_name)}/
- found_file = false # have we found the file we care about?
-
- lines = []
- File.readlines(filepath).each do |line|
- line.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
- lines << line
-
- if line =~ pattern
- lines = []
- end
- end
-
- return lines
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb b/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb
deleted file mode 100644
index 978fa0d052..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_file_handler.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-class PreprocessinatorFileHandler
-
- constructor :preprocessinator_extractor, :configurator, :tool_executor, :file_path_utils, :file_wrapper
-
-
- def preprocess_file(filepath, includes)
- preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath(filepath)
-
- command = @tool_executor.build_command_line(@configurator.tools_test_file_preprocessor, [], filepath, preprocessed_filepath)
- @tool_executor.exec(command[:line], command[:options])
-
- contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_expansion(preprocessed_filepath)
-
- includes.each{|include| contents.unshift("#include \"#{include}\"")}
-
- @file_wrapper.write(preprocessed_filepath, contents.join("\n"))
- end
-
- def preprocess_file_directives(filepath, includes)
- preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath(filepath)
-
- command = @tool_executor.build_command_line(@configurator.tools_test_file_preprocessor_directives, [], filepath, preprocessed_filepath)
- @tool_executor.exec(command[:line], command[:options])
-
- contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_directives(preprocessed_filepath)
-
- includes.each{|include| contents.unshift("#include \"#{include}\"")}
-
- @file_wrapper.write(preprocessed_filepath, contents.join("\n"))
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_helper.rb
deleted file mode 100644
index 4bbda67fca..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_helper.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-class PreprocessinatorHelper
-
- constructor :configurator, :test_includes_extractor, :task_invoker, :file_finder, :file_path_utils
-
-
- def preprocess_includes(test, preprocess_includes_proc)
- if (@configurator.project_use_test_preprocessor)
- preprocessed_includes_list = @file_path_utils.form_preprocessed_includes_list_filepath(test)
- preprocess_includes_proc.call( @file_finder.find_test_from_file_path(preprocessed_includes_list) )
- @test_includes_extractor.parse_includes_list(preprocessed_includes_list)
- else
- @test_includes_extractor.parse_test_file(test)
- end
- end
-
- def preprocess_source_includes(test)
- @test_includes_extractor.parse_test_file_source_include(test)
- end
-
- def assemble_mocks_list(test)
- return @file_path_utils.form_mocks_source_filelist( @test_includes_extractor.lookup_raw_mock_list(test) )
- end
-
- def preprocess_mockable_headers(mock_list, preprocess_file_proc)
- if (@configurator.project_use_test_preprocessor)
- preprocess_files_smartly(
- @file_path_utils.form_preprocessed_mockable_headers_filelist(mock_list),
- preprocess_file_proc ) { |file| @file_finder.find_header_file(file) }
- end
- end
-
- def preprocess_test_file(test, preprocess_file_proc)
- return if (!@configurator.project_use_test_preprocessor)
-
- preprocess_file_proc.call(test)
- end
-
- private ############################
-
- def preprocess_files_smartly(file_list, preprocess_file_proc)
- if (@configurator.project_use_deep_dependencies)
- @task_invoker.invoke_test_preprocessed_files(file_list)
- else
- file_list.each { |file| preprocess_file_proc.call( yield(file) ) }
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb b/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb
deleted file mode 100644
index 9e5ae1fbf4..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/preprocessinator_includes_handler.rb
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-class PreprocessinatorIncludesHandler
-
- constructor :configurator, :tool_executor, :task_invoker, :file_path_utils, :yaml_wrapper, :file_wrapper, :file_finder
- @@makefile_cache = {}
-
- # shallow includes: only those headers a source file explicitly includes
-
- def invoke_shallow_includes_list(filepath)
- @task_invoker.invoke_test_shallow_include_lists( [@file_path_utils.form_preprocessed_includes_list_filepath(filepath)] )
- end
-
- ##
- # Ask the preprocessor for a make-style dependency rule of only the headers
- # the source file immediately includes.
- #
- # === Arguments
- # +filepath+ _String_:: Path to the test file to process.
- #
- # === Return
- # _String_:: The text of the dependency rule generated by the preprocessor.
- def form_shallow_dependencies_rule(filepath)
- if @@makefile_cache.has_key?(filepath)
- return @@makefile_cache[filepath]
- end
- # change filename (prefix of '_') to prevent preprocessor from finding
- # include files in temp directory containing file it's scanning
- temp_filepath = @file_path_utils.form_temp_path(filepath, '_')
-
- # read the file and replace all include statements with a decorated version
- # (decorating the names creates file names that don't exist, thus preventing
- # the preprocessor from snaking out and discovering the entire include path
- # that winds through the code). The decorated filenames indicate files that
- # are included directly by the test file.
- contents = @file_wrapper.read(filepath)
-
- if !contents.valid_encoding?
- contents = contents.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8')
- end
-
- contents.gsub!( /^\s*#include\s+[\"<]\s*(\S+)\s*[\">]/, "#include \"\\1\"\n#include \"@@@@\\1\"" )
- contents.gsub!( /^\s*TEST_FILE\(\s*\"\s*(\S+)\s*\"\s*\)/, "#include \"\\1\"\n#include \"@@@@\\1\"")
- @file_wrapper.write( temp_filepath, contents )
-
- # extract the make-style dependency rule telling the preprocessor to
- # ignore the fact that it can't find the included files
- command = @tool_executor.build_command_line(@configurator.tools_test_includes_preprocessor, [], temp_filepath)
- shell_result = @tool_executor.exec(command[:line], command[:options])
-
- @@makefile_cache[filepath] = shell_result[:output]
- return shell_result[:output]
- end
-
- ##
- # Extract the headers that are directly included by a source file using the
- # provided, annotated Make dependency rule.
- #
- # === Arguments
- # +filepath+ _String_:: C source or header file to extract includes for.
- #
- # === Return
- # _Array_ of _String_:: Array of the direct dependencies for the source file.
- def extract_includes(filepath)
- to_process = [filepath]
- ignore_list = []
- list = []
- all_mocks = []
-
- include_paths = @configurator.project_config_hash[:collection_paths_include]
- include_paths = [] if include_paths.nil?
- include_paths.map! {|path| File.expand_path(path)}
-
- while to_process.length > 0
- target = to_process.shift()
- ignore_list << target
- new_deps, new_to_process, all_mocks = extract_includes_helper(target, include_paths, ignore_list, all_mocks)
- list += new_deps
- to_process += new_to_process
- if !@configurator.project_config_hash[:project_auto_link_deep_dependencies]
- break
- else
- list = list.uniq()
- to_process = to_process.uniq()
- end
- end
-
- return list
- end
-
- def extract_includes_helper(filepath, include_paths, ignore_list, mocks)
- # Extract the dependencies from the make rule
- make_rule = self.form_shallow_dependencies_rule(filepath)
- target_file = make_rule.split[0].gsub(':', '').gsub('\\','/')
- base = File.basename(target_file, File.extname(target_file))
- make_rule_dependencies = make_rule.gsub(/.*\b#{Regexp.escape(base)}\S*/, '').gsub(/\\$/, '')
-
- # Extract the headers dependencies from the make rule
- hdr_ext = @configurator.extension_header
- headers_dependencies = make_rule_dependencies.split.find_all {|path| path.end_with?(hdr_ext) }.uniq
- headers_dependencies.map! {|hdr| hdr.gsub('\\','/') }
- full_path_headers_dependencies = extract_full_path_dependencies(headers_dependencies)
-
- # Extract the sources dependencies from the make rule
- src_ext = @configurator.extension_source
- sources_dependencies = make_rule_dependencies.split.find_all {|path| path.end_with?(src_ext) }.uniq
- sources_dependencies.map! {|src| src.gsub('\\','/') }
- full_path_sources_dependencies = extract_full_path_dependencies(sources_dependencies)
-
- list = full_path_headers_dependencies + full_path_sources_dependencies
-
- mock_prefix = @configurator.project_config_hash[:cmock_mock_prefix]
- # Creating list of mocks
- mocks += full_path_headers_dependencies.find_all do |header|
- File.basename(header) =~ /^#{mock_prefix}.*$/
- end.compact
-
- # ignore real file when both mock and real file exist
- mocks.each do |mock|
- list.each do |filename|
- if File.basename(filename) == File.basename(mock).sub(mock_prefix, '')
- ignore_list << filename
- end
- end
- end.compact
-
- # Filtering list of final includes to only include mocks and anything that is NOT in the ignore_list
- list = list.select do |item|
- mocks.include? item or !(ignore_list.any? { |ignore_item| !item.match(/^(.*\/)?#{Regexp.escape(ignore_item)}$/).nil? })
- end
-
- to_process = []
-
- if @configurator.project_config_hash[:project_auto_link_deep_dependencies]
- # Creating list of headers that should be recursively pre-processed
- # Skipping mocks and vendor headers
- headers_to_deep_link = full_path_headers_dependencies.select do |hdr|
- !(mocks.include? hdr) and (hdr.match(/^(.*\/)(#{VENDORS_FILES.join('|')}) + #{Regexp.escape(hdr_ext)}$/).nil?)
- end
- headers_to_deep_link.map! {|hdr| File.expand_path(hdr) }
- headers_to_deep_link.compact!
-
- headers_to_deep_link.each do |hdr|
- if (ignore_list.none? {|ignore_header| hdr.match(/^(.*\/)?#{Regexp.escape(ignore_header)}$/)} and
- include_paths.none? {|include_path| hdr =~ /^#{include_path}\.*/})
- if File.exist?(hdr)
- to_process << hdr
- src = @file_finder.find_compilation_input_file(hdr, :ignore)
- to_process << src if src
- end
- end
- end
- end
-
- return list, to_process, mocks
-
- end
-
- def write_shallow_includes_list(filepath, list)
- @yaml_wrapper.dump(filepath, list)
- end
-
- private
-
- def extract_full_path_dependencies(dependencies)
- # Separate the real files form the annotated ones and remove the '@@@@'
- annotated_files, real_files = dependencies.partition {|file| file =~ /^@@@@/}
- annotated_files.map! {|file| file.gsub('@@@@','') }
- # Matching annotated_files values against real_files to ensure that
- # annotated_files contain full path entries (as returned by make rule)
- annotated_files.map! {|file| real_files.find {|real| !real.match(/^(.*\/)?#{Regexp.escape(file)}$/).nil?}}
- annotated_files = annotated_files.compact
-
- # Find which of our annotated files are "real" dependencies. This is
- # intended to weed out dependencies that have been removed due to build
- # options defined in the project yaml and/or in the files themselves.
- return annotated_files.find_all do |annotated_file|
- # find the index of the "real" file that matches the annotated one.
- idx = real_files.find_index do |real_file|
- real_file =~ /^(.*\/)?#{Regexp.escape(annotated_file)}$/
- end
- # If we found a real file, delete it from the array and return it,
- # otherwise return nil. Since nil is falsy this has the effect of making
- # find_all return only the annotated files for which a real file was
- # found/deleted
- idx ? real_files.delete_at(idx) : nil
- end.compact
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/project_config_manager.rb b/test/unit-test/vendor/ceedling/lib/ceedling/project_config_manager.rb
deleted file mode 100644
index b1d4551276..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/project_config_manager.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require 'ceedling/constants'
-
-
-class ProjectConfigManager
-
- attr_reader :options_files, :release_config_changed, :test_config_changed, :test_defines_changed
- attr_accessor :config_hash
-
- constructor :cacheinator, :configurator, :yaml_wrapper, :file_wrapper
-
-
- def setup
- @options_files = []
- @release_config_changed = false
- @test_config_changed = false
- @test_defines_changed = false
- end
-
-
- def merge_options(config_hash, option_filepath)
- @options_files << File.basename( option_filepath )
- config_hash.deep_merge!( @yaml_wrapper.load( option_filepath ) )
- end
-
-
- def filter_internal_sources(sources)
- filtered_sources = sources.clone
- filtered_sources.delete_if { |item| item =~ /#{CMOCK_MOCK_PREFIX}.+#{Regexp.escape(EXTENSION_SOURCE)}$/ }
- filtered_sources.delete_if { |item| item =~ /#{VENDORS_FILES.map{|source| '\b' + Regexp.escape(source.ext(EXTENSION_SOURCE)) + '\b'}.join('|')}$/ }
- return filtered_sources
- end
-
- def process_release_config_change
- # has project configuration changed since last release build
- @release_config_changed = @cacheinator.diff_cached_release_config?( @config_hash )
- end
-
-
- def process_test_config_change
- # has project configuration changed since last test build
- @test_config_changed = @cacheinator.diff_cached_test_config?( @config_hash )
- end
-
- def process_test_defines_change(files)
- # has definitions changed since last test build
- @test_defines_changed = @cacheinator.diff_cached_test_defines?( files )
- if @test_defines_changed
- # update timestamp for rake task prerequisites
- @file_wrapper.touch( @configurator.project_test_force_rebuild_filepath, :mtime => Time.now + 10 )
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/project_file_loader.rb b/test/unit-test/vendor/ceedling/lib/ceedling/project_file_loader.rb
deleted file mode 100644
index bf5dcd41d4..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/project_file_loader.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-require 'ceedling/constants'
-
-
-class ProjectFileLoader
-
- attr_reader :main_file, :user_file
-
- constructor :yaml_wrapper, :stream_wrapper, :system_wrapper, :file_wrapper
-
- def setup
- @main_file = nil
- @mixin_files = []
- @user_file = nil
-
- @main_project_filepath = ''
- @mixin_project_filepaths = []
- @user_project_filepath = ''
- end
-
-
- def find_project_files
- # first go hunting for optional user project file by looking for environment variable and then default location on disk
- user_filepath = @system_wrapper.env_get('CEEDLING_USER_PROJECT_FILE')
-
- if ( not user_filepath.nil? and @file_wrapper.exist?(user_filepath) )
- @user_project_filepath = user_filepath
- elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_USER_PROJECT_FILE))
- @user_project_filepath = DEFAULT_CEEDLING_USER_PROJECT_FILE
- end
-
- # next check for mixin project files by looking for environment variable
- mixin_filepaths = @system_wrapper.env_get('CEEDLING_MIXIN_PROJECT_FILES')
- if ( not mixin_filepaths.nil? )
- mixin_filepaths.split(File::PATH_SEPARATOR).each do |filepath|
- if ( @file_wrapper.exist?(filepath) )
- @mixin_project_filepaths.push(filepath)
- end
- end
- end
-
- # next check for main project file by looking for environment variable and then default location on disk;
- # blow up if we don't find this guy -- like, he's so totally important
- main_filepath = @system_wrapper.env_get('CEEDLING_MAIN_PROJECT_FILE')
-
- if ( not main_filepath.nil? and @file_wrapper.exist?(main_filepath) )
- @main_project_filepath = main_filepath
- elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_MAIN_PROJECT_FILE))
- @main_project_filepath = DEFAULT_CEEDLING_MAIN_PROJECT_FILE
- else
- # no verbosity checking since this is lowest level reporting anyhow &
- # verbosity checking depends on configurator which in turns needs this class (circular dependency)
- @stream_wrapper.stderr_puts('Found no Ceedling project file (*.yml)')
- raise
- end
-
- @main_file = File.basename( @main_project_filepath )
- @mixin_project_filepaths.each do |filepath|
- @mixin_files.push(File.basename( filepath ))
- end
- @user_file = File.basename( @user_project_filepath ) if ( not @user_project_filepath.empty? )
- end
-
- def yaml_merger(y1, y2)
- o1 = y1
- y2.each_pair do |k,v|
- if o1[k].nil?
- o1[k] = v
- else
- if (o1[k].instance_of? Hash)
- o1[k] = yaml_merger(o1[k], v)
- elsif (o1[k].instance_of? Array)
- o1[k] += v
- else
- o1[k] = v
- end
- end
- end
- return o1
- end
-
- def load_project_config
- config_hash = @yaml_wrapper.load(@main_project_filepath)
-
- # if there are mixin project files, then use them
- @mixin_project_filepaths.each do |filepath|
- mixin = @yaml_wrapper.load(filepath)
- config_hash = yaml_merger( config_hash, mixin )
- end
-
- # if there's a user project file, then use it
- if ( not @user_project_filepath.empty? )
- user_hash = @yaml_wrapper.load(@user_project_filepath)
- config_hash = yaml_merger( config_hash, user_hash )
- end
-
- return config_hash
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rake_utils.rb b/test/unit-test/vendor/ceedling/lib/ceedling/rake_utils.rb
deleted file mode 100644
index b137497382..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rake_utils.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-
-class RakeUtils
-
- constructor :rake_wrapper
-
- def task_invoked?(task_regex)
- task_invoked = false
- @rake_wrapper.task_list.each do |task|
- if ((task.already_invoked) and (task.to_s =~ task_regex))
- task_invoked = true
- break
- end
- end
- return task_invoked
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rake_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/rake_wrapper.rb
deleted file mode 100644
index 15e479611f..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rake_wrapper.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'rubygems'
-require 'rake'
-require 'ceedling/makefile' # our replacement for rake's make-style dependency loader
-
-include Rake::DSL if defined?(Rake::DSL)
-
-class Rake::Task
- attr_reader :already_invoked
-end
-
-class RakeWrapper
-
- def initialize
- @makefile_loader = Rake::MakefileLoader.new # use our custom replacement noted above
- end
-
- def [](task)
- return Rake::Task[task]
- end
-
- def task_list
- return Rake::Task.tasks
- end
-
- def create_file_task(file_task, dependencies)
- file(file_task => dependencies)
- end
-
- def load_dependencies(dependencies_path)
- @makefile_loader.load(dependencies_path)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rakefile.rb b/test/unit-test/vendor/ceedling/lib/ceedling/rakefile.rb
deleted file mode 100644
index 1bcb824918..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rakefile.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require 'fileutils'
-
-# get directory containing this here file, back up one directory, and expand to full path
-CEEDLING_ROOT = File.expand_path(File.dirname(__FILE__) + '/../..')
-CEEDLING_LIB = File.join(CEEDLING_ROOT, 'lib')
-CEEDLING_VENDOR = File.join(CEEDLING_ROOT, 'vendor')
-CEEDLING_RELEASE = File.join(CEEDLING_ROOT, 'release')
-
-$LOAD_PATH.unshift( CEEDLING_LIB )
-$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'unity/auto') )
-$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'diy/lib') )
-$LOAD_PATH.unshift( File.join(CEEDLING_VENDOR, 'cmock/lib') )
-
-require 'rake'
-
-#Let's make sure we remember the task descriptions in case we need them
-Rake::TaskManager.record_task_metadata = true
-
-require 'diy'
-require 'constructor'
-
-require 'ceedling/constants'
-require 'ceedling/target_loader'
-
-
-# construct all our objects
-# ensure load path contains all libraries needed first
-lib_ceedling_load_path_temp = File.join(CEEDLING_LIB, 'ceedling')
-$LOAD_PATH.unshift( lib_ceedling_load_path_temp )
-@ceedling = DIY::Context.from_yaml( File.read( File.join(lib_ceedling_load_path_temp, 'objects.yml') ) )
-@ceedling.build_everything
-# now that all objects are built, delete 'lib/ceedling' from load path
-$LOAD_PATH.delete(lib_ceedling_load_path_temp)
-# one-stop shopping for all our setup and such after construction
-@ceedling[:setupinator].ceedling = @ceedling
-
-project_config =
- begin
- cfg = @ceedling[:setupinator].load_project_files
- TargetLoader.inspect(cfg, ENV['TARGET'])
- rescue TargetLoader::NoTargets
- cfg
- rescue TargetLoader::RequestReload
- @ceedling[:setupinator].load_project_files
- end
-
-@ceedling[:setupinator].do_setup( project_config )
-
-
-# tell all our plugins we're about to do something
-@ceedling[:plugin_manager].pre_build
-
-# load rakefile component files (*.rake)
-PROJECT_RAKEFILE_COMPONENT_FILES.each { |component| load(component) }
-
-# tell rake to shut up by default (overridden in verbosity / debug tasks as appropriate)
-verbose(false)
-
-
-# end block always executed following rake run
-END {
- $stdout.flush unless $stdout.nil?
- $stderr.flush unless $stderr.nil?
-
- # cache our input configurations to use in comparison upon next execution
- @ceedling[:cacheinator].cache_test_config( @ceedling[:setupinator].config_hash ) if (@ceedling[:task_invoker].test_invoked?)
- @ceedling[:cacheinator].cache_release_config( @ceedling[:setupinator].config_hash ) if (@ceedling[:task_invoker].release_invoked?)
-
- # delete all temp files unless we're in debug mode
- if (not @ceedling[:configurator].project_debug)
- @ceedling[:file_wrapper].rm_f( @ceedling[:file_wrapper].directory_listing( File.join(@ceedling[:configurator].project_temp_path, '*') ))
- end
-
- # only perform these final steps if we got here without runtime exceptions or errors
- if (@ceedling[:system_wrapper].ruby_success)
-
- # tell all our plugins the build is done and process results
- @ceedling[:plugin_manager].post_build
- @ceedling[:plugin_manager].print_plugin_failures
- exit(1) if (@ceedling[:plugin_manager].plugins_failed? && !@ceedling[:setupinator].config_hash[:graceful_fail])
- else
- puts "ERROR: Ceedling Failed"
- @ceedling[:plugin_manager].post_error
- end
-}
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker.rb b/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker.rb
deleted file mode 100644
index 19bbca7275..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker.rb
+++ /dev/null
@@ -1,98 +0,0 @@
-require 'ceedling/constants'
-
-
-class ReleaseInvoker
-
- constructor :configurator, :release_invoker_helper, :build_invoker_utils, :dependinator, :task_invoker, :file_path_utils, :file_wrapper
-
-
- def setup_and_invoke_c_objects( c_files )
- objects = @file_path_utils.form_release_build_c_objects_filelist( c_files )
-
- begin
- @release_invoker_helper.process_deep_dependencies( @file_path_utils.form_release_dependencies_filelist( c_files ) )
-
- @dependinator.enhance_release_file_dependencies( objects )
- @task_invoker.invoke_release_objects( objects )
- rescue => e
- @build_invoker_utils.process_exception( e, RELEASE_SYM, false )
- end
-
- return objects
- end
-
-
- def setup_and_invoke_asm_objects( asm_files )
- objects = @file_path_utils.form_release_build_asm_objects_filelist( asm_files )
-
- begin
- @dependinator.enhance_release_file_dependencies( objects )
- @task_invoker.invoke_release_objects( objects )
- rescue => e
- @build_invoker_utils.process_exception( e, RELEASE_SYM, false )
- end
-
- return objects
- end
-
-
- def refresh_c_deep_dependencies
- return if (not @configurator.project_use_deep_dependencies)
-
- @file_wrapper.rm_f(
- @file_wrapper.directory_listing(
- File.join( @configurator.project_release_dependencies_path, '*' + @configurator.extension_dependencies ) ) )
-
- @release_invoker_helper.process_deep_dependencies(
- @file_path_utils.form_release_dependencies_filelist(
- @configurator.collection_all_source ) )
- end
-
-
- def artifactinate( *files )
- files.flatten.each do |file|
- @file_wrapper.cp( file, @configurator.project_release_artifacts_path ) if @file_wrapper.exist?( file )
- end
- end
-
- def convert_libraries_to_arguments(libraries)
- args = ((libraries || []) + ((defined? LIBRARIES_SYSTEM) ? LIBRARIES_SYSTEM : [])).flatten
- if (defined? LIBRARIES_FLAG)
- args.map! {|v| LIBRARIES_FLAG.gsub(/\$\{1\}/, v) }
- end
- return args
- end
-
- def get_library_paths_to_arguments()
- paths = (defined? PATHS_LIBRARIES) ? (PATHS_LIBRARIES || []).clone : []
- if (defined? LIBRARIES_PATH_FLAG)
- paths.map! {|v| LIBRARIES_PATH_FLAG.gsub(/\$\{1\}/, v) }
- end
- return paths
- end
-
- def sort_objects_and_libraries(both)
- extension = if ((defined? EXTENSION_SUBPROJECTS) && (defined? EXTENSION_LIBRARIES))
- extension_libraries = if (EXTENSION_LIBRARIES.class == Array)
- EXTENSION_LIBRARIES.join(")|(?:\\")
- else
- EXTENSION_LIBRARIES
- end
- "(?:\\#{EXTENSION_SUBPROJECTS})|(?:\\#{extension_libraries})"
- elsif (defined? EXTENSION_SUBPROJECTS)
- "\\#{EXTENSION_SUBPROJECTS}"
- elsif (defined? EXTENSION_LIBRARIES)
- if (EXTENSION_LIBRARIES.class == Array)
- "(?:\\#{EXTENSION_LIBRARIES.join(")|(?:\\")})"
- else
- "\\#{EXTENSION_LIBRARIES}"
- end
- else
- "\\.LIBRARY"
- end
- sorted_objects = both.group_by {|v| v.match(/.+#{extension}$/) ? :libraries : :objects }
- libraries = sorted_objects[:libraries] || []
- objects = sorted_objects[:objects] || []
- return objects, libraries
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker_helper.rb
deleted file mode 100644
index f83a2a53a3..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/release_invoker_helper.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-class ReleaseInvokerHelper
-
- constructor :configurator, :dependinator, :task_invoker
-
-
- def process_deep_dependencies(dependencies_list)
- return if (not @configurator.project_use_deep_dependencies)
-
- if @configurator.project_generate_deep_dependencies
- @dependinator.enhance_release_file_dependencies( dependencies_list )
- @task_invoker.invoke_release_dependencies_files( dependencies_list )
- end
-
- @dependinator.load_release_object_deep_dependencies( dependencies_list )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/reportinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/reportinator.rb
deleted file mode 100644
index fcb5286b9a..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/reportinator.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-##
-# Pretifies reports
-class Reportinator
-
- ##
- # Generates a banner for a message based on the length of the message or a
- # given width.
- # ==== Attributes
- #
- # * _message_: The message to put.
- # * _width_: The width of the message. If nil the size of the banner is
- # determined by the length of the message.
- #
- # ==== Examples
- #
- # rp = Reportinator.new
- # rp.generate_banner("Hello world!") => "------------\nHello world!\n------------\n"
- # rp.generate_banner("Hello world!", 3) => "---\nHello world!\n---\n"
- #
- #
- def generate_banner(message, width=nil)
- dash_count = ((width.nil?) ? message.strip.length : width)
- return "#{'-' * dash_count}\n#{message}\n#{'-' * dash_count}\n"
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_cmock.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_cmock.rake
deleted file mode 100644
index 51485d3a86..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_cmock.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-rule(/#{CMOCK_MOCK_PREFIX}[^\/\\]+#{'\\'+EXTENSION_SOURCE}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_header_input_for_mock_file(task_name)
- end
- ]) do |mock|
- @ceedling[:generator].generate_mock(TEST_SYM, mock.source)
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_preprocess.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_preprocess.rake
deleted file mode 100644
index d599421c0e..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_preprocess.rake
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-# invocations against this rule should only happen when enhanced dependencies are enabled;
-# otherwise, dependency tracking will be too shallow and preprocessed files could intermittently
-# fail to be updated when they actually need to be.
-rule(/#{PROJECT_TEST_PREPROCESS_FILES_PATH}\/.+/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_test_or_source_or_header_file(task_name)
- end
- ]) do |file|
- if (not @ceedling[:configurator].project_use_deep_dependencies)
- raise 'ERROR: Ceedling preprocessing rule invoked though necessary auxiliary dependency support not enabled.'
- end
- @ceedling[:generator].generate_preprocessed_file(TEST_SYM, file.source)
-end
-
-
-# invocations against this rule can always happen as there are no deeper dependencies to consider
-rule(/#{PROJECT_TEST_PREPROCESS_INCLUDES_PATH}\/.+/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_test_or_source_or_header_file(task_name)
- end
- ]) do |file|
- @ceedling[:generator].generate_shallow_includes_list(TEST_SYM, file.source)
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_release.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_release.rake
deleted file mode 100644
index 47eec858f5..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_release.rake
+++ /dev/null
@@ -1,98 +0,0 @@
-
-RELEASE_COMPILE_TASK_ROOT = RELEASE_TASK_ROOT + 'compile:' unless defined?(RELEASE_COMPILE_TASK_ROOT)
-RELEASE_ASSEMBLE_TASK_ROOT = RELEASE_TASK_ROOT + 'assemble:' unless defined?(RELEASE_ASSEMBLE_TASK_ROOT)
-
-# If GCC and Releasing a Library, Update Tools to Automatically Have Necessary Tags
-if (TOOLS_RELEASE_COMPILER[:executable] == DEFAULT_RELEASE_COMPILER_TOOL[:executable])
- if (File.extname(PROJECT_RELEASE_BUILD_TARGET) == '.so')
- TOOLS_RELEASE_COMPILER[:arguments] << "-fPIC" unless TOOLS_RELEASE_COMPILER[:arguments].include?("-fPIC")
- TOOLS_RELEASE_LINKER[:arguments] << "-shared" unless TOOLS_RELEASE_LINKER[:arguments].include?("-shared")
- elsif (File.extname(PROJECT_RELEASE_BUILD_TARGET) == '.a')
- TOOLS_RELEASE_COMPILER[:arguments] << "-fPIC" unless TOOLS_RELEASE_COMPILER[:arguments].include?("-fPIC")
- TOOLS_RELEASE_LINKER[:executable] = 'ar'
- TOOLS_RELEASE_LINKER[:arguments] = ['rcs', '${2}', '${1}'].compact
- end
-end
-
-if (RELEASE_BUILD_USE_ASSEMBLY)
-rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_ASM_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_assembly_file(task_name)
- end
- ]) do |object|
- @ceedling[:generator].generate_object_file(
- TOOLS_RELEASE_ASSEMBLER,
- OPERATION_ASSEMBLE_SYM,
- RELEASE_SYM,
- object.source,
- object.name )
-end
-end
-
-
-rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_C_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name, :error, true)
- end
- ]) do |object|
- @ceedling[:generator].generate_object_file(
- TOOLS_RELEASE_COMPILER,
- OPERATION_COMPILE_SYM,
- RELEASE_SYM,
- object.source,
- object.name,
- @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ),
- @ceedling[:file_path_utils].form_release_dependencies_filepath( object.name ) )
-end
-
-
-rule(/#{PROJECT_RELEASE_BUILD_TARGET}/) do |bin_file|
- objects, libraries = @ceedling[:release_invoker].sort_objects_and_libraries(bin_file.prerequisites)
- tool = TOOLS_RELEASE_LINKER.clone
- lib_args = @ceedling[:release_invoker].convert_libraries_to_arguments(libraries)
- lib_paths = @ceedling[:release_invoker].get_library_paths_to_arguments()
- map_file = @ceedling[:configurator].project_release_build_map
- @ceedling[:generator].generate_executable_file(
- tool,
- RELEASE_SYM,
- objects,
- bin_file.name,
- map_file,
- lib_args,
- lib_paths )
- @ceedling[:release_invoker].artifactinate( bin_file.name, map_file, @ceedling[:configurator].release_build_artifacts )
-end
-
-
-namespace RELEASE_SYM do
- # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks)
-
- namespace :compile do
- rule(/^#{RELEASE_COMPILE_TASK_ROOT}\S+#{'\\'+EXTENSION_SOURCE}$/ => [ # compile task names by regex
- proc do |task_name|
- source = task_name.sub(/#{RELEASE_COMPILE_TASK_ROOT}/, '')
- @ceedling[:file_finder].find_source_file(source, :error)
- end
- ]) do |compile|
- @ceedling[:rake_wrapper][:directories].invoke
- @ceedling[:project_config_manager].process_release_config_change
- @ceedling[:release_invoker].setup_and_invoke_c_objects( [compile.source] )
- end
- end
-
- if (RELEASE_BUILD_USE_ASSEMBLY)
- namespace :assemble do
- rule(/^#{RELEASE_ASSEMBLE_TASK_ROOT}\S+#{'\\'+EXTENSION_ASSEMBLY}$/ => [ # assemble task names by regex
- proc do |task_name|
- source = task_name.sub(/#{RELEASE_ASSEMBLE_TASK_ROOT}/, '')
- @ceedling[:file_finder].find_assembly_file(source)
- end
- ]) do |assemble|
- @ceedling[:rake_wrapper][:directories].invoke
- @ceedling[:project_config_manager].process_release_config_change
- @ceedling[:release_invoker].setup_and_invoke_asm_objects( [assemble.source] )
- end
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_release_deep_dependencies.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_release_deep_dependencies.rake
deleted file mode 100644
index bf944de250..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_release_deep_dependencies.rake
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-rule(/#{PROJECT_RELEASE_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name, :error, true)
- end
- ]) do |dep|
- @ceedling[:generator].generate_dependencies_file(
- TOOLS_RELEASE_DEPENDENCIES_GENERATOR,
- RELEASE_SYM,
- dep.source,
- @ceedling[:file_path_utils].form_release_build_c_object_filepath(dep.source),
- dep.name)
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests.rake
deleted file mode 100644
index 3ab80f3a95..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests.rake
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-rule(/#{PROJECT_TEST_FILE_PREFIX}#{'.+'+TEST_RUNNER_FILE_SUFFIX}#{'\\'+EXTENSION_SOURCE}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_test_input_for_runner_file(task_name)
- end
- ]) do |runner|
- @ceedling[:generator].generate_test_runner(TEST_SYM, runner.source, runner.name)
-end
-
-rule(/#{PROJECT_TEST_BUILD_OUTPUT_C_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name)
- end
- ]) do |object|
- if (File.basename(object.source) =~ /#{EXTENSION_SOURCE}$/)
- @ceedling[:generator].generate_object_file(
- TOOLS_TEST_COMPILER,
- OPERATION_COMPILE_SYM,
- TEST_SYM,
- object.source,
- object.name,
- @ceedling[:file_path_utils].form_test_build_list_filepath( object.name ),
- @ceedling[:file_path_utils].form_test_dependencies_filepath( object.name ))
- elsif (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY)
- @ceedling[:generator].generate_object_file(
- TOOLS_TEST_ASSEMBLER,
- OPERATION_ASSEMBLE_SYM,
- TEST_SYM,
- object.source,
- object.name )
- end
-end
-
-
-rule(/#{PROJECT_TEST_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_EXECUTABLE}$/) do |bin_file|
- lib_args = @ceedling[:test_invoker].convert_libraries_to_arguments()
- lib_paths = @ceedling[:test_invoker].get_library_paths_to_arguments()
- @ceedling[:generator].generate_executable_file(
- TOOLS_TEST_LINKER,
- TEST_SYM,
- bin_file.prerequisites,
- bin_file.name,
- @ceedling[:file_path_utils].form_test_build_map_filepath( bin_file.name ),
- lib_args,
- lib_paths )
-end
-
-
-rule(/#{PROJECT_TEST_RESULTS_PATH}\/#{'.+\\'+EXTENSION_TESTPASS}$/ => [
- proc do |task_name|
- @ceedling[:file_path_utils].form_test_executable_filepath(task_name)
- end
- ]) do |test_result|
- @ceedling[:generator].generate_test_results(TOOLS_TEST_FIXTURE, TEST_SYM, test_result.source, test_result.name)
-end
-
-
-namespace TEST_SYM do
- # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks)
-
- rule(/^#{TEST_TASK_ROOT}\S+$/ => [ # test task names by regex
- proc do |task_name|
- test = task_name.sub(/#{TEST_TASK_ROOT}/, '')
- test = "#{PROJECT_TEST_FILE_PREFIX}#{test}" if not (test.start_with?(PROJECT_TEST_FILE_PREFIX))
- @ceedling[:file_finder].find_test_from_file_path(test)
- end
- ]) do |test|
- @ceedling[:rake_wrapper][:test_deps].invoke
- @ceedling[:test_invoker].setup_and_invoke([test.source])
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests_deep_dependencies.rake b/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests_deep_dependencies.rake
deleted file mode 100644
index a8dfd296ec..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/rules_tests_deep_dependencies.rake
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-rule(/#{PROJECT_TEST_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name)
- end
- ]) do |dep|
- @ceedling[:generator].generate_dependencies_file(
- TOOLS_TEST_DEPENDENCIES_GENERATOR,
- TEST_SYM,
- dep.source,
- @ceedling[:file_path_utils].form_test_build_c_object_filepath(dep.source),
- dep.name)
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/setupinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/setupinator.rb
deleted file mode 100644
index cf9922f07a..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/setupinator.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-
-class Setupinator
-
- attr_reader :config_hash
- attr_writer :ceedling
-
- def setup
- @ceedling = {}
- @config_hash = {}
- end
-
- def load_project_files
- @ceedling[:project_file_loader].find_project_files
- return @ceedling[:project_file_loader].load_project_config
- end
-
- def do_setup(config_hash)
- @config_hash = config_hash
-
- # load up all the constants and accessors our rake files, objects, & external scripts will need;
- # note: configurator modifies the cmock section of the hash with a couple defaults to tie
- # project together - the modified hash is used to build cmock object
- @ceedling[:configurator].populate_defaults( config_hash )
- @ceedling[:configurator].populate_unity_defaults( config_hash )
- @ceedling[:configurator].populate_cmock_defaults( config_hash )
- @ceedling[:configurator].find_and_merge_plugins( config_hash )
- @ceedling[:configurator].merge_imports( config_hash )
- @ceedling[:configurator].eval_environment_variables( config_hash )
- @ceedling[:configurator].tools_setup( config_hash )
- @ceedling[:configurator].eval_paths( config_hash )
- @ceedling[:configurator].standardize_paths( config_hash )
- @ceedling[:configurator].validate( config_hash )
- @ceedling[:configurator].build( config_hash, :environment )
-
- @ceedling[:configurator].insert_rake_plugins( @ceedling[:configurator].rake_plugins )
- @ceedling[:configurator].tools_supplement_arguments( config_hash )
-
- # merge in any environment variables plugins specify, after the main build
- @ceedling[:plugin_manager].load_plugin_scripts( @ceedling[:configurator].script_plugins, @ceedling ) do |env|
- @ceedling[:configurator].eval_environment_variables( env )
- @ceedling[:configurator].build_supplement( config_hash, env )
- end
-
- @ceedling[:plugin_reportinator].set_system_objects( @ceedling )
- @ceedling[:file_finder].prepare_search_sources
- @ceedling[:loginator].setup_log_filepath
- @ceedling[:project_config_manager].config_hash = config_hash
- end
-
- def reset_defaults(config_hash)
- @ceedling[:configurator].reset_defaults( config_hash )
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/stream_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/stream_wrapper.rb
deleted file mode 100644
index 2cee58d3ef..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/stream_wrapper.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-
-class StreamWrapper
-
- def stdout_override(&fnc)
- @stdout_overide_fnc = fnc
- end
-
- def stdout_puts(string)
- if @stdout_overide_fnc
- @stdout_overide_fnc.call(string)
- else
- $stdout.puts(string)
- end
- end
-
- def stdout_flush
- $stdout.flush
- end
-
- def stderr_puts(string)
- $stderr.puts(string)
- end
-
- def stderr_flush
- $stderr.flush
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/streaminator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/streaminator.rb
deleted file mode 100644
index e30440c7db..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/streaminator.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'ceedling/constants'
-
-class Streaminator
-
- constructor :streaminator_helper, :verbosinator, :loginator, :stream_wrapper
-
- # for those objects for whom the configurator has already been instantiated,
- # Streaminator is a convenience object for handling verbosity and writing to the std streams
-
- def stdout_puts(string, verbosity=Verbosity::NORMAL)
- if (@verbosinator.should_output?(verbosity))
- @stream_wrapper.stdout_puts(string)
- @stream_wrapper.stdout_flush
- end
-
- # write to log as though Verbosity::OBNOXIOUS
- @loginator.log( string, @streaminator_helper.extract_name($stdout) )
- end
-
- def stderr_puts(string, verbosity=Verbosity::NORMAL)
- if (@verbosinator.should_output?(verbosity))
- @stream_wrapper.stderr_puts(string)
- @stream_wrapper.stderr_flush
- end
-
- # write to log as though Verbosity::OBNOXIOUS
- @loginator.log( string, @streaminator_helper.extract_name($stderr) )
- end
-
- def stream_puts(stream, string, verbosity=Verbosity::NORMAL)
- if (@verbosinator.should_output?(verbosity))
- stream.puts(string)
- stream.flush
- end
-
- # write to log as though Verbosity::OBNOXIOUS
- @loginator.log( string, @streaminator_helper.extract_name(stream) )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/streaminator_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/streaminator_helper.rb
deleted file mode 100644
index cbaef7c929..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/streaminator_helper.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-
-class StreaminatorHelper
-
- def extract_name(stream)
- name = case (stream.fileno)
- when 0 then '#'
- when 1 then '#'
- when 2 then '#'
- else stream.inspect
- end
-
- return name
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/system_utils.rb b/test/unit-test/vendor/ceedling/lib/ceedling/system_utils.rb
deleted file mode 100644
index 7d232a7fb1..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/system_utils.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-
-class Object
- def deep_clone
- Marshal::load(Marshal.dump(self))
- end
-end
-
-
-##
-# Class containing system utility functions.
-class SystemUtils
-
- constructor :system_wrapper
-
- ##
- # Sets up the class.
- def setup
- @tcsh_shell = nil
- end
-
- ##
- # Checks the system shell to see if it a tcsh shell.
- def tcsh_shell?
- # once run a single time, return state determined at that execution
- return @tcsh_shell if not @tcsh_shell.nil?
-
- result = @system_wrapper.shell_backticks('echo $version')
-
- if ((result[:exit_code] == 0) and (result[:output].strip =~ /^tcsh/))
- @tcsh_shell = true
- else
- @tcsh_shell = false
- end
-
- return @tcsh_shell
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/system_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/system_wrapper.rb
deleted file mode 100644
index 2b0f1edda0..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/system_wrapper.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-require 'rbconfig'
-
-class SystemWrapper
-
- # static method for use in defaults
- def self.windows?
- return ((RbConfig::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false) if defined?(RbConfig)
- return ((Config::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false)
- end
-
- # class method so as to be mockable for tests
- def windows?
- return SystemWrapper.windows?
- end
-
- def module_eval(string)
- return Object.module_eval("\"" + string + "\"")
- end
-
- def eval(string)
- return eval(string)
- end
-
- def search_paths
- return ENV['PATH'].split(File::PATH_SEPARATOR)
- end
-
- def cmdline_args
- return ARGV
- end
-
- def env_set(name, value)
- ENV[name] = value
- end
-
- def env_get(name)
- return ENV[name]
- end
-
- def time_now
- return Time.now.asctime
- end
-
- def shell_backticks(command, boom = true)
- retval = `#{command}`.freeze
- $exit_code = ($?.exitstatus).freeze if boom
- return {
- :output => retval.freeze,
- :exit_code => ($?.exitstatus).freeze
- }
- end
-
- def shell_system(command, boom = true)
- system( command )
- $exit_code = ($?.exitstatus).freeze if boom
- return {
- :output => "".freeze,
- :exit_code => ($?.exitstatus).freeze
- }
- end
-
- def add_load_path(path)
- $LOAD_PATH.unshift(path)
- end
-
- def require_file(path)
- require(path)
- end
-
- def ruby_success
- # We are successful if we've never had an exit code that went boom (either because it's empty or it was 0)
- return ($exit_code.nil? || ($exit_code == 0)) && ($!.nil? || $!.is_a?(SystemExit) && $!.success?)
- end
-
- def constants_include?(item)
- # forcing to strings provides consistency across Ruby versions
- return Object.constants.map{|constant| constant.to_s}.include?(item.to_s)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/target_loader.rb b/test/unit-test/vendor/ceedling/lib/ceedling/target_loader.rb
deleted file mode 100644
index 7fbc095913..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/target_loader.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module TargetLoader
- class NoTargets < Exception; end
- class NoDirectory < Exception; end
- class NoDefault < Exception; end
- class NoSuchTarget < Exception; end
-
- class RequestReload < Exception; end
-
- def self.inspect(config, target_name=nil)
- unless config[:targets]
- raise NoTargets
- end
-
- targets = config[:targets]
- unless targets[:targets_directory]
- raise NoDirectory.new("No targets directory specified.")
- end
- unless targets[:default_target]
- raise NoDefault.new("No default target specified.")
- end
-
- target_path = lambda {|name| File.join(targets[:targets_directory], name + ".yml")}
-
- target = if target_name
- target_path.call(target_name)
- else
- target_path.call(targets[:default_target])
- end
-
- unless File.exists? target
- raise NoSuchTarget.new("No such target: #{target}")
- end
-
- ENV['CEEDLING_MAIN_PROJECT_FILE'] = target
-
- raise RequestReload
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/task_invoker.rb b/test/unit-test/vendor/ceedling/lib/ceedling/task_invoker.rb
deleted file mode 100644
index 35f92ae03a..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/task_invoker.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-require 'ceedling/par_map'
-
-class TaskInvoker
-
- attr_accessor :first_run
-
- constructor :dependinator, :rake_utils, :rake_wrapper, :project_config_manager
-
- def setup
- @test_regexs = [/^#{TEST_ROOT_NAME}:/]
- @release_regexs = [/^#{RELEASE_ROOT_NAME}(:|$)/]
- @first_run = true
- end
-
- def add_test_task_regex(regex)
- @test_regexs << regex
- end
-
- def add_release_task_regex(regex)
- @release_regexs << regex
- end
-
- def test_invoked?
- invoked = false
-
- @test_regexs.each do |regex|
- invoked = true if (@rake_utils.task_invoked?(regex))
- break if invoked
- end
-
- return invoked
- end
-
- def release_invoked?
- invoked = false
-
- @release_regexs.each do |regex|
- invoked = true if (@rake_utils.task_invoked?(regex))
- break if invoked
- end
-
- return invoked
- end
-
- def invoked?(regex)
- return @rake_utils.task_invoked?(regex)
- end
-
- def reset_rake_task_for_changed_defines(file)
- if !(file =~ /#{VENDORS_FILES.map{|ignore| '\b' + ignore.ext(File.extname(file)) + '\b'}.join('|')}$/)
- @rake_wrapper[file].clear_actions if @first_run == false && @project_config_manager.test_defines_changed
- @rake_wrapper[file].reenable if @first_run == false && @project_config_manager.test_defines_changed
- end
- end
-
- def invoke_test_mocks(mocks)
- @dependinator.enhance_mock_dependencies( mocks )
- mocks.each { |mock|
- reset_rake_task_for_changed_defines( mock )
- @rake_wrapper[mock].invoke
- }
- end
-
- def invoke_test_runner(runner)
- @dependinator.enhance_runner_dependencies( runner )
- reset_rake_task_for_changed_defines( runner )
- @rake_wrapper[runner].invoke
- end
-
- def invoke_test_shallow_include_lists(files)
- @dependinator.enhance_shallow_include_lists_dependencies( files )
- par_map(PROJECT_COMPILE_THREADS, files) do |file|
- reset_rake_task_for_changed_defines( file )
- @rake_wrapper[file].invoke
- end
- end
-
- def invoke_test_preprocessed_files(files)
- @dependinator.enhance_preprocesed_file_dependencies( files )
- par_map(PROJECT_COMPILE_THREADS, files) do |file|
- reset_rake_task_for_changed_defines( file )
- @rake_wrapper[file].invoke
- end
- end
-
- def invoke_test_dependencies_files(files)
- @dependinator.enhance_dependencies_dependencies( files )
- par_map(PROJECT_COMPILE_THREADS, files) do |file|
- reset_rake_task_for_changed_defines( file )
- @rake_wrapper[file].invoke
- end
- end
-
- def invoke_test_objects(objects)
- par_map(PROJECT_COMPILE_THREADS, objects) do |object|
- reset_rake_task_for_changed_defines( object )
- @rake_wrapper[object].invoke
- end
- end
-
- def invoke_test_executable(file)
- @rake_wrapper[file].invoke
- end
-
- def invoke_test_results(result)
- @dependinator.enhance_results_dependencies( result )
- @rake_wrapper[result].invoke
- end
-
- def invoke_release_dependencies_files(files)
- par_map(PROJECT_COMPILE_THREADS, files) do |file|
- @rake_wrapper[file].invoke
- end
- end
-
- def invoke_release_objects(objects)
- par_map(PROJECT_COMPILE_THREADS, objects) do |object|
- @rake_wrapper[object].invoke
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_base.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_base.rake
deleted file mode 100644
index 67a3b503a9..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_base.rake
+++ /dev/null
@@ -1,115 +0,0 @@
-require 'ceedling/constants'
-require 'ceedling/file_path_utils'
-require 'ceedling/version'
-
-desc "Display build environment version info."
-task :version do
- puts " Ceedling:: #{Ceedling::Version::CEEDLING}"
- puts " Unity:: #{Ceedling::Version::UNITY}"
- puts " CMock:: #{Ceedling::Version::CMOCK}"
- puts " CException:: #{Ceedling::Version::CEXCEPTION}"
-end
-
-desc "Set verbose output (silent:[#{Verbosity::SILENT}] - obnoxious:[#{Verbosity::OBNOXIOUS}])."
-task :verbosity, :level do |t, args|
- verbosity_level = args.level.to_i
-
- if (PROJECT_USE_MOCKS)
- # don't store verbosity level in setupinator's config hash, use a copy;
- # otherwise, the input configuration will change and trigger entire project rebuilds
- hash = @ceedling[:setupinator].config_hash[:cmock].clone
- hash[:verbosity] = verbosity_level
-
- @ceedling[:cmock_builder].manufacture( hash )
- end
-
- @ceedling[:configurator].project_verbosity = verbosity_level
-
- # control rake's verbosity with new setting
- verbose( ((verbosity_level >= Verbosity::OBNOXIOUS) ? true : false) )
-end
-
-desc "Enable logging"
-task :logging do
- @ceedling[:configurator].project_logging = true
-end
-
-# non advertised debug task
-task :debug do
- Rake::Task[:verbosity].invoke(Verbosity::DEBUG)
- Rake.application.options.trace = true
- @ceedling[:configurator].project_debug = true
-end
-
-# non advertised sanity checking task
-task :sanity_checks, :level do |t, args|
- check_level = args.level.to_i
- @ceedling[:configurator].sanity_checks = check_level
-end
-
-# non advertised catch for calling upgrade in the wrong place
-task :upgrade do
- puts "WARNING: You're currently IN your project directory. Take a step out and try"
- puts "again if you'd like to perform an upgrade."
-end
-
-# list expanded environment variables
-if (not ENVIRONMENT.empty?)
-desc "List all configured environment variables."
-task :environment do
- env_list = []
- ENVIRONMENT.each do |env|
- env.each_key do |key|
- name = key.to_s.upcase
- env_list.push(" - #{name}: \"#{env[key]}\"")
- end
- end
- env_list.sort.each do |env_line|
- puts env_line
- end
-end
-end
-
-namespace :options do
-
- COLLECTION_PROJECT_OPTIONS.each do |option_path|
- option = File.basename(option_path, '.yml')
-
- desc "Merge #{option} project options."
- task option.to_sym do
- hash = @ceedling[:project_config_manager].merge_options( @ceedling[:setupinator].config_hash, option_path )
- @ceedling[:setupinator].do_setup( hash )
- if @ceedling[:configurator].project_release_build
- load(File.join(CEEDLING_LIB, 'ceedling', 'rules_release.rake'))
- end
- end
- end
-
- # This is to give nice errors when typing options
- rule /^options:.*/ do |t, args|
- filename = t.to_s.split(':')[-1] + '.yml'
- filelist = COLLECTION_PROJECT_OPTIONS.map{|s| File.basename(s) }
- @ceedling[:file_finder].find_file_from_list(filename, filelist, :error)
- end
-
- # This will output the fully-merged tools options to their own project.yml file
- desc "Export tools options to a new project file"
- task :export, :filename do |t, args|
- outfile = args.filename || 'tools.yml'
- toolcfg = {}
- @ceedling[:configurator].project_config_hash.each_pair do |k,v|
- toolcfg[k] = v if (k.to_s[0..5] == 'tools_')
- end
- File.open(outfile,'w') {|f| f << toolcfg.to_yaml({:indentation => 2})}
- end
-end
-
-
-# do not present task if there's no plugins
-if (not PLUGINS_ENABLED.empty?)
-desc "Execute plugin result summaries (no build triggering)."
-task :summary do
- @ceedling[:plugin_manager].summary
- puts "\nNOTE: Summaries may be out of date with project sources.\n\n"
-end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_filesystem.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_filesystem.rake
deleted file mode 100644
index 8263955fa0..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_filesystem.rake
+++ /dev/null
@@ -1,111 +0,0 @@
-
-# rather than require 'rake/clean' & try to override, we replicate for finer control
-CLEAN = Rake::FileList["**/*~", "**/*.bak"]
-CLOBBER = Rake::FileList.new
-
-CLEAN.clear_exclude.exclude { |fn| fn.pathmap("%f") == 'core' && File.directory?(fn) }
-
-CLEAN.include(File.join(PROJECT_TEST_BUILD_OUTPUT_PATH, '*'))
-CLEAN.include(File.join(PROJECT_TEST_RESULTS_PATH, '*'))
-CLEAN.include(File.join(PROJECT_TEST_DEPENDENCIES_PATH, '*'))
-CLEAN.include(File.join(PROJECT_BUILD_RELEASE_ROOT, '*.*'))
-CLEAN.include(File.join(PROJECT_RELEASE_BUILD_OUTPUT_PATH, '*'))
-CLEAN.include(File.join(PROJECT_RELEASE_DEPENDENCIES_PATH, '*'))
-
-CLOBBER.include(File.join(PROJECT_BUILD_ARTIFACTS_ROOT, '**/*'))
-CLOBBER.include(File.join(PROJECT_BUILD_TESTS_ROOT, '**/*'))
-CLOBBER.include(File.join(PROJECT_BUILD_RELEASE_ROOT, '**/*'))
-CLOBBER.include(File.join(PROJECT_LOG_PATH, '**/*'))
-CLOBBER.include(File.join(PROJECT_TEMP_PATH, '**/*'))
-
-# just in case they're using git, let's make sure we allow them to preserved the build directory if desired.
-CLOBBER.exclude(File.join(TESTS_BASE_PATH), '**/.gitkeep')
-
-# because of cmock config, mock path can optionally exist apart from standard test build paths
-CLOBBER.include(File.join(CMOCK_MOCK_PATH, '*'))
-
-REMOVE_FILE_PROC = Proc.new { |fn| rm_r fn rescue nil }
-
-# redefine clean so we can override how it advertises itself
-desc "Delete all build artifacts and temporary products."
-task(:clean) do
- # because :clean is a prerequisite for :clobber, intelligently display the progress message
- if (not @ceedling[:task_invoker].invoked?(/^clobber$/))
- @ceedling[:streaminator].stdout_puts("\nCleaning build artifacts...\n(For large projects, this task may take a long time to complete)\n\n")
- end
- begin
- CLEAN.each { |fn| REMOVE_FILE_PROC.call(fn) }
- rescue
- end
-end
-
-# redefine clobber so we can override how it advertises itself
-desc "Delete all generated files (and build artifacts)."
-task(:clobber => [:clean]) do
- @ceedling[:streaminator].stdout_puts("\nClobbering all generated files...\n(For large projects, this task may take a long time to complete)\n\n")
- begin
- CLOBBER.each { |fn| REMOVE_FILE_PROC.call(fn) }
- @ceedling[:rake_wrapper][:directories].invoke
- @ceedling[:dependinator].touch_force_rebuild_files
- rescue
- end
-end
-
-# create a directory task for each of the paths, so we know how to build them
-PROJECT_BUILD_PATHS.each { |path| directory(path) }
-
-# create a single directory task which verifies all the others get built
-task :directories => PROJECT_BUILD_PATHS
-
-# when the force file doesn't exist, it probably means we clobbered or are on a fresh
-# install. In either case, stuff was deleted, so assume we want to rebuild it all
-file @ceedling[:configurator].project_test_force_rebuild_filepath do
- unless File.exists?(@ceedling[:configurator].project_test_force_rebuild_filepath)
- @ceedling[:dependinator].touch_force_rebuild_files
- end
-end
-
-# list paths discovered at load time
-namespace :paths do
- standard_paths = ['test','source','include']
- paths = @ceedling[:setupinator].config_hash[:paths].keys.map{|n| n.to_s.downcase}
- paths = (paths + standard_paths).uniq
- paths.each do |name|
- path_list = Object.const_get("COLLECTION_PATHS_#{name.upcase}")
-
- if (path_list.size != 0) || (standard_paths.include?(name))
- desc "List all collected #{name} paths."
- task(name.to_sym) { puts "#{name} paths:"; path_list.sort.each {|path| puts " - #{path}" } }
- end
- end
-
-end
-
-
-# list files & file counts discovered at load time
-namespace :files do
-
- categories = [
- ['test', COLLECTION_ALL_TESTS],
- ['source', COLLECTION_ALL_SOURCE],
- ['include', COLLECTION_ALL_HEADERS],
- ['support', COLLECTION_ALL_SUPPORT]
- ]
-
- using_assembly = (defined?(TEST_BUILD_USE_ASSEMBLY) && TEST_BUILD_USE_ASSEMBLY) ||
- (defined?(RELEASE_BUILD_USE_ASSEMBLY) && RELEASE_BUILD_USE_ASSEMBLY)
- categories << ['assembly', COLLECTION_ALL_ASSEMBLY] if using_assembly
-
- categories.each do |category|
- name = category[0]
- collection = category[1]
-
- desc "List all collected #{name} files."
- task(name.to_sym) do
- puts "#{name} files:"
- collection.sort.each { |filepath| puts " - #{filepath}" }
- puts "file count: #{collection.size}"
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release.rake
deleted file mode 100644
index 9d3a59c53f..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release.rake
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'ceedling/constants'
-require 'ceedling/file_path_utils'
-
-
-desc "Build release target."
-task RELEASE_SYM => [:directories] do
- header = "Release build '#{File.basename(PROJECT_RELEASE_BUILD_TARGET)}'"
- @ceedling[:streaminator].stdout_puts("\n\n#{header}\n#{'-' * header.length}")
-
- begin
- @ceedling[:plugin_manager].pre_release
-
- core_objects = []
- extra_objects = @ceedling[:file_path_utils].form_release_build_c_objects_filelist( COLLECTION_RELEASE_ARTIFACT_EXTRA_LINK_OBJECTS )
-
- @ceedling[:project_config_manager].process_release_config_change
- core_objects.concat( @ceedling[:release_invoker].setup_and_invoke_c_objects( COLLECTION_ALL_SOURCE ) )
-
- # if assembler use isn't enabled, COLLECTION_ALL_ASSEMBLY is empty array & nothing happens
- core_objects.concat( @ceedling[:release_invoker].setup_and_invoke_asm_objects( COLLECTION_ALL_ASSEMBLY ) )
-
- # if we're using libraries, we need to add those to our collection as well
- library_objects = (defined? LIBRARIES_RELEASE && !LIBRARIES_RELEASE.empty?) ? LIBRARIES_RELEASE.flatten.compact : []
- file( PROJECT_RELEASE_BUILD_TARGET => (core_objects + extra_objects + library_objects) )
- Rake::Task[PROJECT_RELEASE_BUILD_TARGET].invoke
- ensure
- @ceedling[:plugin_manager].post_release
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release_deep_dependencies.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release_deep_dependencies.rake
deleted file mode 100644
index db2be5f343..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_release_deep_dependencies.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'ceedling/constants'
-
-namespace REFRESH_SYM do
-
- task RELEASE_SYM do
- @ceedling[:release_invoker].refresh_c_deep_dependencies
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests.rake
deleted file mode 100644
index 5c1006b366..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests.rake
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'ceedling/constants'
-
-task :test_deps => [:directories]
-
-task :test => [:test_deps] do
- Rake.application['test:all'].invoke
-end
-
-namespace TEST_SYM do
-
- desc "Run all unit tests (also just 'test' works)."
- task :all => [:test_deps] do
- @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS)
- end
-
- desc "Run single test ([*] real test or source file name, no path)."
- task :* do
- message = "\nOops! '#{TEST_ROOT_NAME}:*' isn't a real task. " +
- "Use a real test or source file name (no path) in place of the wildcard.\n" +
- "Example: rake #{TEST_ROOT_NAME}:foo.c\n\n"
-
- @ceedling[:streaminator].stdout_puts( message )
- end
-
- desc "Run tests for changed files."
- task :delta => [:test_deps] do
- @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, TEST_SYM, {:force_run => false})
- end
-
- desc "Just build tests without running."
- task :build_only => [:test_deps] do
- @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, TEST_SYM, {:build_only => true})
- end
-
- desc "Run tests by matching regular expression pattern."
- task :pattern, [:regex] => [:test_deps] do |t, args|
- matches = []
-
- COLLECTION_ALL_TESTS.each { |test| matches << test if (test =~ /#{args.regex}/) }
-
- if (matches.size > 0)
- @ceedling[:test_invoker].setup_and_invoke(matches, TEST_SYM, {:force_run => false})
- else
- @ceedling[:streaminator].stdout_puts("\nFound no tests matching pattern /#{args.regex}/.")
- end
- end
-
- desc "Run tests whose test path contains [dir] or [dir] substring."
- task :path, [:dir] => [:test_deps] do |t, args|
- matches = []
-
- COLLECTION_ALL_TESTS.each { |test| matches << test if File.dirname(test).include?(args.dir.gsub(/\\/, '/')) }
-
- if (matches.size > 0)
- @ceedling[:test_invoker].setup_and_invoke(matches, TEST_SYM, {:force_run => false})
- else
- @ceedling[:streaminator].stdout_puts("\nFound no tests including the given path or path component.")
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests_deep_dependencies.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests_deep_dependencies.rake
deleted file mode 100644
index f89940716d..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_tests_deep_dependencies.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'ceedling/constants'
-
-namespace REFRESH_SYM do
-
- task TEST_SYM do
- @ceedling[:test_invoker].refresh_deep_dependencies
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_vendor.rake b/test/unit-test/vendor/ceedling/lib/ceedling/tasks_vendor.rake
deleted file mode 100644
index 63c2ca55b1..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tasks_vendor.rake
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'ceedling/constants'
-require 'ceedling/file_path_utils'
-
-# create file dependencies to ensure C-based components of vendor tools are recompiled when they are updated with new versions
-# forming these explicitly rather than depend on auxiliary dependencies so all scenarios are explicitly covered
-
-file( @ceedling[:file_path_utils].form_test_build_c_object_filepath( UNITY_C_FILE ) => [
- File.join( UNITY_VENDOR_PATH, UNITY_LIB_PATH, UNITY_C_FILE ),
- File.join( UNITY_VENDOR_PATH, UNITY_LIB_PATH, UNITY_H_FILE ),
- File.join( UNITY_VENDOR_PATH, UNITY_LIB_PATH, UNITY_INTERNALS_H_FILE ) ]
- )
-
-
-if (PROJECT_USE_MOCKS)
-file( @ceedling[:file_path_utils].form_test_build_c_object_filepath( CMOCK_C_FILE ) => [
- File.join( CMOCK_VENDOR_PATH, CMOCK_LIB_PATH, CMOCK_C_FILE ),
- File.join( CMOCK_VENDOR_PATH, CMOCK_LIB_PATH, CMOCK_H_FILE ) ]
- )
-end
-
-
-if (PROJECT_USE_EXCEPTIONS)
-file( @ceedling[:file_path_utils].form_test_build_c_object_filepath( CEXCEPTION_C_FILE ) => [
- File.join( CEXCEPTION_VENDOR_PATH, CEXCEPTION_LIB_PATH, CEXCEPTION_C_FILE ),
- File.join( CEXCEPTION_VENDOR_PATH, CEXCEPTION_LIB_PATH, CEXCEPTION_H_FILE ) ]
- )
-end
-
-
-if (PROJECT_USE_EXCEPTIONS and PROJECT_RELEASE_BUILD)
-file( @ceedling[:file_path_utils].form_release_build_c_object_filepath( CEXCEPTION_C_FILE ) => [
- File.join( CEXCEPTION_VENDOR_PATH, CEXCEPTION_LIB_PATH, CEXCEPTION_C_FILE ),
- File.join( CEXCEPTION_VENDOR_PATH, CEXCEPTION_LIB_PATH, CEXCEPTION_H_FILE ) ]
- )
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/test_includes_extractor.rb b/test/unit-test/vendor/ceedling/lib/ceedling/test_includes_extractor.rb
deleted file mode 100644
index 393b0be8b1..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/test_includes_extractor.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-
-class TestIncludesExtractor
-
- constructor :configurator, :yaml_wrapper, :file_wrapper
-
- def setup
- @includes = {}
- @mocks = {}
- end
-
-
- # for includes_list file, slurp up array from yaml file and sort & store includes
- def parse_includes_list(includes_list)
- gather_and_store_includes( includes_list, @yaml_wrapper.load(includes_list) )
- end
-
- # open, scan for, and sort & store includes of test file
- def parse_test_file(test)
- gather_and_store_includes( test, extract_from_file(test) )
- end
-
- # open, scan for, and sort & store includes of test file
- def parse_test_file_source_include(test)
- return extract_source_include_from_file(test)
- end
-
- # mocks with no file extension
- def lookup_raw_mock_list(test)
- file_key = form_file_key(test)
- return [] if @mocks[file_key].nil?
- return @mocks[file_key]
- end
-
- # includes with file extension
- def lookup_includes_list(file)
- file_key = form_file_key(file)
- return [] if (@includes[file_key]).nil?
- return @includes[file_key]
- end
-
- private #################################
-
- def form_file_key(filepath)
- return File.basename(filepath).to_sym
- end
-
- def extract_from_file(file)
- includes = []
- header_extension = @configurator.extension_header
-
- contents = @file_wrapper.read(file)
-
- # remove line comments
- contents = contents.gsub(/\/\/.*$/, '')
- # remove block comments
- contents = contents.gsub(/\/\*.*?\*\//m, '')
-
- contents.split("\n").each do |line|
- # look for include statement
- scan_results = line.scan(/#include\s+\"\s*(.+#{'\\'+header_extension})\s*\"/)
-
- includes << scan_results[0][0] if (scan_results.size > 0)
-
- # look for TEST_FILE statement
- scan_results = line.scan(/TEST_FILE\(\s*\"\s*(.+\.\w+)\s*\"\s*\)/)
-
- includes << scan_results[0][0] if (scan_results.size > 0)
- end
-
- return includes.uniq
- end
-
- def extract_source_include_from_file(file)
- source_includes = []
- source_extension = @configurator.extension_source
-
- contents = @file_wrapper.read(file)
-
- # remove line comments
- contents = contents.gsub(/\/\/.*$/, '')
- # remove block comments
- contents = contents.gsub(/\/\*.*?\*\//m, '')
-
- contents.split("\n").each do |line|
- # look for include statement
- scan_results = line.scan(/#include\s+\"\s*(.+#{'\\'+source_extension})\s*\"/)
-
- source_includes << scan_results[0][0] if (scan_results.size > 0)
- end
-
- return source_includes.uniq
- end
-
- def gather_and_store_includes(file, includes)
- mock_prefix = @configurator.cmock_mock_prefix
- header_extension = @configurator.extension_header
- file_key = form_file_key(file)
- @mocks[file_key] = []
-
- # add includes to lookup hash
- @includes[file_key] = includes
-
- includes.each do |include_file|
- # check if include is a mock
- scan_results = include_file.scan(/(#{mock_prefix}.+)#{'\\'+header_extension}/)
- # add mock to lookup hash
- @mocks[file_key] << scan_results[0][0] if (scan_results.size > 0)
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker.rb b/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker.rb
deleted file mode 100644
index ae686a1104..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-require 'ceedling/constants'
-
-
-class TestInvoker
-
- attr_reader :sources, :tests, :mocks
-
- constructor :configurator,
- :test_invoker_helper,
- :plugin_manager,
- :streaminator,
- :preprocessinator,
- :task_invoker,
- :dependinator,
- :project_config_manager,
- :build_invoker_utils,
- :file_path_utils,
- :file_wrapper
-
- def setup
- @sources = []
- @tests = []
- @mocks = []
- end
-
-
- # Convert libraries configuration form YAML configuration
- # into a string that can be given to the compiler.
- def convert_libraries_to_arguments()
- args = ((@configurator.project_config_hash[:libraries_test] || []) + ((defined? LIBRARIES_SYSTEM) ? LIBRARIES_SYSTEM : [])).flatten
- if (defined? LIBRARIES_FLAG)
- args.map! {|v| LIBRARIES_FLAG.gsub(/\$\{1\}/, v) }
- end
- return args
- end
-
- def get_library_paths_to_arguments()
- paths = (defined? PATHS_LIBRARIES) ? (PATHS_LIBRARIES || []).clone : []
- if (defined? LIBRARIES_PATH_FLAG)
- paths.map! {|v| LIBRARIES_PATH_FLAG.gsub(/\$\{1\}/, v) }
- end
- return paths
- end
-
- def setup_and_invoke(tests, context=TEST_SYM, options={:force_run => true, :build_only => false})
-
- @tests = tests
-
- @project_config_manager.process_test_config_change
-
- @tests.each do |test|
- # announce beginning of test run
- header = "Test '#{File.basename(test)}'"
- @streaminator.stdout_puts("\n\n#{header}\n#{'-' * header.length}")
-
- begin
- @plugin_manager.pre_test( test )
- test_name ="#{File.basename(test)}".chomp('.c')
- def_test_key="defines_#{test_name.downcase}"
-
- if @configurator.project_config_hash.has_key?(def_test_key.to_sym) || @configurator.defines_use_test_definition
- defs_bkp = Array.new(COLLECTION_DEFINES_TEST_AND_VENDOR)
- tst_defs_cfg = Array.new(defs_bkp)
- if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
- tst_defs_cfg.replace(@configurator.project_config_hash[def_test_key.to_sym])
- tst_defs_cfg .concat(COLLECTION_DEFINES_VENDOR) if COLLECTION_DEFINES_VENDOR
- end
- if @configurator.defines_use_test_definition
- tst_defs_cfg << File.basename(test, ".*").strip.upcase.sub(/@.*$/, "")
- end
- COLLECTION_DEFINES_TEST_AND_VENDOR.replace(tst_defs_cfg)
- end
-
- # redefine the project out path and preprocessor defines
- if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
- @streaminator.stdout_puts("Updating test definitions for #{test_name}", Verbosity::NORMAL)
- orig_path = @configurator.project_test_build_output_path
- @configurator.project_config_hash[:project_test_build_output_path] = File.join(@configurator.project_test_build_output_path, test_name)
- @file_wrapper.mkdir(@configurator.project_test_build_output_path)
- end
-
- # collect up test fixture pieces & parts
- runner = @file_path_utils.form_runner_filepath_from_test( test )
- mock_list = @preprocessinator.preprocess_test_and_invoke_test_mocks( test )
- sources = @test_invoker_helper.extract_sources( test )
- extras = @configurator.collection_test_fixture_extra_link_objects
- core = [test] + mock_list + sources
- objects = @file_path_utils.form_test_build_objects_filelist( [runner] + core + extras ).uniq
- results_pass = @file_path_utils.form_pass_results_filepath( test )
- results_fail = @file_path_utils.form_fail_results_filepath( test )
-
- # identify all the objects shall not be linked and then remove them from objects list.
- no_link_objects = @file_path_utils.form_test_build_objects_filelist(@preprocessinator.preprocess_shallow_source_includes( test ))
- objects = objects.uniq - no_link_objects
-
- @project_config_manager.process_test_defines_change(@project_config_manager.filter_internal_sources(sources))
-
- # clean results files so we have a missing file with which to kick off rake's dependency rules
- @test_invoker_helper.clean_results( {:pass => results_pass, :fail => results_fail}, options )
-
- # load up auxiliary dependencies so deep changes cause rebuilding appropriately
- @test_invoker_helper.process_deep_dependencies( core ) do |dependencies_list|
- @dependinator.load_test_object_deep_dependencies( dependencies_list )
- end
-
- # tell rake to create test runner if needed
- @task_invoker.invoke_test_runner( runner )
-
- # enhance object file dependencies to capture externalities influencing regeneration
- @dependinator.enhance_test_build_object_dependencies( objects )
-
- # associate object files with executable
- @dependinator.enhance_test_executable_dependencies( test, objects )
-
- # build test objects
- @task_invoker.invoke_test_objects( objects )
-
- # if the option build_only has been specified, build only the executable
- # but don't run the test
- if (options[:build_only])
- executable = @file_path_utils.form_test_executable_filepath( test )
- @task_invoker.invoke_test_executable( executable )
- else
- # 3, 2, 1... launch
- @task_invoker.invoke_test_results( results_pass )
- end
- rescue => e
- @build_invoker_utils.process_exception( e, context )
- ensure
- @plugin_manager.post_test( test )
- # restore the project test defines
- if @configurator.project_config_hash.has_key?(def_test_key.to_sym) || @configurator.defines_use_test_definition
- COLLECTION_DEFINES_TEST_AND_VENDOR.replace(defs_bkp)
- if @configurator.project_config_hash.has_key?(def_test_key.to_sym)
- @configurator.project_config_hash[:project_test_build_output_path] = orig_path
- @streaminator.stdout_puts("Restored defines and build path to standard", Verbosity::NORMAL)
- end
- end
- end
-
- # store away what's been processed
- @mocks.concat( mock_list )
- @sources.concat( sources )
-
- @task_invoker.first_run = false
- end
-
- # post-process collected mock list
- @mocks.uniq!
-
- # post-process collected sources list
- @sources.uniq!
- end
-
-
- def refresh_deep_dependencies
- @file_wrapper.rm_f(
- @file_wrapper.directory_listing(
- File.join( @configurator.project_test_dependencies_path, '*' + @configurator.extension_dependencies ) ) )
-
- @test_invoker_helper.process_deep_dependencies(
- @configurator.collection_all_tests + @configurator.collection_all_source )
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker_helper.rb
deleted file mode 100644
index a48edf9f9b..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/test_invoker_helper.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-
-class TestInvokerHelper
-
- constructor :configurator, :task_invoker, :test_includes_extractor, :file_finder, :file_path_utils, :file_wrapper
-
- def clean_results(results, options)
- @file_wrapper.rm_f( results[:fail] )
- @file_wrapper.rm_f( results[:pass] ) if (options[:force_run])
- end
-
- def process_deep_dependencies(files)
- return if (not @configurator.project_use_deep_dependencies)
-
- dependencies_list = @file_path_utils.form_test_dependencies_filelist( files ).uniq
-
- if @configurator.project_generate_deep_dependencies
- @task_invoker.invoke_test_dependencies_files( dependencies_list )
- end
-
- yield( dependencies_list ) if block_given?
- end
-
- def extract_sources(test)
- sources = []
- includes = @test_includes_extractor.lookup_includes_list(test)
-
- includes.each { |include| sources << @file_finder.find_compilation_input_file(include, :ignore) }
-
- return sources.compact
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor.rb b/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor.rb
deleted file mode 100644
index 0ab5ddcac9..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor.rb
+++ /dev/null
@@ -1,229 +0,0 @@
-require 'ceedling/constants'
-require 'benchmark'
-
-class ShellExecutionException < RuntimeError
- attr_reader :shell_result
- def initialize(shell_result)
- @shell_result = shell_result
- end
-end
-
-class ToolExecutor
-
- constructor :configurator, :tool_executor_helper, :streaminator, :system_wrapper
-
- def setup
- @tool_name = ''
- @executable = ''
- end
-
- # build up a command line from yaml provided config
-
- # @param extra_params is an array of parameters to append to executable
- def build_command_line(tool_config, extra_params, *args)
- @tool_name = tool_config[:name]
- @executable = tool_config[:executable]
-
- command = {}
-
- # basic premise is to iterate top to bottom through arguments using '$' as
- # a string replacement indicator to expand globals or inline yaml arrays
- # into command line arguments via substitution strings
- # executable must be quoted if it includes spaces (common on windows)
- executable = @tool_executor_helper.osify_path_separators( expandify_element(@executable, *args) )
- executable = "\"#{executable}\"" if executable.include?(' ')
- command[:line] = [
- executable,
- extra_params.join(' ').strip,
- build_arguments(tool_config[:arguments], *args),
- ].reject{|s| s.nil? || s.empty?}.join(' ').strip
-
- command[:options] = {
- :stderr_redirect => @tool_executor_helper.stderr_redirection(tool_config, @configurator.project_logging),
- :background_exec => tool_config[:background_exec]
- }
-
- return command
- end
-
-
- # shell out, execute command, and return response
- def exec(command, options={}, args=[])
- options[:boom] = true if (options[:boom].nil?)
- options[:stderr_redirect] = StdErrRedirect::NONE if (options[:stderr_redirect].nil?)
- options[:background_exec] = BackgroundExec::NONE if (options[:background_exec].nil?)
- # build command line
- command_line = [
- @tool_executor_helper.background_exec_cmdline_prepend( options ),
- command.strip,
- args,
- @tool_executor_helper.stderr_redirect_cmdline_append( options ),
- @tool_executor_helper.background_exec_cmdline_append( options ),
- ].flatten.compact.join(' ')
-
- @streaminator.stderr_puts("Verbose: #{__method__.to_s}(): #{command_line}", Verbosity::DEBUG)
-
- shell_result = {}
-
- # depending on background exec option, we shell out differently
- time = Benchmark.realtime do
- if (options[:background_exec] != BackgroundExec::NONE)
- shell_result = @system_wrapper.shell_system( command_line, options[:boom] )
- else
- shell_result = @system_wrapper.shell_backticks( command_line, options[:boom] )
- end
- end
- shell_result[:time] = time
-
- #scrub the string for illegal output
- unless shell_result[:output].nil?
- shell_result[:output] = shell_result[:output].scrub if "".respond_to?(:scrub)
- shell_result[:output].gsub!(/\033\[\d\dm/,'')
- end
-
- @tool_executor_helper.print_happy_results( command_line, shell_result, options[:boom] )
- @tool_executor_helper.print_error_results( command_line, shell_result, options[:boom] )
-
- # go boom if exit code isn't 0 (but in some cases we don't want a non-0 exit code to raise)
- raise ShellExecutionException.new(shell_result) if ((shell_result[:exit_code] != 0) and options[:boom])
-
- return shell_result
- end
-
-
- private #############################
-
-
- def build_arguments(config, *args)
- build_string = ''
-
- return nil if (config.nil?)
-
- # iterate through each argument
-
- # the yaml blob array needs to be flattened so that yaml substitution
- # is handled correctly, since it creates a nested array when an anchor is
- # dereferenced
- config.flatten.each do |element|
- argument = ''
-
- case(element)
- # if we find a simple string then look for string replacement operators
- # and expand with the parameters in this method's argument list
- when String then argument = expandify_element(element, *args)
- # if we find a hash, then we grab the key as a substitution string and expand the
- # hash's value(s) within that substitution string
- when Hash then argument = dehashify_argument_elements(element)
- end
-
- build_string.concat("#{argument} ") if (argument.length > 0)
- end
-
- build_string.strip!
- return build_string if (build_string.length > 0)
- return nil
- end
-
-
- # handle simple text string argument & argument array string replacement operators
- def expandify_element(element, *args)
- match = //
- to_process = nil
- args_index = 0
-
- # handle ${#} input replacement
- if (element =~ TOOL_EXECUTOR_ARGUMENT_REPLACEMENT_PATTERN)
- args_index = ($2.to_i - 1)
-
- if (args.nil? or args[args_index].nil?)
- @streaminator.stderr_puts("ERROR: Tool '#{@tool_name}' expected valid argument data to accompany replacement operator #{$1}.", Verbosity::ERRORS)
- raise
- end
-
- match = /#{Regexp.escape($1)}/
- to_process = args[args_index]
- end
-
- # simple string argument: replace escaped '\$' and strip
- element.sub!(/\\\$/, '$')
- element.strip!
-
- # handle inline ruby execution
- if (element =~ RUBY_EVAL_REPLACEMENT_PATTERN)
- element.replace(eval($1))
- end
-
- build_string = ''
-
- # handle array or anything else passed into method to be expanded in place of replacement operators
- case (to_process)
- when Array then to_process.each {|value| build_string.concat( "#{element.sub(match, value.to_s)} " ) } if (to_process.size > 0)
- else build_string.concat( element.sub(match, to_process.to_s) )
- end
-
- # handle inline ruby string substitution
- if (build_string =~ RUBY_STRING_REPLACEMENT_PATTERN)
- build_string.replace(@system_wrapper.module_eval(build_string))
- end
-
- return build_string.strip
- end
-
-
- # handle argument hash: keys are substitution strings, values are data to be expanded within substitution strings
- def dehashify_argument_elements(hash)
- build_string = ''
- elements = []
-
- # grab the substitution string (hash key)
- substitution = hash.keys[0].to_s
- # grab the string(s) to squirt into the substitution string (hash value)
- expand = hash[hash.keys[0]]
-
- if (expand.nil?)
- @streaminator.stderr_puts("ERROR: Tool '#{@tool_name}' could not expand nil elements for substitution string '#{substitution}'.", Verbosity::ERRORS)
- raise
- end
-
- # array-ify expansion input if only a single string
- expansion = ((expand.class == String) ? [expand] : expand)
-
- expansion.each do |item|
- # code eval substitution
- if (item =~ RUBY_EVAL_REPLACEMENT_PATTERN)
- elements << eval($1)
- # string eval substitution
- elsif (item =~ RUBY_STRING_REPLACEMENT_PATTERN)
- elements << @system_wrapper.module_eval(item)
- # global constants
- elsif (@system_wrapper.constants_include?(item))
- const = Object.const_get(item)
- if (const.nil?)
- @streaminator.stderr_puts("ERROR: Tool '#{@tool_name}' found constant '#{item}' to be nil.", Verbosity::ERRORS)
- raise
- else
- elements << const
- end
- elsif (item.class == Array)
- elements << item
- elsif (item.class == String)
- @streaminator.stderr_puts("ERROR: Tool '#{@tool_name}' cannot expand nonexistent value '#{item}' for substitution string '#{substitution}'.", Verbosity::ERRORS)
- raise
- else
- @streaminator.stderr_puts("ERROR: Tool '#{@tool_name}' cannot expand value having type '#{item.class}' for substitution string '#{substitution}'.", Verbosity::ERRORS)
- raise
- end
- end
-
- # expand elements (whether string or array) into substitution string & replace escaped '\$'
- elements.flatten!
- elements.each do |element|
- build_string.concat( substitution.sub(/([^\\]*)\$/, "\\1#{element}") ) # don't replace escaped '\$' but allow us to replace just a lonesome '$'
- build_string.gsub!(/\\\$/, '$')
- build_string.concat(' ')
- end
-
- return build_string.strip
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor_helper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor_helper.rb
deleted file mode 100644
index de4cafe469..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/tool_executor_helper.rb
+++ /dev/null
@@ -1,164 +0,0 @@
-require 'ceedling/constants' # for Verbosity enumeration & $stderr redirect enumeration
-
-##
-# Helper functions for the tool executor
-class ToolExecutorHelper
-
- constructor :streaminator, :system_utils, :system_wrapper
-
- ##
- # Returns the stderr redirection based on the config and logging.
- # ==== Attributes
- #
- # * _tool_config_: A hash containing config information.
- # * _logging_: A boolean representing if logging is enabled or not.
- #
- def stderr_redirection(tool_config, logging)
- # if there's no logging enabled, return :stderr_redirect unmodified
- return tool_config[:stderr_redirect] if (not logging)
-
- # if there is logging enabled but the redirect is a custom value (not enum), return the custom string
- return tool_config[:stderr_redirect] if (tool_config[:stderr_redirect].class == String)
-
- # if logging is enabled but there's no custom string, return the AUTO enumeration so $stderr goes into the log
- return StdErrRedirect::AUTO
- end
-
-
- ##
- # Returns the background execution prepend based on the config.
- # ==== Attributes
- #
- # * _tool_config_: A hash containing config information.
- #
- def background_exec_cmdline_prepend(tool_config)
- return nil if (tool_config.nil? || tool_config[:background_exec].nil?)
-
- config_exec = tool_config[:background_exec]
-
- if ((config_exec == BackgroundExec::AUTO) and (@system_wrapper.windows?))
- return 'start'
- end
-
- if (config_exec == BackgroundExec::WIN)
- return 'start'
- end
-
- return nil
- end
-
-
- ##
- # Modifies an executables path based on platform.
- # ==== Attributes
- #
- # * _executable_: The executable's path.
- #
- def osify_path_separators(executable)
- return executable.gsub(/\//, '\\') if (@system_wrapper.windows?)
- return executable
- end
-
- ##
- # Returns the stderr redirect append based on the config.
- # ==== Attributes
- #
- # * _tool_config_: A hash containing config information.
- #
- def stderr_redirect_cmdline_append(tool_config)
- return nil if (tool_config.nil? || tool_config[:stderr_redirect].nil?)
-
- config_redirect = tool_config[:stderr_redirect]
- redirect = StdErrRedirect::NONE
-
- if (config_redirect == StdErrRedirect::AUTO)
- if (@system_wrapper.windows?)
- redirect = StdErrRedirect::WIN
- elsif (@system_utils.tcsh_shell?)
- redirect = StdErrRedirect::TCSH
- else
- redirect = StdErrRedirect::UNIX
- end
- end
-
- case redirect
- # we may need more complicated processing after some learning with various environments
- when StdErrRedirect::NONE then nil
- when StdErrRedirect::WIN then '2>&1'
- when StdErrRedirect::UNIX then '2>&1'
- when StdErrRedirect::TCSH then '|&'
- else redirect.to_s
- end
- end
-
- ##
- # Returns the background execution append based on the config.
- # ==== Attributes
- #
- # * _tool_config_: A hash containing config information.
- #
- def background_exec_cmdline_append(tool_config)
- return nil if (tool_config.nil? || tool_config[:background_exec].nil?)
-
- config_exec = tool_config[:background_exec]
-
- # if :auto & windows, then we already prepended 'start' and should append nothing
- return nil if ((config_exec == BackgroundExec::AUTO) and (@system_wrapper.windows?))
-
- # if :auto & not windows, then we append standard '&'
- return '&' if ((config_exec == BackgroundExec::AUTO) and (not @system_wrapper.windows?))
-
- # if explicitly Unix, then append '&'
- return '&' if (config_exec == BackgroundExec::UNIX)
-
- # * _command_str_: A hash containing config information.
- # all other cases, including :none, :win, & anything unrecognized, append nothing
- return nil
- end
-
- ##
- # Outputs success results if command succeeded and we have verbosity cranked up.
- # ==== Attributes
- #
- # * _command_str_: The command ran.
- # * _shell_results_: The outputs of the command including exit code and
- # output.
- # * _boom_: A boolean representing if a non zero result is erroneous.
- #
- def print_happy_results(command_str, shell_result, boom=true)
- if ((shell_result[:exit_code] == 0) or ((shell_result[:exit_code] != 0) and not boom))
- output = "> Shell executed command:\n"
- output += "'#{command_str}'\n"
- output += "> Produced output:\n" if (not shell_result[:output].empty?)
- output += "#{shell_result[:output].strip}\n" if (not shell_result[:output].empty?)
- output += "> And exited with status: [#{shell_result[:exit_code]}].\n" if (shell_result[:exit_code] != 0)
- output += "\n"
-
- @streaminator.stdout_puts(output, Verbosity::OBNOXIOUS)
- end
- end
-
- ##
- # Outputs failures results if command failed and we have verbosity set to minimum error level.
- # ==== Attributes
- #
- # * _command_str_: The command ran.
- # * _shell_results_: The outputs of the command including exit code and
- # output.
- # * _boom_: A boolean representing if a non zero result is erroneous.
- #
- def print_error_results(command_str, shell_result, boom=true)
- if ((shell_result[:exit_code] != 0) and boom)
- output = "ERROR: Shell command failed.\n"
- output += "> Shell executed command:\n"
- output += "'#{command_str}'\n"
- output += "> Produced output:\n" if (not shell_result[:output].empty?)
- output += "#{shell_result[:output].strip}\n" if (not shell_result[:output].empty?)
- output += "> And exited with status: [#{shell_result[:exit_code]}].\n" if (shell_result[:exit_code] != nil)
- output += "> And then likely crashed.\n" if (shell_result[:exit_code] == nil)
- output += "\n"
-
- @streaminator.stderr_puts(output, Verbosity::ERRORS)
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/verbosinator.rb b/test/unit-test/vendor/ceedling/lib/ceedling/verbosinator.rb
deleted file mode 100644
index e8ed38d78e..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/verbosinator.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-
-class Verbosinator
-
- constructor :configurator
-
- def should_output?(level)
- return (level <= @configurator.project_verbosity)
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/version.rb b/test/unit-test/vendor/ceedling/lib/ceedling/version.rb
deleted file mode 100644
index ebda10b785..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/version.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-
-# @private
-module Ceedling
- module Version
- { "UNITY" => File.join("unity","src","unity.h"),
- "CMOCK" => File.join("cmock","src","cmock.h"),
- "CEXCEPTION" => File.join("c_exception","lib","CException.h")
- }.each_pair do |name, path|
- # Check for local or global version of vendor directory in order to look up versions
- path1 = File.expand_path( File.join("..","..","vendor",path) )
- path2 = File.expand_path( File.join(File.dirname(__FILE__),"..","..","vendor",path) )
- filename = if (File.exists?(path1))
- path1
- elsif (File.exists?(path2))
- path2
- elsif File.exists?(CEEDLING_VENDOR)
- path3 = File.expand_path( File.join(CEEDLING_VENDOR,path) )
- if (File.exists?(path3))
- path3
- else
- basepath = File.join( CEEDLING_VENDOR, path.split(/\\\//)[0], 'release')
- begin
- [ @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'version.info') ).strip,
- @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'build.info') ).strip ].join('.')
- rescue
- "#{name}"
- end
- end
- else
- module_eval("#{name} = 'unknown'")
- continue
- end
-
- # Actually look up the versions
- a = [0,0,0]
- begin
- File.readlines(filename).each do |line|
- ["VERSION_MAJOR", "VERSION_MINOR", "VERSION_BUILD"].each_with_index do |field, i|
- m = line.match(/#{name}_#{field}\s+(\d+)/)
- a[i] = m[1] unless (m.nil?)
- end
- end
- rescue
- abort("Can't collect data for vendor component: \"#{filename}\" . \nPlease check your setup.")
- end
-
- # splat it to return the final value
- eval("#{name} = '#{a.join(".")}'")
- end
-
- GEM = "0.31.1"
- CEEDLING = GEM
- end
-end
diff --git a/test/unit-test/vendor/ceedling/lib/ceedling/yaml_wrapper.rb b/test/unit-test/vendor/ceedling/lib/ceedling/yaml_wrapper.rb
deleted file mode 100644
index 00ece5141b..0000000000
--- a/test/unit-test/vendor/ceedling/lib/ceedling/yaml_wrapper.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'yaml'
-require 'erb'
-
-
-class YamlWrapper
-
- def load(filepath)
- return YAML.load(ERB.new(File.read(filepath)).result)
- end
-
- def dump(filepath, structure)
- File.open(filepath, 'w') do |output|
- YAML.dump(structure, output)
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/beep/README.md b/test/unit-test/vendor/ceedling/plugins/beep/README.md
deleted file mode 100644
index e59d881b3c..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/beep/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-ceedling-beep
-=============
-
-This is a simple plugin that just beeps at the end of a build and/or test sequence. Are you getting too distracted surfing
-the internet, chatting with coworkers, or swordfighting while it's building or testing? The friendly beep will let you know
-it's time to pay attention again.
-
-This plugin has very few configuration options. At this time it can beep on completion of a task and/or on an error condition.
-For each of these, you can configure the method that it should beep.
-
-```
-:tools:
- :beep_on_done: :bell
- :beep_on_error: :bell
-```
-
-Each of these have the following options:
-
- - :bell - this option uses the ASCII bell character out stdout
- - :speaker_test - this uses the linux speaker-test command if installed
-
-Very likely, we'll be adding to this list if people find this to be useful.
diff --git a/test/unit-test/vendor/ceedling/plugins/beep/lib/beep.rb b/test/unit-test/vendor/ceedling/plugins/beep/lib/beep.rb
deleted file mode 100644
index cbc5e3e38d..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/beep/lib/beep.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/constants'
-
-class Beep < Plugin
-
- attr_reader :config
-
- def setup
- @config = {
- :on_done => ((defined? TOOLS_BEEP_ON_DONE) ? TOOLS_BEEP_ON_DONE : :bell ),
- :on_error => ((defined? TOOLS_BEEP_ON_ERROR) ? TOOLS_BEEP_ON_ERROR : :bell ),
- }
- end
-
- def post_build
- beep @config[:on_done]
- end
-
- def post_error
- beep @config[:on_error]
- end
-
- private
-
- def beep(method = :none)
- case method
- when :bell
- if (SystemWrapper.windows?)
- puts "echo '\007'"
- else
- puts "echo -ne '\007'"
- end
- when :speaker_test
- `speaker-test -t sine -f 1000 -l 1`
- else
- #do nothing with illegal or :none
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/bullseye/README.md b/test/unit-test/vendor/ceedling/plugins/bullseye/README.md
deleted file mode 100644
index aad4492048..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/bullseye/README.md
+++ /dev/null
@@ -1,76 +0,0 @@
-ceedling-bullseye
-=================
-
-# Plugin Overview
-
-Plugin for integrating Bullseye code coverage tool into Ceedling projects.
-This plugin requires a working license to Bullseye code coverage tools. The tools
-must be within the path or the path should be added to the environment in the
-`project.yml file`.
-
-## Configuration
-
-The bullseye plugin supports configuration options via your `project.yml` provided
-by Ceedling. The following is a typical configuration example:
-
-```
-:bullseye:
- :auto_license: TRUE
-:plugins:
- :bullseye_lib_path: []
-:paths:
- :bullseye_toolchain_include: []
-
-:tools:
- :bullseye_instrumentation:
- :executable: covc
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - -q
- - ${1}
- :bullseye_compiler:
- :executable: gcc
- :arguments:
- - -g
- - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
- - -I"$": COLLECTION_PATHS_BULLSEYE_TOOLCHAIN_INCLUDE
- - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR
- - -DBULLSEYE_COMPILER
- - -c "${1}"
- - -o "${2}"
- :bullseye_linker:
- :executable: gcc
- :arguments:
- - ${1}
- - -o ${2}
- - -L$: PLUGINS_BULLSEYE_LIB_PATH
- - -lcov
- :bullseye_fixture:
- :executable: ${1}
- :bullseye_report_covsrc:
- :executable: covsrc
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - -q
- - -w140
- :bullseye_report_covfn:
- :executable: covfn
- :stderr_redirect: :auto
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - --width 120
- - --no-source
- - '"${1}"'
- :bullseye_browser:
- :executable: CoverageBrowser
- :background_exec: :auto
- :optional: TRUE
- :arguments:
- - '"$"': ENVIRONMENT_COVFILE
-```
-
-## Example Usage
-
-```sh
-ceedling bullseye:all utils:bullseye
-```
diff --git a/test/unit-test/vendor/ceedling/plugins/bullseye/assets/template.erb b/test/unit-test/vendor/ceedling/plugins/bullseye/assets/template.erb
deleted file mode 100644
index e1ef9874b2..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/bullseye/assets/template.erb
+++ /dev/null
@@ -1,14 +0,0 @@
-% function_string = hash[:coverage][:functions].to_s
-% branch_string = hash[:coverage][:branches].to_s
-% format_string = "%#{[function_string.length, branch_string.length].max}i"
-<%=@ceedling[:plugin_reportinator].generate_banner("#{hash[:header]}: CODE COVERAGE SUMMARY")%>
-% if (!hash[:coverage][:functions].nil?)
-FUNCTIONS: <%=sprintf(format_string, hash[:coverage][:functions])%>%
-% else
-FUNCTIONS: none
-% end
-% if (!hash[:coverage][:branches].nil?)
-BRANCHES: <%=sprintf(format_string, hash[:coverage][:branches])%>%
-% else
-BRANCHES: none
-% end
diff --git a/test/unit-test/vendor/ceedling/plugins/bullseye/bullseye.rake b/test/unit-test/vendor/ceedling/plugins/bullseye/bullseye.rake
deleted file mode 100644
index 11073e786e..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/bullseye/bullseye.rake
+++ /dev/null
@@ -1,173 +0,0 @@
-directory(BULLSEYE_BUILD_OUTPUT_PATH)
-directory(BULLSEYE_RESULTS_PATH)
-directory(BULLSEYE_ARTIFACTS_PATH)
-directory(BULLSEYE_DEPENDENCIES_PATH)
-
-CLEAN.include(File.join(BULLSEYE_BUILD_OUTPUT_PATH, '*'))
-CLEAN.include(File.join(BULLSEYE_RESULTS_PATH, '*'))
-CLEAN.include(File.join(BULLSEYE_DEPENDENCIES_PATH, '*'))
-
-CLOBBER.include(File.join(BULLSEYE_BUILD_PATH, '**/*'))
-PLUGINS_BULLSEYE_LIB_PATH = 'C:\\tools\\BullseyeCoverage\\lib' if not defined?(PLUGINS_BULLSEYE_LIB_PATH)
-
-rule(/#{BULLSEYE_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name)
- end
- ]) do |object|
-
- if File.basename(object.source) =~ /^(#{PROJECT_TEST_FILE_PREFIX}|#{CMOCK_MOCK_PREFIX}|#{BULLSEYE_IGNORE_SOURCES.join('|')})/i
- @ceedling[:generator].generate_object_file(
- TOOLS_BULLSEYE_COMPILER,
- OPERATION_COMPILE_SYM,
- BULLSEYE_SYM,
- object.source,
- object.name,
- @ceedling[:file_path_utils].form_test_build_list_filepath(object.name)
- )
- else
- @ceedling[BULLSEYE_SYM].generate_coverage_object_file(object.source, object.name)
- end
-
-end
-
-rule(/#{BULLSEYE_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_EXECUTABLE}$/) do |bin_file|
- lib_args = @ceedling[:test_invoker].convert_libraries_to_arguments()
- lib_paths = @ceedling[:test_invoker].get_library_paths_to_arguments()
- @ceedling[:generator].generate_executable_file(
- TOOLS_BULLSEYE_LINKER,
- BULLSEYE_SYM,
- bin_file.prerequisites,
- bin_file.name,
- @ceedling[:file_path_utils].form_test_build_map_filepath(bin_file.name),
- lib_args,
- lib_paths
- )
-end
-
-rule(/#{BULLSEYE_RESULTS_PATH}\/#{'.+\\'+EXTENSION_TESTPASS}$/ => [
- proc do |task_name|
- @ceedling[:file_path_utils].form_test_executable_filepath(task_name)
- end
- ]) do |test_result|
- @ceedling[:generator].generate_test_results(TOOLS_BULLSEYE_FIXTURE, BULLSEYE_SYM, test_result.source, test_result.name)
-end
-
-rule(/#{BULLSEYE_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ => [
- proc do |task_name|
- @ceedling[:file_finder].find_compilation_input_file(task_name)
- end
- ]) do |dep|
- @ceedling[:generator].generate_dependencies_file(
- TOOLS_TEST_DEPENDENCIES_GENERATOR,
- BULLSEYE_SYM,
- dep.source,
- File.join(BULLSEYE_BUILD_OUTPUT_PATH, File.basename(dep.source).ext(EXTENSION_OBJECT) ),
- dep.name
- )
-end
-
-task :directories => [BULLSEYE_BUILD_OUTPUT_PATH, BULLSEYE_RESULTS_PATH, BULLSEYE_DEPENDENCIES_PATH, BULLSEYE_ARTIFACTS_PATH]
-
-namespace BULLSEYE_SYM do
- task source_coverage: COLLECTION_ALL_SOURCE.pathmap("#{BULLSEYE_BUILD_OUTPUT_PATH}/%n#{@ceedling[:configurator].extension_object}")
-
- desc 'Run code coverage for all tests'
- task all: [:test_deps] do
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, BULLSEYE_SYM)
- @ceedling[:configurator].restore_config
- end
-
- desc "Run single test w/ coverage ([*] real test or source file name, no path)."
- task :* do
- message = "\nOops! '#{BULLSEYE_ROOT_NAME}:*' isn't a real task. " +
- "Use a real test or source file name (no path) in place of the wildcard.\n" +
- "Example: rake #{BULLSEYE_ROOT_NAME}:foo.c\n\n"
-
- @ceedling[:streaminator].stdout_puts( message )
- end
-
- desc 'Run tests by matching regular expression pattern.'
- task :pattern, [:regex] => [:test_deps] do |_t, args|
- matches = []
-
- COLLECTION_ALL_TESTS.each do |test|
- matches << test if test =~ /#{args.regex}/
- end
-
- if !matches.empty?
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].setup_and_invoke(matches, BULLSEYE_SYM, force_run: false)
- @ceedling[:configurator].restore_config
- else
- @ceedling[:streaminator].stdout_puts("\nFound no tests matching pattern /#{args.regex}/.")
- end
- end
-
- desc 'Run tests whose test path contains [dir] or [dir] substring.'
- task :path, [:dir] => [:test_deps] do |_t, args|
- matches = []
-
- COLLECTION_ALL_TESTS.each do |test|
- matches << test if File.dirname(test).include?(args.dir.tr('\\', '/'))
- end
-
- if !matches.empty?
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].setup_and_invoke(matches, BULLSEYE_SYM, force_run: false)
- @ceedling[:configurator].restore_config
- else
- @ceedling[:streaminator].stdout_puts("\nFound no tests including the given path or path component.")
- end
- end
-
- desc 'Run code coverage for changed files'
- task delta: [:test_deps] do
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].setup_and_invoke(COLLECTION_ALL_TESTS, BULLSEYE_SYM, {:force_run => false})
- @ceedling[:configurator].restore_config
- end
-
- # use a rule to increase efficiency for large projects
- # bullseye test tasks by regex
- rule(/^#{BULLSEYE_TASK_ROOT}\S+$/ => [
- proc do |task_name|
- test = task_name.sub(/#{BULLSEYE_TASK_ROOT}/, '')
- test = "#{PROJECT_TEST_FILE_PREFIX}#{test}" unless test.start_with?(PROJECT_TEST_FILE_PREFIX)
- @ceedling[:file_finder].find_test_from_file_path(test)
- end
- ]) do |test|
- @ceedling[:rake_wrapper][:test_deps].invoke
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].setup_and_invoke([test.source], BULLSEYE_SYM)
- @ceedling[:configurator].restore_config
- end
-
-end
-
-if PROJECT_USE_DEEP_DEPENDENCIES
-namespace REFRESH_SYM do
- task BULLSEYE_SYM do
- @ceedling[:configurator].replace_flattened_config(@ceedling[BULLSEYE_SYM].config)
- @ceedling[BULLSEYE_SYM].enableBullseye(true)
- @ceedling[:test_invoker].refresh_deep_dependencies
- @ceedling[:configurator].restore_config
- end
-end
-end
-
-namespace UTILS_SYM do
-
- desc "Open Bullseye code coverage browser"
- task BULLSEYE_SYM do
- command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_BROWSER, [])
- @ceedling[:tool_executor].exec(command[:line], command[:options])
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/bullseye/config/defaults.yml b/test/unit-test/vendor/ceedling/plugins/bullseye/config/defaults.yml
deleted file mode 100644
index ed261d8e50..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/bullseye/config/defaults.yml
+++ /dev/null
@@ -1,57 +0,0 @@
----
-
-:bullseye:
- :auto_license: TRUE
-:plugins:
- :bullseye_lib_path: []
-:paths:
- :bullseye_toolchain_include: []
-
-:tools:
- :bullseye_instrumentation:
- :executable: covc
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - -q
- - ${1}
- :bullseye_compiler:
- :executable: gcc
- :arguments:
- - -g
- - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR
- - -I"$": COLLECTION_PATHS_BULLSEYE_TOOLCHAIN_INCLUDE
- - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR
- - -DBULLSEYE_COMPILER
- - -c "${1}"
- - -o "${2}"
- :bullseye_linker:
- :executable: gcc
- :arguments:
- - ${1}
- - -o ${2}
- - -L$: PLUGINS_BULLSEYE_LIB_PATH
- - -lcov
- :bullseye_fixture:
- :executable: ${1}
- :bullseye_report_covsrc:
- :executable: covsrc
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - -q
- - -w140
- :bullseye_report_covfn:
- :executable: covfn
- :stderr_redirect: :auto
- :arguments:
- - '--file $': ENVIRONMENT_COVFILE
- - --width 120
- - --no-source
- - '"${1}"'
- :bullseye_browser:
- :executable: CoverageBrowser
- :background_exec: :auto
- :optional: TRUE
- :arguments:
- - '"$"': ENVIRONMENT_COVFILE
-
-...
diff --git a/test/unit-test/vendor/ceedling/plugins/bullseye/lib/bullseye.rb b/test/unit-test/vendor/ceedling/plugins/bullseye/lib/bullseye.rb
deleted file mode 100644
index 3e76220060..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/bullseye/lib/bullseye.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/constants'
-
-BULLSEYE_ROOT_NAME = 'bullseye'
-BULLSEYE_TASK_ROOT = BULLSEYE_ROOT_NAME + ':'
-BULLSEYE_SYM = BULLSEYE_ROOT_NAME.to_sym
-
-BULLSEYE_BUILD_PATH = "#{PROJECT_BUILD_ROOT}/#{BULLSEYE_ROOT_NAME}"
-BULLSEYE_BUILD_OUTPUT_PATH = "#{BULLSEYE_BUILD_PATH}/out"
-BULLSEYE_RESULTS_PATH = "#{BULLSEYE_BUILD_PATH}/results"
-BULLSEYE_DEPENDENCIES_PATH = "#{BULLSEYE_BUILD_PATH}/dependencies"
-BULLSEYE_ARTIFACTS_PATH = "#{PROJECT_BUILD_ARTIFACTS_ROOT}/#{BULLSEYE_ROOT_NAME}"
-
-BULLSEYE_IGNORE_SOURCES = ['unity', 'cmock', 'cexception']
-
-
-class Bullseye < Plugin
-
- def setup
- @result_list = []
- @environment = [ {:covfile => File.join( BULLSEYE_ARTIFACTS_PATH, 'test.cov' )} ]
- @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
- @coverage_template_all = @ceedling[:file_wrapper].read(File.join(@plugin_root, 'assets/template.erb'))
- end
-
- def config
- {
- :project_test_build_output_path => BULLSEYE_BUILD_OUTPUT_PATH,
- :project_test_results_path => BULLSEYE_RESULTS_PATH,
- :project_test_dependencies_path => BULLSEYE_DEPENDENCIES_PATH,
- :defines_test => DEFINES_TEST + ['CODE_COVERAGE'],
- :collection_defines_test_and_vendor => COLLECTION_DEFINES_TEST_AND_VENDOR + ['CODE_COVERAGE']
- }
- end
-
- def generate_coverage_object_file(source, object)
- arg_hash = {:tool => TOOLS_BULLSEYE_INSTRUMENTATION, :context => BULLSEYE_SYM, :source => source, :object => object}
- @ceedling[:plugin_manager].pre_compile_execute(arg_hash)
-
- @ceedling[:streaminator].stdout_puts("Compiling #{File.basename(source)} with coverage...")
- compile_command =
- @ceedling[:tool_executor].build_command_line(
- TOOLS_BULLSEYE_COMPILER,
- @ceedling[:flaginator].flag_down( OPERATION_COMPILE_SYM, BULLSEYE_SYM, source ),
- source,
- object,
- @ceedling[:file_path_utils].form_test_build_list_filepath( object ) )
- coverage_command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_INSTRUMENTATION, [], compile_command[:line] )
-
- shell_result = @ceedling[:tool_executor].exec( coverage_command[:line], coverage_command[:options] )
-
- arg_hash[:shell_result] = shell_result
- @ceedling[:plugin_manager].post_compile_execute(arg_hash)
- end
-
- def post_test_fixture_execute(arg_hash)
- result_file = arg_hash[:result_file]
-
- if ((result_file =~ /#{BULLSEYE_RESULTS_PATH}/) and (not @result_list.include?(result_file)))
- @result_list << arg_hash[:result_file]
- end
- end
-
- def post_build
- return if (not @ceedling[:task_invoker].invoked?(/^#{BULLSEYE_TASK_ROOT}/))
-
- # test results
- results = @ceedling[:plugin_reportinator].assemble_test_results(@result_list)
- hash = {
- :header => BULLSEYE_ROOT_NAME.upcase,
- :results => results
- }
-
- @ceedling[:plugin_reportinator].run_test_results_report(hash) do
- message = ''
- message = 'Unit test failures.' if (results[:counts][:failed] > 0)
- message
- end
-
- # coverage results
- return if (verify_coverage_file() == false)
- if (@ceedling[:task_invoker].invoked?(/^#{BULLSEYE_TASK_ROOT}(all|delta)/))
- command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVSRC, [])
- shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options])
- report_coverage_results_all(shell_result[:output])
- else
- report_per_function_coverage_results(@ceedling[:test_invoker].sources)
- end
- end
-
- def summary
- return if (verify_coverage_file() == false)
- result_list = @ceedling[:file_path_utils].form_pass_results_filelist( BULLSEYE_RESULTS_PATH, COLLECTION_ALL_TESTS )
-
- # test results
- # get test results for only those tests in our configuration and of those only tests with results on disk
- hash = {
- :header => BULLSEYE_ROOT_NAME.upcase,
- :results => @ceedling[:plugin_reportinator].assemble_test_results(result_list, {:boom => false})
- }
-
- @ceedling[:plugin_reportinator].run_test_results_report(hash)
-
- # coverage results
- command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVSRC)
- shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options])
- report_coverage_results_all(shell_result[:output])
- end
-
- def enableBullseye(enable)
- if BULLSEYE_AUTO_LICENSE
- if (enable)
- args = ['push', 'on']
- @ceedling[:streaminator].stdout_puts("Enabling Bullseye")
- else
- args = ['pop']
- @ceedling[:streaminator].stdout_puts("Reverting Bullseye to previous state")
- end
-
- args.each do |arg|
- command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_BUILD_ENABLE_DISABLE, [], arg)
- shell_result = @ceedling[:tool_executor].exec(command[:line], command[:options])
- end
-
- end
- end
-
- private ###################################
-
- def report_coverage_results_all(coverage)
- results = {
- :header => BULLSEYE_ROOT_NAME.upcase,
- :coverage => {
- :functions => nil,
- :branches => nil
- }
- }
-
- if (coverage =~ /^Total.*?=\s+([0-9]+)\%/)
- results[:coverage][:functions] = $1.to_i
- end
-
- if (coverage =~ /^Total.*=\s+([0-9]+)\%\s*$/)
- results[:coverage][:branches] = $1.to_i
- end
-
- @ceedling[:plugin_reportinator].run_report($stdout, @coverage_template_all, results)
- end
-
- def report_per_function_coverage_results(sources)
- banner = @ceedling[:plugin_reportinator].generate_banner( "#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" )
- @ceedling[:streaminator].stdout_puts "\n" + banner
-
- coverage_sources = sources.clone
- coverage_sources.delete_if {|item| item =~ /#{CMOCK_MOCK_PREFIX}.+#{EXTENSION_SOURCE}$/}
- coverage_sources.delete_if {|item| item =~ /#{BULLSEYE_IGNORE_SOURCES.join('|')}#{EXTENSION_SOURCE}$/}
-
- coverage_sources.each do |source|
- command = @ceedling[:tool_executor].build_command_line(TOOLS_BULLSEYE_REPORT_COVFN, [], source)
- shell_results = @ceedling[:tool_executor].exec(command[:line], command[:options])
- coverage_results = shell_results[:output].deep_clone
- coverage_results.sub!(/.*\n.*\n/,'') # Remove the Bullseye tool banner
- if (coverage_results =~ /warning cov814: report is empty/)
- coverage_results = "WARNING: #{source} contains no coverage data!\n\n"
- @ceedling[:streaminator].stdout_puts(coverage_results, Verbosity::COMPLAIN)
- else
- coverage_results += "\n"
- @ceedling[:streaminator].stdout_puts(coverage_results)
- end
- end
- end
-
- def verify_coverage_file
- exist = @ceedling[:file_wrapper].exist?( ENVIRONMENT_COVFILE )
-
- if (!exist)
- banner = @ceedling[:plugin_reportinator].generate_banner( "#{BULLSEYE_ROOT_NAME.upcase}: CODE COVERAGE SUMMARY" )
- @ceedling[:streaminator].stdout_puts "\n" + banner + "\nNo coverage file.\n\n"
- end
-
- return exist
- end
-
-end
-
-
-# end blocks always executed following rake run
-END {
- # cache our input configurations to use in comparison upon next execution
- if (@ceedling[:task_invoker].invoked?(/^#{BULLSEYE_TASK_ROOT}/))
- @ceedling[:cacheinator].cache_test_config( @ceedling[:setupinator].config_hash )
- @ceedling[BULLSEYE_SYM].enableBullseye(false)
- end
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/colour_report/README.md b/test/unit-test/vendor/ceedling/plugins/colour_report/README.md
deleted file mode 100644
index 5f4ff77b1a..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/colour_report/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-ceedling-colour-report
-======================
-
-## Overview
-
-The colour_report replaces the normal ceedling "pretty" output with
-a colorized variant, in order to make the results easier to read from
-a standard command line. This is very useful on developer machines, but
-can occasionally cause problems with parsing on CI servers.
-
-## Setup
-
-Enable the plugin in your project.yml by adding `colour_report`
-to the list of enabled plugins.
-
-``` YAML
-:plugins:
- :enabled:
- - colour_report
-```
diff --git a/test/unit-test/vendor/ceedling/plugins/colour_report/lib/colour_report.rb b/test/unit-test/vendor/ceedling/plugins/colour_report/lib/colour_report.rb
deleted file mode 100644
index 1211eab4d6..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/colour_report/lib/colour_report.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/streaminator'
-require 'ceedling/constants'
-
-class ColourReport < Plugin
-
- def setup
- @ceedling[:stream_wrapper].stdout_override(&ColourReport.method(:colour_stdout))
- end
-
- def self.colour_stdout(string)
- require 'colour_reporter.rb'
- report string
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/command_hooks/README.md b/test/unit-test/vendor/ceedling/plugins/command_hooks/README.md
deleted file mode 100644
index 8ac64afce0..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/command_hooks/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-ceedling-command-hooks
-======================
-
-Plugin for easily calling command line tools at various points in the build process
-
-Define any of these sections in :tools: to provide additional hooks to be called on demand:
-
-```
- :pre_mock_generate
- :post_mock_generate
- :pre_runner_generate
- :post_runner_generate
- :pre_compile_execute
- :post_compile_execute
- :pre_link_execute
- :post_link_execute
- :pre_test_fixture_execute
- :pre_test
- :post_test
- :pre_release
- :post_release
- :pre_build
- :post_build
-```
-
-Each of these tools can support an :executable string and an :arguments list, like so:
-
-```
-:tools:
- :post_link_execute:
- :executable: objcopy.exe
- :arguments:
- - ${1} #This is replaced with the executable name
- - output.srec
- - --strip-all
-```
-
-You may also specify an array of executables to be called in a particular place, like so:
-
-```
-:tools:
- :post_test:
- - :executable: echo
- :arguments: "${1} was glorious!"
- - :executable: echo
- :arguments:
- - it kinda made me cry a little.
- - you?
-```
-
-Please note that it varies which arguments are being parsed down to the
-hooks. For now see `command_hooks.rb` to figure out which suits you best.
-Happy Tweaking!
diff --git a/test/unit-test/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb b/test/unit-test/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb
deleted file mode 100644
index 67e94f9351..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/command_hooks/lib/command_hooks.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/constants'
-class CommandHooks < Plugin
-
- attr_reader :config
-
- def setup
- @config = {
- :pre_mock_generate => ((defined? TOOLS_PRE_MOCK_GENERATE) ? TOOLS_PRE_MOCK_GENERATE : nil ),
- :post_mock_generate => ((defined? TOOLS_POST_MOCK_GENERATE) ? TOOLS_POST_MOCK_GENERATE : nil ),
- :pre_runner_generate => ((defined? TOOLS_PRE_RUNNER_GENERATE) ? TOOLS_PRE_RUNNER_GENERATE : nil ),
- :post_runner_generate => ((defined? TOOLS_POST_RUNNER_GENERATE) ? TOOLS_POST_RUNNER_GENERATE : nil ),
- :pre_compile_execute => ((defined? TOOLS_PRE_COMPILE_EXECUTE) ? TOOLS_PRE_COMPILE_EXECUTE : nil ),
- :post_compile_execute => ((defined? TOOLS_POST_COMPILE_EXECUTE) ? TOOLS_POST_COMPILE_EXECUTE : nil ),
- :pre_link_execute => ((defined? TOOLS_PRE_LINK_EXECUTE) ? TOOLS_PRE_LINK_EXECUTE : nil ),
- :post_link_execute => ((defined? TOOLS_POST_LINK_EXECUTE) ? TOOLS_POST_LINK_EXECUTE : nil ),
- :pre_test_fixture_execute => ((defined? TOOLS_PRE_TEST_FIXTURE_EXECUTE) ? TOOLS_PRE_TEST_FIXTURE_EXECUTE : nil ),
- :post_test_fixture_execute => ((defined? TOOLS_POST_TEST_FIXTURE_EXECUTE) ? TOOLS_POST_TEST_FIXTURE_EXECUTE : nil ),
- :pre_test => ((defined? TOOLS_PRE_TEST) ? TOOLS_PRE_TEST : nil ),
- :post_test => ((defined? TOOLS_POST_TEST) ? TOOLS_POST_TEST : nil ),
- :pre_release => ((defined? TOOLS_PRE_RELEASE) ? TOOLS_PRE_RELEASE : nil ),
- :post_release => ((defined? TOOLS_POST_RELEASE) ? TOOLS_POST_RELEASE : nil ),
- :pre_build => ((defined? TOOLS_PRE_BUILD) ? TOOLS_PRE_BUILD : nil ),
- :post_build => ((defined? TOOLS_POST_BUILD) ? TOOLS_POST_BUILD : nil ),
- :post_error => ((defined? TOOLS_POST_ERROR) ? TOOLS_POST_ERROR : nil ),
- }
- @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
- end
-
- def pre_mock_generate(arg_hash); run_hook(:pre_mock_generate, arg_hash[:header_file] ); end
- def post_mock_generate(arg_hash); run_hook(:post_mock_generate, arg_hash[:header_file] ); end
- def pre_runner_generate(arg_hash); run_hook(:pre_runner_generate, arg_hash[:source ] ); end
- def post_runner_generate(arg_hash); run_hook(:post_runner_generate, arg_hash[:runner_file] ); end
- def pre_compile_execute(arg_hash); run_hook(:pre_compile_execute, arg_hash[:source_file] ); end
- def post_compile_execute(arg_hash); run_hook(:post_compile_execute, arg_hash[:object_file] ); end
- def pre_link_execute(arg_hash); run_hook(:pre_link_execute, arg_hash[:executable] ); end
- def post_link_execute(arg_hash); run_hook(:post_link_execute, arg_hash[:executable] ); end
- def pre_test_fixture_execute(arg_hash); run_hook(:pre_test_fixture_execute, arg_hash[:executable] ); end
- def post_test_fixture_execute(arg_hash); run_hook(:post_test_fixture_execute, arg_hash[:executable] ); end
- def pre_test(test); run_hook(:pre_test, test ); end
- def post_test(test); run_hook(:post_test, test ); end
- def pre_release; run_hook(:pre_release ); end
- def post_release; run_hook(:post_release ); end
- def pre_build; run_hook(:pre_build ); end
- def post_build; run_hook(:post_build ); end
- def post_error; run_hook(:post_error ); end
-
- private
-
- ##
- # Run a hook if its available.
- #
- # :args:
- # - hook: Name of the hook to run
- # - name: Name of file (default: "")
- #
- # :return:
- # shell_result.
- #
- def run_hook_step(hook, name="")
- if (hook[:executable])
- # Handle argument replacemant ({$1}), and get commandline
- cmd = @ceedling[:tool_executor].build_command_line( hook, [], name )
- shell_result = @ceedling[:tool_executor].exec(cmd[:line], cmd[:options])
- end
- end
-
- ##
- # Run a hook if its available.
- #
- # If __which_hook__ is an array, run each of them sequentially.
- #
- # :args:
- # - which_hook: Name of the hook to run
- # - name: Name of file
- #
- def run_hook(which_hook, name="")
- if (@config[which_hook])
- @ceedling[:streaminator].stdout_puts("Running Hook #{which_hook}...", Verbosity::NORMAL)
- if (@config[which_hook].is_a? Array)
- @config[which_hook].each do |hook|
- run_hook_step(hook, name)
- end
- elsif (@config[which_hook].is_a? Hash)
- run_hook_step( @config[which_hook], name )
- else
- @ceedling[:streaminator].stdout_puts("Hook #{which_hook} was poorly formed", Verbosity::COMPLAINT)
- end
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/compile_commands_json/README.md b/test/unit-test/vendor/ceedling/plugins/compile_commands_json/README.md
deleted file mode 100644
index 7e3846e565..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/compile_commands_json/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-compile_commands_json
-=====================
-
-## Overview
-
-Syntax highlighting and code completion are hard. Historically each editor or IDE has implemented their own and then competed amongst themselves to offer the best experience for developers. Often developers would still to an IDE that felt cumbersome and slow just because it had the best syntax highlighting on the market. If doing it for one language is hard (and it is) imagine doing it for dozens of them. Imagine a full stack developer who has to work with CSS, HTML, JavaScript and some Ruby - they need excellent support in all those languages which just made things even harder.
-
-In June of 2016, Microsoft with Red Hat and Codenvy got together to create a standard called the Language Server Protocol (LSP). The idea was simple, by standardising on one protocol, all the IDEs and editors out there would only have to support LSP, and not have custom plugins for each language. In turn, the backend code that actually does the highlighting can be written once and used by any IDE that supports LSP. Many editors already support it such as Sublime Text, vim and emacs. This means that if you're using a crufty old IDE or worse, you're using a shiny new editor without code completion, then this could be just the upgrade you're looking for!
-
-For C and C++ projects, many people use the `clangd` backend. So that it can do things like "go to definition", `clangd` needs to know how to build the project so that it can figure out all the pieces to the puzzle. There are manual tools such as `bear` which can be run with `gcc` or `clang` to extract this information it has a big limitation in that if run with `ceedling release` you won't get any auto completion for Unity and you'll also get error messages reported by your IDE because of what it perceives as missing headers. If you do the same with `ceedling test` now you get Unity but you might miss things that are only seen in the release build.
-
-This plugin resolves that issue. As it is run by Ceedling, it has access to all the build information it needs to create the perfect `compile_commands.json`. Once enabled, this plugin will generate that file and place it in `./build/artifacts/compile_commands.json`. `clangd` will search your project for this file, but it is easier to symlink it into the root directory (for example `ln -s ./build/artifacts/compile_commands.json`.
-
-For more information on LSP and to find out if your editor supports it, check out https://langserver.org/
-
-## Setup
-
-Enable the plugin in your project.yml by adding `compile_commands_json` to the list
-of enabled plugins.
-
-``` YAML
-:plugins:
- :enabled:
- - compile_commands_json
-```
-
-## Configuration
-
-There is no additional configuration necessary to run this plugin.
diff --git a/test/unit-test/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb b/test/unit-test/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb
deleted file mode 100644
index 269cea4de3..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/compile_commands_json/lib/compile_commands_json.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/constants'
-require 'json'
-
-class CompileCommandsJson < Plugin
- def setup
- @fullpath = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, "compile_commands.json")
- @database = if (File.exists?(@fullpath))
- JSON.parse( File.read(@fullpath) )
- else
- []
- end
- end
-
- def post_compile_execute(arg_hash)
-
- # Create the new Entry
- value = {
- "directory" => Dir.pwd,
- "command" => arg_hash[:shell_command],
- "file" => arg_hash[:source]
- }
-
- # Determine if we're updating an existing file description or adding a new one
- index = @database.index {|h| h["file"] == arg_hash[:source]}
- if index
- @database[index] = value
- else
- @database << value
- end
-
- # Update the Actual compile_commands.json file
- File.open(@fullpath,'w') {|f| f << JSON.pretty_generate(@database)}
- end
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/dependencies/README.md b/test/unit-test/vendor/ceedling/plugins/dependencies/README.md
deleted file mode 100644
index 256467dfa3..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/dependencies/README.md
+++ /dev/null
@@ -1,254 +0,0 @@
-ceedling-dependencies
-=====================
-
-Plugin for supporting release dependencies. It's rare for an embedded project to
-be built completely free of other libraries and modules. Some of these may be
-standard internal libraries. Some of these may be 3rd party libraries. In either
-case, they become part of the project's ecosystem.
-
-This plugin is intended to make that relationship easier. It allows you to specify
-a source for dependencies. If required, it will automatically grab the appropriate
-version of that dependency.
-
-Most 3rd party libraries have a method of building already in place. While we'd
-love to convert the world to a place where everything downloads with a test suite
-in Ceedling, that's not likely to happen anytime soon. Until then, this plugin
-will allow the developer to specify what calls Ceedling should make to oversee
-the build process of those third party utilities. Are they using Make? CMake? A
-custom series of scripts that only a mad scientist could possibly understand? No
-matter. Ceedling has you covered. Just specify what should be called, and Ceedling
-will make it happen whenever it notices that the output artifacts are missing.
-
-Output artifacts? Sure! Things like static and dynamic libraries, or folders
-containing header files that might want to be included by your release project.
-
-So how does all this magic work?
-
-First, you need to add the `:dependencies` plugin to your list. Then, we'll add a new
-section called :dependencies. There, you can list as many dependencies as you desire. Each
-has a series of fields which help Ceedling to understand your needs. Many of them are
-optional. If you don't need that feature, just don't include it! In the end, it'll look
-something like this:
-
-```
-:dependencies:
- :libraries:
- - :name: WolfSSL
- :source_path: third_party/wolfssl/source
- :build_path: third_party/wolfssl/build
- :artifact_path: third_party/wolfssl/install
- :fetch:
- :method: :zip
- :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip
- :environment:
- - CFLAGS+=-DWOLFSSL_DTLS_ALLOW_FUTURE
- :build:
- - "autoreconf -i"
- - "./configure --enable-tls13 --enable-singlethreaded"
- - make
- - make install
- :artifacts:
- :static_libraries:
- - lib/wolfssl.a
- :dynamic_libraries:
- - lib/wolfssl.so
- :includes:
- - include/**
-```
-
-Let's take a deeper look at each of these features.
-
-The Starting Dash & Name
-------------------------
-
-Yes, that opening dash tells the dependencies plugin that the rest of these fields
-belong to our first dependency. If we had a second dependency, we'd have another
-dash, lined up with the first, and followed by all the fields indented again.
-
-By convention, we use the `:name` field as the first field for each tool. Ceedling
-honestly doesn't care which order the fields are given... but as humans, it makes
-it easier for us to see the name of each dependency with starting dash.
-
-The name field is only used to print progress while we're running Ceedling. You may
-call the name of the field whatever you wish.
-
-Working Folders
----------------
-
-The `:source_path` field allows us to specify where the source code for each of our
-dependencies is stored. If fetching the dependency from elsewhere, it will be fetched
-to this location. All commands to build this dependency will be executed from
-this location (override this by specifying a `:build_path`). Finally, the output
-artifacts will be referenced to this location (override this by specifying a `:artifact_path`)
-
-If unspecified, the `:source_path` will be `dependencies\dep_name` where `dep_name`
-is the name specified in `:name` above (with special characters removed). It's best,
-though, if you specify exactly where you want your dependencies to live.
-
-If the dependency is directly included in your project (you've specified `:none` as the
-`:method` for fetching), then `:source_path` should be where your Ceedling can find the
-source for your dependency in you repo.
-
-All artifacts are relative to the `:artifact_path` (which defaults to be the same as
-`:source_path`)
-
-Fetching Dependencies
----------------------
-
-The `:dependencies` plugin supports the ability to automatically fetch your dependencies
-for you... using some common methods of fetching source. This section contains only a
-couple of fields:
-
-- `:method` -- This is the method that this dependency is fetched.
- - `:none` -- This tells Ceedling that the code is already included in the project.
- - `:zip` -- This tells Ceedling that we want to unpack a zip file to our source path.
- - `:git` -- This tells Ceedling that we want to clone a git repo to our source path.
- - `:svn` -- This tells Ceedling that we want to checkout a subversion repo to our source path.
- - `:custom` -- This tells Ceedling that we want to use a custom command or commands to fetch the code.
-- `:source` -- This is the path or url to fetch code when using the zip or git method.
-- `:tag`/`:branch` -- This is the specific tag or branch that you wish to retrieve (git only. optional).
-- `:hash` -- This is the specific SHA1 hash you want to fetch (git only. optional, requires a deep clone).
-- `:revision` -- This is the specific revision you want to fetch (svn only. optional).
-- `:executable` -- This is a list of commands to execute when using the `:custom` method
-
-
-Environment Variables
----------------------
-
-Many build systems support customization through environment variables. By specifying
-an array of environment variables, Ceedling will customize the shell environment before
-calling the build process.
-
-Environment variables may be specified in three ways. Let's look at one of each:
-
-```
- :environment:
- - ARCHITECTURE=ARM9
- - CFLAGS+=-DADD_AWESOMENESS
- - CFLAGS-=-DWASTE
-```
-
-In the first example, you see the most straightforward method. The environment variable
-`ARCHITECTURE` is set to the value `ARM9`. That's it. Simple.
-
-The next two options modify an existing symbol. In the first one, we use `+=`, which tells
-Ceedling to add the define `ADD_AWESOMENESS` to the environment variable `CFLAGS`. The second
-tells Ceedling to remove the define `WASTE` from the same environment variable.
-
-There are a couple of things to note here.
-
-First, when adding to a variable, Ceedling has no way of knowing
-what delimiter you are expecting. In this example you can see we manually added some whitespace.
-If we had been modifying `PATH` instead, we might have had to use a `:` on a unux or `;` on
-Windows.
-
-Second, removing an argument will have no effect on the argument if that argument isn't found
-precisely. It's case sensitive and the entire string must match. If symbol doesn't already exist,
-it WILL after executing this command... however it will be assigned to nothing.
-
-Building Dependencies
----------------------
-
-The heart of the `:dependencies` plugin is the ability for you, the developer, to specify the
-build process for each of your dependencies. You will need to have any required tools installed
-before using this feature.
-
-The steps are specified as an array of strings. Ceedling will execute those steps in the order
-specified, moving from step to step unless an error is encountered. By the end of the process,
-the artifacts should have been created by your process... otherwise an error will be produced.
-
-Artifacts
----------
-
-These are the outputs of the build process. There are there types of artifacts. Any dependency
-may have none or some of these. Calling out these files tells Ceedling that they are important.
-Your dependency's build process may produce many other files... but these are the files that
-Ceedling understands it needs to act on.
-
-### `static_libraries`
-
-Specifying one or more static libraries will tell Ceedling where it should find static libraries
-output by your build process. These libraries are automatically added to the list of dependencies
-and will be linked with the rest of your code to produce the final release.
-
-If any of these libraries don't exist, Ceedling will trigger your build process in order for it
-to produce them.
-
-### `dynamic_libraries`
-
-Specifying one or more dynamic libraries will tell Ceedling where it should find dynamic libraries
-output by your build process. These libraries are automatically copied to the same folder as your
-final release binary.
-
-If any of these libraries don't exist, Ceedling will trigger your build process in order for it
-to produce them.
-
-### `includes`
-
-Often when libraries are built, the same process will output a collection of includes so that
-your release code knows how to interact with that library. It's the public API for that library.
-By specifying the directories that will contain these includes (don't specify the files themselves,
-Ceedling only needs the directories), Ceedling is able to automatically add these to its internal
-include list. This allows these files to be used while building your release code, as well we making
-them mockable during unit testing.
-
-### `source`
-
-It's possible that your external dependency will just produce additional C files as its output.
-In this case, Ceedling is able to automatically add these to its internal source list. This allows
-these files to be used while building your release code.
-
-Tasks
------
-
-Once configured correctly, the `:dependencies` plugin should integrate seamlessly into your
-workflow and you shouldn't have to think about it. In the real world, that doesn't always happen.
-Here are a number of tasks that are added or modified by this plugin.
-
-### `ceedling dependencies:clean`
-
-This can be issued in order to completely remove the dependency from its source path. On the
-next build, it will be refetched and rebuilt from scratch. This can also apply to a particular
-dependency. For example, by specifying `dependencies:clean:DepName`.
-
-### `ceedling dependencies:fetch`
-
-This can be issued in order to fetch each dependency from its origin. This will have no effect on
-dependencies that don't have fetch instructions specified. This can also apply to a particular
-dependency. For example, by specifying `dependencies:fetch:DepName`.
-
-### `ceedling dependencies:make`
-
-This will force the dependencies to all build. This should happen automatically when a release
-has been triggered... but if you're just getting your dependency configured at this moment, you
-may want to just use this feature instead. A single dependency can also be built by specifying its
-name, like `dependencies:make:MyTunaBoat`.
-
-### `ceedling dependencies:deploy`
-
-This will force any dynamic libraries produced by your dependencies to be copied to your release
-build directory... just in case you clobbered them.
-
-### `paths:include`
-
-Maybe you want to verify that all the include paths are correct. If you query Ceedling with this
-request, it will list all the header file paths that it's found, including those produced by
-dependencies.
-
-### `files:include`
-
-Maybe you want to take that query further and actually get a list of ALL the header files
-Ceedling has found, including those belonging to your dependencies.
-
-Testing
-=======
-
-Hopefully all your dependencies are fully tested... but we can't always depend on that.
-In the event that they are tested with Ceedling, you'll probably want to consider using
-the `:subprojects` plugin instead of this one. The purpose of this plugin is to pull in
-third party code for release... and to provide a mockable interface for Ceedling to use
-during its tests of other modules.
-
-If that's what you're after... you've found the right plugin!
-
-Happy Testing!
diff --git a/test/unit-test/vendor/ceedling/plugins/dependencies/config/defaults.yml b/test/unit-test/vendor/ceedling/plugins/dependencies/config/defaults.yml
deleted file mode 100644
index 0415f8ea16..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/dependencies/config/defaults.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-:dependencies:
- :libraries: []
-
-...
diff --git a/test/unit-test/vendor/ceedling/plugins/dependencies/dependencies.rake b/test/unit-test/vendor/ceedling/plugins/dependencies/dependencies.rake
deleted file mode 100644
index 4b9409bedc..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/dependencies/dependencies.rake
+++ /dev/null
@@ -1,147 +0,0 @@
-
-DEPENDENCIES_LIBRARIES.each do |deplib|
-
- # Look up the name of this dependency library
- deplib_name = @ceedling[DEPENDENCIES_SYM].get_name(deplib)
-
- # Make sure the required working directories exists
- # (don't worry about the subdirectories. That's the job of the dep's build tool)
- paths = @ceedling[DEPENDENCIES_SYM].get_working_paths(deplib)
- paths.each {|path| directory(path) }
- task :directories => paths
-
- all_deps = @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
-
- # Add a rule for building the actual libraries from dependency list
- (@ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- ).each do |libpath|
- file libpath do |filetask|
- path = filetask.name
-
- # We double-check that it doesn't already exist, because this process sometimes
- # produces multiple files, but they may have already been flagged as invoked
- unless (File.exists?(path))
-
- # Set Environment Variables, Fetch, and Build
- @ceedling[DEPENDENCIES_SYM].set_env_if_required(path)
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(path)
- @ceedling[DEPENDENCIES_SYM].build_if_required(path)
- end
- end
- end
-
- # Add a rule for building the source and includes from dependency list
- (@ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib) +
- @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
- ).each do |libpath|
- task libpath do |filetask|
- path = filetask.name
-
- unless (File.file?(path) || File.directory?(path))
-
- # Set Environment Variables, Fetch, and Build
- @ceedling[DEPENDENCIES_SYM].set_env_if_required(path)
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(path)
- @ceedling[DEPENDENCIES_SYM].build_if_required(path)
- end
- end
- end
-
- # Give ourselves a way to trigger individual dependencies
- namespace DEPENDENCIES_SYM do
- namespace :deploy do
- # Add task to directly just build this dependency
- task(deplib_name => @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)) do |t,args|
- @ceedling[DEPENDENCIES_SYM].deploy_if_required(deplib_name)
- end
- end
-
- namespace :make do
- # Add task to directly just build this dependency
- task(deplib_name => all_deps)
- end
-
- namespace :clean do
- # Add task to directly clobber this dependency
- task(deplib_name) do
- @ceedling[DEPENDENCIES_SYM].clean_if_required(deplib_name)
- end
- end
-
- namespace :fetch do
- # Add task to directly clobber this dependency
- task(deplib_name) do
- @ceedling[DEPENDENCIES_SYM].fetch_if_required(deplib_name)
- end
- end
- end
-
- # Add source files to our list of things to build during release
- source_files = @ceedling[DEPENDENCIES_SYM].get_source_files_for_dependency(deplib)
- task PROJECT_RELEASE_BUILD_TARGET => source_files
-
- # Finally, add the static libraries to our RELEASE build dependency list
- static_libs = @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib)
- task RELEASE_SYM => static_libs
-
- # Add the dynamic libraries to our RELEASE task dependency list so that they will be copied automatically
- dynamic_libs = @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- task RELEASE_SYM => dynamic_libs
-
- # Add the include dirs / files to our list of dependencies for release
- headers = @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib)
- task RELEASE_SYM => headers
-
- # Paths to Libraries need to be Added to the Lib Path List
- all_libs = static_libs + dynamic_libs
- PATHS_LIBRARIES ||= []
- all_libs.each {|lib| PATHS_LIBRARIES << File.dirname(lib) }
- PATHS_LIBRARIES.uniq!
- PATHS_LIBRARIES.reject!{|s| s.empty?}
-
- # Libraries Need to be Added to the Library List
- LIBRARIES_SYSTEM ||= []
- all_libs.each {|lib| LIBRARIES_SYSTEM << File.basename(lib,'.*').sub(/^lib/,'') }
- LIBRARIES_SYSTEM.uniq!
- LIBRARIES_SYSTEM.reject!{|s| s.empty?}
-end
-
-# Add any artifact:include or :source folders to our release & test includes paths so linking and mocking work.
-@ceedling[DEPENDENCIES_SYM].add_headers_and_sources()
-
-# Add tasks for building or cleaning ALL dependencies
-namespace DEPENDENCIES_SYM do
- desc "Deploy missing dependencies."
- task :deploy => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:deploy:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
-
- desc "Build any missing dependencies."
- task :make => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:make:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
-
- desc "Clean all dependencies."
- task :clean => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:clean:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
-
- desc "Fetch all dependencies."
- task :fetch => DEPENDENCIES_LIBRARIES.map{|deplib| "#{DEPENDENCIES_SYM}:fetch:#{@ceedling[DEPENDENCIES_SYM].get_name(deplib)}"}
-end
-
-namespace :files do
- desc "List all collected dependency libraries."
- task :dependencies do
- puts "dependency files:"
- deps = []
- DEPENDENCIES_LIBRARIES.each do |deplib|
- deps << @ceedling[DEPENDENCIES_SYM].get_static_libraries_for_dependency(deplib)
- deps << @ceedling[DEPENDENCIES_SYM].get_dynamic_libraries_for_dependency(deplib)
- end
- deps.flatten!
- deps.sort.each {|dep| puts " - #{dep}"}
- puts "file count: #{deps.size}"
- end
-end
-
-# Make sure that we build dependencies before attempting to tackle any of the unit tests
-Rake::Task[:test_deps].enhance ['dependencies:make']
diff --git a/test/unit-test/vendor/ceedling/plugins/dependencies/lib/dependencies.rb b/test/unit-test/vendor/ceedling/plugins/dependencies/lib/dependencies.rb
deleted file mode 100644
index fc8ae99680..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/dependencies/lib/dependencies.rb
+++ /dev/null
@@ -1,237 +0,0 @@
-require 'ceedling/plugin'
-require 'ceedling/constants'
-
-DEPENDENCIES_ROOT_NAME = 'dependencies'
-DEPENDENCIES_TASK_ROOT = DEPENDENCIES_ROOT_NAME + ':'
-DEPENDENCIES_SYM = DEPENDENCIES_ROOT_NAME.to_sym
-
-class Dependencies < Plugin
-
- def setup
- @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
-
- # Set up a fast way to look up dependencies by name or static lib path
- @dependencies = {}
- @dynamic_libraries = []
- DEPENDENCIES_LIBRARIES.each do |deplib|
-
- @dependencies[ deplib[:name] ] = deplib.clone
- all_deps = get_static_libraries_for_dependency(deplib) +
- get_dynamic_libraries_for_dependency(deplib) +
- get_include_directories_for_dependency(deplib) +
- get_source_files_for_dependency(deplib)
- all_deps.each do |key|
- @dependencies[key] = @dependencies[ deplib[:name] ]
- end
-
- @dynamic_libraries += get_dynamic_libraries_for_dependency(deplib)
- end
- end
-
- def config
- updates = {
- :collection_paths_include => COLLECTION_PATHS_INCLUDE,
- :collection_all_headers => COLLECTION_ALL_HEADERS,
- }
-
- @ceedling[DEPENDENCIES_SYM].get_include_directories_for_dependency(deplib).each do |incpath|
- updates[:collection_paths_include] << incpath
- Dir[ File.join(incpath, "*#{EXTENSION_HEADER}") ].each do |f|
- updates[:collection_all_headers] << f
- end
- end
-
- return updates
- end
-
- def get_name(deplib)
- raise "Each dependency must have a name!" if deplib[:name].nil?
- return deplib[:name].gsub(/\W*/,'')
- end
-
- def get_source_path(deplib)
- return deplib[:source_path] || File.join('dependencies', get_name(deplib))
- end
-
- def get_build_path(deplib)
- return deplib[:build_path] || deplib[:source_path] || File.join('dependencies', get_name(deplib))
- end
-
- def get_artifact_path(deplib)
- return deplib[:artifact_path] || deplib[:source_path] || File.join('dependencies', get_name(deplib))
- end
-
- def get_working_paths(deplib)
- paths = [deplib[:source_path], deplib[:build_path], deplib[:artifact_paths]].compact.uniq
- paths = [ File.join('dependencies', get_name(deplib)) ] if (paths.empty?)
- return paths
- end
-
- def get_static_libraries_for_dependency(deplib)
- (deplib[:artifacts][:static_libraries] || []).map {|path| File.join(get_artifact_path(deplib), path)}
- end
-
- def get_dynamic_libraries_for_dependency(deplib)
- (deplib[:artifacts][:dynamic_libraries] || []).map {|path| File.join(get_artifact_path(deplib), path)}
- end
-
- def get_source_files_for_dependency(deplib)
- (deplib[:artifacts][:source] || []).map {|path| File.join(get_artifact_path(deplib), path)}
- end
-
- def get_include_directories_for_dependency(deplib)
- paths = (deplib[:artifacts][:includes] || []).map {|path| File.join(get_artifact_path(deplib), path)}
- @ceedling[:file_system_utils].collect_paths(paths)
- end
-
- def set_env_if_required(lib_path)
- blob = @dependencies[lib_path]
- raise "Could not find dependency '#{lib_path}'" if blob.nil?
- return if (blob[:environment].nil?)
- return if (blob[:environment].empty?)
-
- blob[:environment].each do |e|
- m = e.match(/^(\w+)\s*(\+?\-?=)\s*(.*)$/)
- unless m.nil?
- case m[2]
- when "+="
- ENV[m[1]] = (ENV[m[1]] || "") + m[3]
- when "-="
- ENV[m[1]] = (ENV[m[1]] || "").gsub(m[3],'')
- else
- ENV[m[1]] = m[3]
- end
- end
- end
- end
-
- def fetch_if_required(lib_path)
- blob = @dependencies[lib_path]
- raise "Could not find dependency '#{lib_path}'" if blob.nil?
- return if (blob[:fetch].nil?)
- return if (blob[:fetch][:method].nil?)
- return if (directory(blob[:source_path]) && !Dir.empty?(blob[:source_path]))
-
- steps = case blob[:fetch][:method]
- when :none
- return
- when :zip
- [ "gzip -d #{blob[:fetch][:source]}" ]
- when :git
- branch = blob[:fetch][:tag] || blob[:fetch][:branch] || ''
- branch = ("-b " + branch) unless branch.empty?
- unless blob[:fetch][:hash].nil?
- # Do a deep clone to ensure the commit we want is available
- retval = [ "git clone #{branch} #{blob[:fetch][:source]} ." ]
- # Checkout the specified commit
- retval << "git checkout #{blob[:fetch][:hash]}"
- else
- # Do a thin clone
- retval = [ "git clone #{branch} --depth 1 #{blob[:fetch][:source]} ." ]
- end
- when :svn
- revision = blob[:fetch][:revision] || ''
- revision = ("--revision " + branch) unless branch.empty?
- retval = [ "svn checkout #{revision} #{blob[:fetch][:source]} ." ]
- retval
- when :custom
- blob[:fetch][:executable]
- else
- raise "Unknown fetch method '#{blob[:fetch][:method].to_s}' for dependency '#{blob[:name]}'"
- end
-
- # Perform the actual fetching
- @ceedling[:streaminator].stdout_puts("Fetching dependency #{blob[:name]}...", Verbosity::NORMAL)
- Dir.chdir(get_source_path(blob)) do
- steps.each do |step|
- @ceedling[:tool_executor].exec( step )
- end
- end
- end
-
- def build_if_required(lib_path)
- blob = @dependencies[lib_path]
- raise "Could not find dependency '#{lib_path}'" if blob.nil?
-
- # We don't clean anything unless we know how to fetch a new copy
- if (blob[:build].nil? || blob[:build].empty?)
- @ceedling[:streaminator].stdout_puts("Nothing to build for dependency #{blob[:name]}", Verbosity::NORMAL)
- return
- end
-
- # Perform the build
- @ceedling[:streaminator].stdout_puts("Building dependency #{blob[:name]}...", Verbosity::NORMAL)
- Dir.chdir(get_build_path(blob)) do
- blob[:build].each do |step|
- @ceedling[:tool_executor].exec( step )
- end
- end
- end
-
- def clean_if_required(lib_path)
- blob = @dependencies[lib_path]
- raise "Could not find dependency '#{lib_path}'" if blob.nil?
-
- # We don't clean anything unless we know how to fetch a new copy
- if (blob[:fetch].nil? || blob[:fetch][:method].nil? || (blob[:fetch][:method] == :none))
- @ceedling[:streaminator].stdout_puts("Nothing to clean for dependency #{blob[:name]}", Verbosity::NORMAL)
- return
- end
-
- # Perform the actual Cleaning
- @ceedling[:streaminator].stdout_puts("Cleaning dependency #{blob[:name]}...", Verbosity::NORMAL)
- get_working_paths(blob).each do |path|
- FileUtils.rm_rf(path) if File.directory?(path)
- end
- end
-
- def deploy_if_required(lib_path)
- blob = @dependencies[lib_path]
- raise "Could not find dependency '#{lib_path}'" if blob.nil?
-
- # We don't need to deploy anything if there isn't anything to deploy
- if (blob[:artifacts].nil? || blob[:artifacts][:dynamic_libraries].nil? || blob[:artifacts][:dynamic_libraries].empty?)
- @ceedling[:streaminator].stdout_puts("Nothing to deploy for dependency #{blob[:name]}", Verbosity::NORMAL)
- return
- end
-
- # Perform the actual Deploying
- @ceedling[:streaminator].stdout_puts("Deploying dependency #{blob[:name]}...", Verbosity::NORMAL)
- FileUtils.cp( lib_path, File.dirname(PROJECT_RELEASE_BUILD_TARGET) )
- end
-
- def add_headers_and_sources()
- # Search for header file paths and files to add to our collections
- DEPENDENCIES_LIBRARIES.each do |deplib|
- get_include_directories_for_dependency(deplib).each do |header|
- cfg = @ceedling[:configurator].project_config_hash
- cfg[:collection_paths_include] << header
- cfg[:collection_paths_source_and_include] << header
- cfg[:collection_paths_test_support_source_include] << header
- cfg[:collection_paths_test_support_source_include_vendor] << header
- cfg[:collection_paths_release_toolchain_include] << header
- Dir[ File.join(header, "*#{EXTENSION_HEADER}") ].each do |f|
- cfg[:collection_all_headers] << f
- end
- end
-
- get_source_files_for_dependency(deplib).each do |source|
- cfg = @ceedling[:configurator].project_config_hash
- cfg[:collection_paths_source_and_include] << source
- cfg[:collection_paths_test_support_source_include] << source
- cfg[:collection_paths_test_support_source_include_vendor] << source
- cfg[:collection_paths_release_toolchain_include] << source
- Dir[ File.join(source, "*#{EXTENSION_SOURCE}") ].each do |f|
- cfg[:collection_all_source] << f
- end
- end
- end
-
- # Make all these updated files findable by Ceedling
- @ceedling[:file_finder].prepare_search_sources()
- end
-end
-
-# end blocks always executed following rake run
-END {
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/README.md b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/README.md
deleted file mode 100644
index c99a951962..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/README.md
+++ /dev/null
@@ -1,250 +0,0 @@
-# A Fake Function Framework Plug-in for Ceedling
-
-This is a plug-in for [Ceedling](https://github.com/ThrowTheSwitch/Ceedling) to use the [Fake Function Framework](https://github.com/meekrosoft/fff) for mocking instead of CMock.
-
-Using fff provides less strict mocking than CMock, and allows for more loosely-coupled tests.
-And, when tests fail -- since you get the actual line number of the failure -- it's a lot easier to figure out what went wrong.
-
-## Installing the plug-in
-
-To use the plugin you need to 1) get the contents of this repo and 2) configure your project to use it.
-
-### Get the source
-
-The easiest way to get the source is to just clone this repo into the Ceedling plugin folder for your existing Ceedling project.
-(Don't have a Ceedling project already? [Here are instructions to create one.](http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-ceedling))
-From within `/vendor/ceedling/plugins`, run:
-
-`git clone https://github.com/ElectronVector/fake_function_framework.git`
-
-This will create a new folder named `fake_function_framework` in the plugins folder.
-
-### Enable the plug-in.
-
-The plug-in is enabled from within your project.yml file.
-
-In the `:plugins` configuration, add `fake_function_framework` to the list of enabled plugins:
-
-```yaml
-:plugins:
- :load_paths:
- - vendor/ceedling/plugins
- :enabled:
- - stdout_pretty_tests_report
- - module_generator
- - fake_function_framework
-```
-*Note that you could put the plugin source in some other location.
-In that case you'd need to add a new path the `:load_paths`.*
-
-## How to use it
-
-You use fff with Ceedling the same way you used to use CMock.
-Modules can still be generated with the default module generator: `rake module:create[my_module]`.
-If you want to "mock" `some_module.h` in your tests, just `#include "mock_some_module.h"`.
-This creates a fake function for each of the functions defined in `some_module.h`.
-
-The name of each fake is the original function name with an appended `_fake`.
-For example, if we're generating fakes for a stack module with `push` and `pop` functions, we would have the fakes `push_fake` and `pop_fake`.
-These fakes are linked into our test executable so that any time our unit under test calls `push` or `pop` our fakes are called instead.
-
-Each of these fakes is actually a structure containing information about how the function was called, and what it might return.
-We can use Unity to inspect these fakes in our tests, and verify the interactions of our units.
-There is also a global structure named `fff` which we can use to check the sequence of calls.
-
-The fakes can also be configured to return particular values, so you can exercise the unit under test however you want.
-
-The examples below explain how to use fff to test a variety of module interactions.
-Each example uses fakes for a "display" module, created from a display.h file with `#include "mock_display.h"`. The `display.h` file must exist and must contain the prototypes for the functions to be faked.
-
-### Test that a function was called once
-
-```c
-void
-test_whenTheDeviceIsReset_thenTheStatusLedIsTurnedOff()
-{
- // When
- event_deviceReset();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_turnOffStatusLed_fake.call_count);
-}
-```
-
-### Test that a function was NOT called
-
-```c
-void
-test_whenThePowerReadingIsLessThan5_thenTheStatusLedIsNotTurnedOn(void)
-{
- // When
- event_powerReadingUpdate(4);
-
- // Then
- TEST_ASSERT_EQUAL(0, display_turnOnStatusLed_fake.call_count);
-}
-```
-
-## Test that a single function was called with the correct argument
-
-```c
-void
-test_whenTheVolumeKnobIsMaxed_thenVolumeDisplayIsSetTo11(void)
-{
- // When
- event_volumeKnobMaxed();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_setVolume_fake.call_count);
- TEST_ASSERT_EQUAL(11, display_setVolume_fake.arg0_val);
-}
-```
-
-## Test that calls are made in a particular sequence
-
-```c
-void
-test_whenTheModeSelectButtonIsPressed_thenTheDisplayModeIsCycled(void)
-{
- // When
- event_modeSelectButtonPressed();
- event_modeSelectButtonPressed();
- event_modeSelectButtonPressed();
-
- // Then
- TEST_ASSERT_EQUAL_PTR((void*)display_setModeToMinimum, fff.call_history[0]);
- TEST_ASSERT_EQUAL_PTR((void*)display_setModeToMaximum, fff.call_history[1]);
- TEST_ASSERT_EQUAL_PTR((void*)display_setModeToAverage, fff.call_history[2]);
-}
-```
-
-## Fake a return value from a function
-
-```c
-void
-test_givenTheDisplayHasAnError_whenTheDeviceIsPoweredOn_thenTheDisplayIsPoweredDown(void)
-{
- // Given
- display_isError_fake.return_val = true;
-
- // When
- event_devicePoweredOn();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_powerDown_fake.call_count);
-}
-```
-
-## Fake a function with a value returned by reference
-
-```c
-void
-test_givenTheUserHasTypedSleep_whenItIsTimeToCheckTheKeyboard_theDisplayIsPoweredDown(void)
-{
- // Given
- char mockedEntry[] = "sleep";
- void return_mock_value(char * entry, int length)
- {
- if (length > strlen(mockedEntry))
- {
- strncpy(entry, mockedEntry, length);
- }
- }
- display_getKeyboardEntry_fake.custom_fake = return_mock_value;
-
- // When
- event_keyboardCheckTimerExpired();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_powerDown_fake.call_count);
-}
-```
-
-## Fake a function with a function pointer parameter
-
-```
-void
-test_givenNewDataIsAvailable_whenTheDisplayHasUpdated_thenTheEventIsComplete(void)
-{
- // A mock function for capturing the callback handler function pointer.
- void(*registeredCallback)(void) = 0;
- void mock_display_updateData(int data, void(*callback)(void))
- {
- //Save the callback function.
- registeredCallback = callback;
- }
- display_updateData_fake.custom_fake = mock_display_updateData;
-
- // Given
- event_newDataAvailable(10);
-
- // When
- if (registeredCallback != 0)
- {
- registeredCallback();
- }
-
- // Then
- TEST_ASSERT_EQUAL(true, eventProcessor_isLastEventComplete());
-}
-```
-
-## Helper macros
-
-For convenience, there are also some helper macros that create new Unity-style asserts:
-
-- `TEST_ASSERT_CALLED(function)`: Asserts that a function was called once.
-- `TEST_ASSERT_NOT_CALLED(function)`: Asserts that a function was never called.
-- `TEST_ASSERT_CALLED_TIMES(times, function)`: Asserts that a function was called a particular number of times.
-- `TEST_ASSERT_CALLED_IN_ORDER(order, function)`: Asserts that a function was called in a particular order.
-
-Here's how you might use one of these instead of simply checking the call_count value:
-
-```c
-void
-test_whenTheDeviceIsReset_thenTheStatusLedIsTurnedOff()
-{
- // When
- event_deviceReset();
-
- // Then
- // This how to directly use fff...
- TEST_ASSERT_EQUAL(1, display_turnOffStatusLed_fake.call_count);
- // ...and this is how to use the helper macro.
- TEST_ASSERT_CALLED(display_turnOffStatusLed);
-}
-```
-
-## Test setup
-
-All of the fake functions, and any fff global state are all reset automatically between each test.
-
-## CMock configuration
-
-Use still use some of the CMock configuration options for setting things like the mock prefix, and for including additional header files in the mock files.
-
-```yaml
-:cmock:
- :mock_prefix: mock_
- :includes:
- -
- :includes_h_pre_orig_header:
- -
- :includes_h_post_orig_header:
- -
- :includes_c_pre_header:
- -
- :includes_c_post_header:
-```
-
-## Running the tests
-
-There are unit and integration tests for the plug-in itself.
-These are run with the default `rake` task.
-The integration test runs the tests for the example project in examples/fff_example.
-For the integration tests to succeed, this repository must be placed in a Ceedling tree in the plugins folder.
-
-## More examples
-
-There is an example project in examples/fff_example.
-It shows how to use the plug-in with some full-size examples.
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/Rakefile b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/Rakefile
deleted file mode 100644
index 2fd9f859f3..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/Rakefile
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'rake'
-require 'rspec/core/rake_task'
-
-desc "Run all rspecs"
-RSpec::Core::RakeTask.new(:spec) do |t|
- t.pattern = Dir.glob('spec/**/*_spec.rb')
- t.rspec_opts = '--format documentation'
- # t.rspec_opts << ' more options'
-end
-
-desc "Run integration test on example"
-task :integration_test do
- chdir("./examples/fff_example") do
- sh "rake clobber"
- sh "rake test:all"
- end
-end
-
-task :default => [:spec, :integration_test]
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml
deleted file mode 100644
index 3253acf69f..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/project.yml
+++ /dev/null
@@ -1,71 +0,0 @@
----
-
-# Notes:
-# Sample project C code is not presently written to produce a release artifact.
-# As such, release build options are disabled.
-# This sample, therefore, only demonstrates running a collection of unit tests.
-
-:project:
- :use_exceptions: FALSE
- :use_test_preprocessor: TRUE
- :use_auxiliary_dependencies: TRUE
- :build_root: build
-# :release_build: TRUE
- :test_file_prefix: test_
-
-#:release_build:
-# :output: MyApp.out
-# :use_assembly: FALSE
-
-:environment:
-
-:extension:
- :executable: .out
-
-:paths:
- :test:
- - +:test/**
- :source:
- - src/**
- :support:
-
-:defines:
- # in order to add common defines:
- # 1) remove the trailing [] from the :common: section
- # 2) add entries to the :common: section (e.g. :test: has TEST defined)
- :common: &common_defines []
- :test:
- - *common_defines
- - TEST
- :test_preprocess:
- - *common_defines
- - TEST
-
-:cmock:
- :mock_prefix: mock_
- :when_no_prototypes: :warn
- :enforce_strict_ordering: TRUE
- :plugins:
- - :ignore
- - :callback
- :treat_as:
- uint8: HEX8
- uint16: HEX16
- uint32: UINT32
- int8: INT8
- bool: UINT8
-
-#:tools:
-# Ceedling defaults to using gcc for compiling, linking, etc.
-# As [:tools] is blank, gcc will be used (so long as it's in your system path)
-# See documentation to configure a given toolchain for use
-
-:plugins:
- :load_paths:
- # This change from the default is for running Ceedling out of another folder.
- - ../../../../plugins
- :enabled:
- - stdout_pretty_tests_report
- - module_generator
- - fake_function_framework
-...
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb
deleted file mode 100644
index e484d5fb73..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/rakefile.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# This change from the default is for running Ceedling out of another folder.
-PROJECT_CEEDLING_ROOT = "../../../.."
-load "#{PROJECT_CEEDLING_ROOT}/lib/ceedling.rb"
-
-Ceedling.load_project
-
-task :default => %w[ test:all release ]
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c
deleted file mode 100644
index 6a403234f4..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "bar.h"
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h
deleted file mode 100644
index febc586530..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/bar.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef bar_H
-#define bar_H
-
-#include "custom_types.h"
-
-void bar_turn_on(void);
-void bar_print_message(const char * message);
-void bar_print_message_formatted(const char * format, ...);
-void bar_numbers(int one, int two, char three);
-void bar_const_test(const char * a, char * const b, const int c);
-custom_t bar_needs_custom_type(void);
-const char * bar_return_const_ptr(int one);
-
-#endif // bar_H
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h
deleted file mode 100644
index b426b32cae..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/custom_types.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef custom_types_H
-#define custom_types_H
-
-typedef int custom_t;
-
-#endif
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c
deleted file mode 100644
index 797d468789..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include
-#include "display.h"
-
-void display_turnOffStatusLed(void)
-{
- printf("Display: Status LED off");
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h
deleted file mode 100644
index def29960cf..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/display.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include
-
-void display_turnOffStatusLed(void);
-void display_turnOnStatusLed(void);
-void display_setVolume(int level);
-void display_setModeToMinimum(void);
-void display_setModeToMaximum(void);
-void display_setModeToAverage(void);
-bool display_isError(void);
-void display_powerDown(void);
-void display_updateData(int data, void(*updateCompleteCallback)(void));
-
-/*
- The entry is returned (up to `length` bytes) in the provided `entry` buffer.
-*/
-void display_getKeyboardEntry(char * entry, int length);
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c
deleted file mode 100644
index 916a92360f..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- This module implements some business logic to test.
-
- Signal events by calling the functions on the module.
-*/
-
-#include
-#include
-#include "event_processor.h"
-#include "display.h"
-
-void event_deviceReset(void)
-{
- //printf ("Device reset\n");
- display_turnOffStatusLed();
-}
-
-void event_volumeKnobMaxed(void)
-{
- display_setVolume(11);
-}
-
-void event_powerReadingUpdate(int powerReading)
-{
- if (powerReading >= 5)
- {
- display_turnOnStatusLed();
- }
-}
-
-void event_modeSelectButtonPressed(void)
-{
- static int mode = 0;
-
- if (mode == 0)
- {
- display_setModeToMinimum();
- mode++;
- }
- else if (mode == 1)
- {
- display_setModeToMaximum();
- mode++;
- }
- else if (mode == 2)
- {
- display_setModeToAverage();
- mode++;
- }
- else
- {
- mode = 0;
- }
-}
-
-void event_devicePoweredOn(void)
-{
- if (display_isError())
- {
- display_powerDown();
- }
-}
-
-void event_keyboardCheckTimerExpired(void)
-{
- char userEntry[100];
-
- display_getKeyboardEntry(userEntry, 100);
-
- if (strcmp(userEntry, "sleep") == 0)
- {
- display_powerDown();
- }
-}
-
-static bool event_lastComplete = false;
-
-/* Function called when the display update is complete. */
-static void displayUpdateComplete(void)
-{
- event_lastComplete = true;
-}
-
-void event_newDataAvailable(int data)
-{
- event_lastComplete = false;
- display_updateData(data, displayUpdateComplete);
-}
-
-bool eventProcessor_isLastEventComplete(void)
-{
- return event_lastComplete;
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h
deleted file mode 100644
index a79e68c569..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/event_processor.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#include
-
-void event_deviceReset(void);
-void event_volumeKnobMaxed(void);
-void event_powerReadingUpdate(int powerReading);
-void event_modeSelectButtonPressed(void);
-void event_devicePoweredOn(void);
-void event_keyboardCheckTimerExpired(void);
-void event_newDataAvailable(int data);
-
-bool eventProcessor_isLastEventComplete(void);
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c
deleted file mode 100644
index c05b1154eb..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "foo.h"
-#include "bar.h"
-#include "subfolder/zzz.h"
-
-void foo_turn_on(void) {
- bar_turn_on();
- zzz_sleep(1, "sleepy");
-}
-
-void foo_print_message(const char * message) {
- bar_print_message(message);
-}
-
-void foo_print_special_message(void) {
- bar_print_message_formatted("The numbers are %d, %d and %d", 1, 2, 3);
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h
deleted file mode 100644
index 3fea699406..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/foo.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef foo_H
-#define foo_H
-
-void foo_turn_on(void);
-void foo_print_message(const char * message);
-void foo_print_special_message(void);
-
-#endif // foo_H
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c
deleted file mode 100644
index 85f370e12d..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "zzz.h"
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h
deleted file mode 100644
index 32c52940d8..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef zzz_H
-#define zzz_H
-
-int zzz_sleep(int time, char * name);
-
-#endif // zzz_H
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c
deleted file mode 100644
index ea59cd3e63..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c
+++ /dev/null
@@ -1,155 +0,0 @@
-#include "unity.h"
-#include "event_processor.h"
-#include "mock_display.h"
-#include
-
-void setUp (void)
-{
-}
-
-void tearDown (void)
-{
-}
-/*
- Test that a single function was called.
-*/
-void
-test_whenTheDeviceIsReset_thenTheStatusLedIsTurnedOff()
-{
- // When
- event_deviceReset();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_turnOffStatusLed_fake.call_count);
- // or use the helper macro...
- TEST_ASSERT_CALLED(display_turnOffStatusLed);
-}
-
-/*
- Test that a single function is NOT called.
-*/
-void
-test_whenThePowerReadingIsLessThan5_thenTheStatusLedIsNotTurnedOn(void)
-{
- // When
- event_powerReadingUpdate(4);
-
- // Then
- TEST_ASSERT_EQUAL(0, display_turnOnStatusLed_fake.call_count);
- // or use the helper macro...
- TEST_ASSERT_NOT_CALLED(display_turnOffStatusLed);
-}
-
-/*
- Test that a single function was called with the correct argument.
-*/
-void
-test_whenTheVolumeKnobIsMaxed_thenVolumeDisplayIsSetTo11(void)
-{
- // When
- event_volumeKnobMaxed();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_setVolume_fake.call_count);
- // or use the helper macro...
- TEST_ASSERT_CALLED(display_setVolume);
- TEST_ASSERT_EQUAL(11, display_setVolume_fake.arg0_val);
-}
-
-/*
- Test a sequence of calls.
-*/
-
-void
-test_whenTheModeSelectButtonIsPressed_thenTheDisplayModeIsCycled(void)
-{
- // When
- event_modeSelectButtonPressed();
- event_modeSelectButtonPressed();
- event_modeSelectButtonPressed();
-
- // Then
- TEST_ASSERT_EQUAL_PTR((void *)display_setModeToMinimum, fff.call_history[0]);
- TEST_ASSERT_EQUAL_PTR((void *)display_setModeToMaximum, fff.call_history[1]);
- TEST_ASSERT_EQUAL_PTR((void *)display_setModeToAverage, fff.call_history[2]);
- // or use the helper macros...
- TEST_ASSERT_CALLED_IN_ORDER(0, display_setModeToMinimum);
- TEST_ASSERT_CALLED_IN_ORDER(1, display_setModeToMaximum);
- TEST_ASSERT_CALLED_IN_ORDER(2, display_setModeToAverage);
-}
-
-/*
- Mock a return value from a function.
-*/
-void
-test_givenTheDisplayHasAnError_whenTheDeviceIsPoweredOn_thenTheDisplayIsPoweredDown(void)
-{
- // Given
- display_isError_fake.return_val = true;
-
- // When
- event_devicePoweredOn();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_powerDown_fake.call_count);
- // or use the helper macro...
- TEST_ASSERT_CALLED(display_powerDown);
-}
-
-/*
- Mock a sequence of calls with return values.
-*/
-
-/*
- Mocking a function with a value returned by reference.
-*/
-void
-test_givenTheUserHasTypedSleep_whenItIsTimeToCheckTheKeyboard_theDisplayIsPoweredDown(void)
-{
- // Given
- char mockedEntry[] = "sleep";
- void return_mock_value(char * entry, int length)
- {
- if (length > strlen(mockedEntry))
- {
- strncpy(entry, mockedEntry, length);
- }
- }
- display_getKeyboardEntry_fake.custom_fake = return_mock_value;
-
- // When
- event_keyboardCheckTimerExpired();
-
- // Then
- TEST_ASSERT_EQUAL(1, display_powerDown_fake.call_count);
- // or use the helper macro...
- TEST_ASSERT_CALLED(display_powerDown);
-}
-
-/*
- Mock a function with a function pointer parameter.
-*/
-void
-test_givenNewDataIsAvailable_whenTheDisplayHasUpdated_thenTheEventIsComplete(void)
-{
- // A mock function for capturing the callback handler function pointer.
- void(*registeredCallback)(void) = 0;
- void mock_display_updateData(int data, void(*callback)(void))
- {
- //Save the callback function.
- registeredCallback = callback;
- }
- display_updateData_fake.custom_fake = mock_display_updateData;
-
- // Given
- event_newDataAvailable(10);
-
- // When
- if (registeredCallback != 0)
- {
- registeredCallback();
- }
-
- // Then
- TEST_ASSERT_EQUAL(true, eventProcessor_isLastEventComplete());
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c
deleted file mode 100644
index 12dd61a106..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/examples/fff_example/test/test_foo.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "unity.h"
-#include "foo.h"
-#include "mock_bar.h"
-#include "mock_zzz.h"
-
-void setUp(void)
-{
-}
-
-void tearDown(void)
-{
-}
-
-void test_foo(void)
-{
- //When
- foo_turn_on();
-
- //Then
- TEST_ASSERT_EQUAL(1, bar_turn_on_fake.call_count);
- TEST_ASSERT_EQUAL(1, zzz_sleep_fake.call_count);
- TEST_ASSERT_EQUAL_STRING("sleepy", zzz_sleep_fake.arg1_val);
-}
-
-void test_foo_again(void)
-{
- //When
- foo_turn_on();
-
- //Then
- TEST_ASSERT_EQUAL(1, bar_turn_on_fake.call_count);
-}
-
-void test_foo_mock_with_const(void)
-{
- foo_print_message("123");
-
- TEST_ASSERT_EQUAL(1, bar_print_message_fake.call_count);
- TEST_ASSERT_EQUAL_STRING("123", bar_print_message_fake.arg0_val);
-}
-
-void test_foo_mock_with_variable_args(void)
-{
- foo_print_special_message();
- TEST_ASSERT_EQUAL(1, bar_print_message_formatted_fake.call_count);
- TEST_ASSERT_EQUAL_STRING("The numbers are %d, %d and %d", bar_print_message_formatted_fake.arg0_val);
-}
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb
deleted file mode 100644
index 8fbb1e9b56..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fake_function_framework.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require 'ceedling/plugin'
-require 'fff_mock_generator'
-
-class FakeFunctionFramework < Plugin
-
- # Set up Ceedling to use this plugin.
- def setup
- # Get the location of this plugin.
- @plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
- puts "Using fake function framework (fff)..."
-
- # Switch out the cmock_builder with our own.
- @ceedling[:cmock_builder].cmock = FffMockGeneratorForCMock.new(@ceedling[:setupinator].config_hash[:cmock])
-
- # Add the path to fff.h to the include paths.
- COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << "#{@plugin_root}/vendor/fff"
- COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR << "#{@plugin_root}/src"
- end
-
- def post_runner_generate(arg_hash)
- # After the test runner file has been created, append the FFF globals
- # definition to the end of the test runner. These globals will be shared by
- # all mocks linked into the test.
- File.open(arg_hash[:runner_file], 'a') do |f|
- f.puts
- f.puts "//=======Definitions of FFF variables====="
- f.puts %{#include "fff.h"}
- f.puts "DEFINE_FFF_GLOBALS;"
- end
- end
-
-end # class FakeFunctionFramework
-
-class FffMockGeneratorForCMock
-
- def initialize(options=nil)
- @cm_config = CMockConfig.new(options)
- @cm_parser = CMockHeaderParser.new(@cm_config)
- @silent = (@cm_config.verbosity < 2)
-
- # These are the additional files to include in the mock files.
- @includes_h_pre_orig_header = (@cm_config.includes || @cm_config.includes_h_pre_orig_header || []).map{|h| h =~ / ? h : "\"#{h}\""}
- @includes_h_post_orig_header = (@cm_config.includes_h_post_orig_header || []).map{|h| h =~ / ? h : "\"#{h}\""}
- @includes_c_pre_header = (@cm_config.includes_c_pre_header || []).map{|h| h =~ / ? h : "\"#{h}\""}
- @includes_c_post_header = (@cm_config.includes_c_post_header || []).map{|h| h =~ / ? h : "\"#{h}\""}
- end
-
- def setup_mocks(files)
- [files].flatten.each do |src|
- generate_mock (src)
- end
- end
-
- def generate_mock (header_file_to_mock)
- module_name = File.basename(header_file_to_mock, '.h')
- puts "Creating mock for #{module_name}..." unless @silent
- mock_name = @cm_config.mock_prefix + module_name + @cm_config.mock_suffix
- mock_path = @cm_config.mock_path
- if @cm_config.subdir
- # If a subdirectory has been configured, append it to the mock path.
- mock_path = "#{mock_path}/#{@cm_config.subdir}"
- end
- full_path_for_mock = "#{mock_path}/#{mock_name}"
-
- # Parse the header file so we know what to mock.
- parsed_header = @cm_parser.parse(module_name, File.read(header_file_to_mock))
-
- # Create the directory if it doesn't exist.
- mkdir_p full_path_for_mock.pathmap("%d")
-
- # Generate the mock header file.
- puts "Creating mock: #{full_path_for_mock}.h"
-
- # Create the mock header.
- File.open("#{full_path_for_mock}.h", 'w') do |f|
- f.write(FffMockGenerator.create_mock_header(module_name, mock_name, parsed_header,
- @includes_h_pre_orig_header, @includes_h_post_orig_header))
- end
-
- # Create the mock source file.
- File.open("#{full_path_for_mock}.c", 'w') do |f|
- f.write(FffMockGenerator.create_mock_source(mock_name, parsed_header,
- @includes_c_pre_orig_header, @includes_c_post_orig_header))
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb
deleted file mode 100644
index d439a8d7fc..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/lib/fff_mock_generator.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-# Creates mock files from parsed header files that can be linked into applications.
-# The mocks created are compatible with CMock for use with Ceedling.
-
-class FffMockGenerator
-
- def self.create_mock_header(module_name, mock_name, parsed_header, pre_includes=nil,
- post_includes=nil)
- output = StringIO.new
- write_opening_include_guard(mock_name, output)
- output.puts
- write_extra_includes(pre_includes, output)
- write_header_includes(module_name, output)
- write_extra_includes(post_includes, output)
- output.puts
- write_typedefs(parsed_header, output)
- output.puts
- write_function_declarations(parsed_header, output)
- output.puts
- write_control_function_prototypes(mock_name, output)
- output.puts
- write_closing_include_guard(mock_name, output)
- output.string
- end
-
- def self.create_mock_source (mock_name, parsed_header, pre_includes=nil,
- post_includes=nil)
- output = StringIO.new
- write_extra_includes(pre_includes, output)
- write_source_includes(mock_name, output)
- write_extra_includes(post_includes, output)
- output.puts
- write_function_definitions(parsed_header, output)
- output.puts
- write_control_function_definitions(mock_name, parsed_header, output)
- output.string
- end
-
- private
-
-# Header file generation functions.
-
- def self.write_opening_include_guard(mock_name, output)
- output.puts "#ifndef #{mock_name}_H"
- output.puts "#define #{mock_name}_H"
- end
-
- def self.write_header_includes(module_name, output)
- output.puts %{#include "fff.h"}
- output.puts %{#include "fff_unity_helper.h"}
- output.puts %{#include "#{module_name}.h"}
- end
-
- def self.write_typedefs(parsed_header, output)
- return unless parsed_header.key?(:typedefs)
- parsed_header[:typedefs].each do |typedef|
- output.puts typedef
- end
- end
-
- def self.write_function_declarations(parsed_header, output)
- write_function_macros("DECLARE", parsed_header, output)
- end
-
-
- def self.write_control_function_prototypes(mock_name, output)
- output.puts "void #{mock_name}_Init(void);"
- output.puts "void #{mock_name}_Verify(void);"
- output.puts "void #{mock_name}_Destroy(void);"
- end
-
- def self.write_closing_include_guard(mock_name, output)
- output.puts "#endif // #{mock_name}_H"
- end
-
-# Source file generation functions.
-
- def self.write_source_includes (mock_name, output)
- output.puts "#include "
- output.puts %{#include "fff.h"}
- output.puts %{#include "#{mock_name}.h"}
- end
-
- def self.write_function_definitions(parsed_header, output)
- write_function_macros("DEFINE", parsed_header, output)
- end
-
- def self.write_control_function_definitions(mock_name, parsed_header, output)
- output.puts "void #{mock_name}_Init(void)"
- output.puts "{"
- # In the init function, reset the FFF globals. These are used for things
- # like the call history.
- output.puts " FFF_RESET_HISTORY();"
-
- # Also, reset all of the fakes.
- if parsed_header[:functions]
- parsed_header[:functions].each do |function|
- output.puts " RESET_FAKE(#{function[:name]})"
- end
- end
- output.puts "}"
- output.puts "void #{mock_name}_Verify(void)"
- output.puts "{"
- output.puts "}"
- output.puts "void #{mock_name}_Destroy(void)"
- output.puts "{"
- output.puts "}"
- end
-
-# Shared functions.
-
- def self.write_extra_includes(includes, output)
- if includes
- includes.each {|inc| output.puts "#include #{inc}\n"}
- end
- end
-
- def self.write_function_macros(macro_type, parsed_header, output)
- return unless parsed_header.key?(:functions)
- parsed_header[:functions].each do |function|
- name = function[:name]
- return_type = function[:return][:type]
- if function.has_key? :modifier
- # Prepend any modifier. If there isn't one, trim any leading whitespace.
- return_type = "#{function[:modifier]} #{return_type}".lstrip
- end
- arg_count = function[:args].size
-
- # Check for variable arguments.
- var_arg_suffix = ""
- if function[:var_arg]
- # If there are are variable arguments, then we need to add this argument
- # to the count, update the suffix that will get added to the macro.
- arg_count += 1
- var_arg_suffix = "_VARARG"
- end
-
- # Generate the correct macro.
- if return_type == 'void'
- output.print "#{macro_type}_FAKE_VOID_FUNC#{arg_count}#{var_arg_suffix}(#{name}"
- else
- output.print "#{macro_type}_FAKE_VALUE_FUNC#{arg_count}#{var_arg_suffix}(#{return_type}, #{name}"
- end
-
- # Append each argument type.
- function[:args].each do |arg|
- output.print ", "
- if arg[:const?]
- output.print "const "
- end
- output.print "#{arg[:type]}"
- end
-
- # If this argument list ends with a variable argument, add it here at the end.
- if function[:var_arg]
- output.print ", ..."
- end
-
- # Close the declaration.
- output.puts ");"
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb
deleted file mode 100644
index 09d3175510..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb
+++ /dev/null
@@ -1,304 +0,0 @@
-require 'stringio'
-require 'fff_mock_generator.rb'
-require 'header_generator.rb'
-
-# Test the contents of the .h file created for the mock.
-describe "FffMockGenerator.create_mock_header" do
-
- context "when there is nothing to mock," do
- let(:mock_header) {
- parsed_header = {}
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated header file starts with an opening include guard" do
- expect(mock_header).to start_with(
- "#ifndef mock_display_H\n" +
- "#define mock_display_H")
- end
- it "then the generated file ends with a closing include guard" do
- expect(mock_header).to end_with(
- "#endif // mock_display_H\n")
- end
- it "then the generated file includes the fff header" do
- expect(mock_header).to include(
- %{#include "fff.h"\n})
- end
- it "then the generated file has a prototype for the init function" do
- expect(mock_header).to include(
- "void mock_display_Init(void);")
- end
- it "then the generated file has a prototype for the verify function" do
- expect(mock_header).to include(
- "void mock_display_Verify(void);")
- end
- it "then the generated file has a prototype for the destroy function" do
- expect(mock_header).to include(
- "void mock_display_Destroy(void);")
- end
- end
-
- context "when there is a function with no args and a void return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'display_turnOffStatusLed', :return_type => 'void'}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated header file starts with an opening include guard" do
- expect(mock_header).to start_with(
- "#ifndef mock_display_H\n" +
- "#define mock_display_H")
- end
- it "then the generated header file contains a fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC0(display_turnOffStatusLed);"
- )
- end
- it "then the generated file ends with a closing include guard" do
- expect(mock_header).to end_with(
- "#endif // mock_display_H\n")
- end
- end
-
- context "when there is a function with no args and a bool return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'display_isError', :return_type => 'bool'}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC0(bool, display_isError);"
- )
- end
- end
-
- context "when there is a function with no args and an int return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'display_isError', :return_type => 'int'}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC0(int, display_isError);"
- )
- end
- end
-
- context "when there is a function with args and a void return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'display_setVolume', :return_type => 'void', :args => ['int']}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC1(display_setVolume, int);"
- )
- end
- end
-
- context "when there is a function with args and a value return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'a_function', :return_type => 'int', :args => ['char *']}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the fake function declaration" do
- expect(mock_header).to include(
- "FAKE_VALUE_FUNC1(int, a_function, char *);"
- )
- end
- end
-
- context "when there is a function with many args and a void return," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [{:name => 'a_function', :return_type => 'void',
- :args => ['int', 'char *', 'int', 'int', 'bool', 'applesauce']}])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC6(a_function, int, char *, int, int, bool, applesauce);"
- )
- end
- end
-
- context "when there are multiple functions," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- [ {:name => 'a_function', :return_type => 'int', :args => ['char *']},
- {:name => 'another_function', :return_type => 'void'},
- {:name => 'three', :return_type => 'bool', :args => ['float', 'int']}
- ])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the first fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC1(int, a_function, char *);"
- )
- end
- it "then the generated file contains the second fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC0(another_function);"
- )
- end
- it "then the generated file contains the third fake function declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC2(bool, three, float, int);"
- )
- end
- end
-
- context "when there is a typedef," do
- let(:mock_header) {
- parsed_header = create_cmock_style_parsed_header(
- nil, ["typedef void (*displayCompleteCallback) (void);"])
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the typedef" do
- expect(mock_header).to include(
- "typedef void (*displayCompleteCallback) (void);"
- )
- end
- end
-
- context "when there is a void function with variable arguments" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "function_with_var_args",
- :return => {:type => "void"},
- :var_arg => "...",
- :args => [{:type => 'char *'}]
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the vararg declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC2_VARARG(function_with_var_args, char *, ...)"
- )
- end
- end
-
- context "when there is a function with a return value and variable arguments" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "function_with_var_args",
- :return => {:type => "int"},
- :var_arg => "...",
- :args => [{:type => 'char *'}]
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the vararg declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC2_VARARG(int, function_with_var_args, char *, ...)"
- )
- end
- end
-
- context "when there is a void function with variable arguments and " +
- "additional arguments" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "function_with_var_args",
- :return => {:type => "void"},
- :var_arg => "...",
- :args => [{:type => 'char *'}, {:type => 'int'}]
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the vararg declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC3_VARARG(function_with_var_args, char *, int, ...)"
- )
- end
- end
-
- context "when there is a function with a pointer to a const value" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "const_test_function",
- :return => {:type => "void"},
- :args => [{:type => "char *", :name => "a", :ptr? => false, :const? => true},
- {:type => "char *", :name => "b", :ptr? => false, :const? => false}]
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the correct const argument in the declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VOID_FUNC2(const_test_function, const char *, char *)"
- )
- end
- end
-
- context "when there is a function that returns a const pointer" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "return_const_pointer_test_function",
- :modifier => "const",
- :return => {:type => "char *" },
- :args => [{:type => "int", :name => "a"}]
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the correct const return value in the declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC1(const char *, return_const_pointer_test_function, int)"
- )
- end
- end
-
- context "when there is a function that returns a const int" do
- let(:mock_header){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "return_const_int_test_function",
- :modifier => "const",
- :return => {:type => "int" },
- :args => []
- }]
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header)
- }
- it "then the generated file contains the correct const return value in the declaration" do
- expect(mock_header).to include(
- "DECLARE_FAKE_VALUE_FUNC0(const int, return_const_int_test_function)"
- )
- end
- end
-
- context "when there are pre-includes" do
- let(:mock_header) {
- parsed_header = {}
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header,
- [%{"another_header.h"}])
- }
- it "then they are included before the other files" do
- expect(mock_header).to include(
- %{#include "another_header.h"\n} +
- %{#include "fff.h"}
- )
- end
- end
-
- context "when there are post-includes" do
- let(:mock_header) {
- parsed_header = {}
- FffMockGenerator.create_mock_header("display", "mock_display", parsed_header,
- nil, [%{"another_header.h"}])
- }
- it "then they are included after the other files" do
- expect(mock_header).to include(
- %{#include "display.h"\n} +
- %{#include "another_header.h"\n}
- )
- end
- end
-
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb
deleted file mode 100644
index 7b7f04f588..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-require 'stringio'
-require 'fff_mock_generator.rb'
-
-# Test the contents of the .c file created for the mock.
-describe "FffMockGenerator.create_mock_source" do
-
- context "when there is nothing to mock," do
- let(:mock_source) {
- parsed_header = {}
- FffMockGenerator.create_mock_source("mock_my_module", parsed_header)
- }
- it "then the generated file includes the fff header" do
- expect(mock_source).to include(
- # fff.h also requires including string.h
- %{#include \n} +
- %{#include "fff.h"}
- )
- end
- it "then the generated file includes the mock header" do
- expect(mock_source).to include(
- %{#include "mock_my_module.h"\n}
- )
- end
- it "then the generated file defines the init function" do
- expect(mock_source).to include(
- "void mock_my_module_Init(void)\n" +
- "{\n" +
- " FFF_RESET_HISTORY();\n" +
- "}"
- )
- end
- it "then the generated file defines the verify function" do
- expect(mock_source).to include(
- "void mock_my_module_Verify(void)\n" +
- "{\n" +
- "}"
- )
- end
- it "then the generated file defines the destroy function" do
- expect(mock_source).to include(
- "void mock_my_module_Destroy(void)\n" +
- "{\n" +
- "}"
- )
- end
- end
-
- context "when there are multiple functions," do
- let(:mock_source) {
- parsed_header = create_cmock_style_parsed_header(
- [ {:name => 'a_function', :return_type => 'int', :args => ['char *']},
- {:name => 'another_function', :return_type => 'void'},
- {:name => 'three', :return_type => 'bool', :args => ['float', 'int']}
- ])
- FffMockGenerator.create_mock_source("mock_display", parsed_header)
- }
- it "then the generated file contains the first fake function definition" do
- expect(mock_source).to include(
- "DEFINE_FAKE_VALUE_FUNC1(int, a_function, char *);"
- )
- end
- it "then the generated file contains the second fake function definition" do
- expect(mock_source).to include(
- "DEFINE_FAKE_VOID_FUNC0(another_function);"
- )
- end
- it "then the generated file contains the third fake function definition" do
- expect(mock_source).to include(
- "DEFINE_FAKE_VALUE_FUNC2(bool, three, float, int);"
- )
- end
- it "then the init function resets all of the fakes" do
- expect(mock_source).to include(
- "void mock_display_Init(void)\n" +
- "{\n" +
- " FFF_RESET_HISTORY();\n" +
- " RESET_FAKE(a_function)\n" +
- " RESET_FAKE(another_function)\n" +
- " RESET_FAKE(three)\n" +
- "}"
- )
- end
- end
-
- context "when there is a void function with variable arguments and " +
- "additional arguments" do
- let(:mock_source){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "function_with_var_args",
- :return => {:type => "void"},
- :var_arg => "...",
- :args => [{:type => 'char *'}, {:type => 'int'}]
- }]
- FffMockGenerator.create_mock_source("mock_display", parsed_header)
- }
- it "then the generated file contains the vararg definition" do
- expect(mock_source).to include(
- "DEFINE_FAKE_VOID_FUNC3_VARARG(function_with_var_args, char *, int, ...)"
- )
- end
- end
-
- context "when there is a function with a pointer to a const value" do
- let(:mock_source){
- parsed_header = {}
- parsed_header[:functions] = [{
- :name => "const_test_function",
- :return => {:type => "void"},
- :args => [{:type => "char *", :name => "a", :ptr? => false, :const? => true},
- {:type => "char *", :name => "b", :ptr? => false, :const? => false}]
- }]
- FffMockGenerator.create_mock_source("mock_display", parsed_header)
- }
- it "then the generated file contains the correct const argument in the declaration" do
- expect(mock_source).to include(
- "DEFINE_FAKE_VOID_FUNC2(const_test_function, const char *, char *)"
- )
- end
- end
-
- context "when there are pre-includes" do
- let(:mock_source) {
- parsed_source = {}
- FffMockGenerator.create_mock_source("mock_display", parsed_source,
- [%{"another_header.h"}])
- }
- it "then they are included before the other files" do
- expect(mock_source).to include(
- %{#include "another_header.h"\n} +
- %{#include }
- )
- end
- end
-
- context "when there are post-includes" do
- let(:mock_source) {
- parsed_source = {}
- FffMockGenerator.create_mock_source("mock_display", parsed_source,
- nil, [%{"another_header.h"}])
- }
- it "then they are included before the other files" do
- expect(mock_source).to include(
- %{#include "mock_display.h"\n} +
- %{#include "another_header.h"\n}
- )
- end
- end
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb
deleted file mode 100644
index 3b6fa71209..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/header_generator.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# Create a CMock-style parsed header hash. This the type of hash created by
-# CMock when parsing header files for automock generation. It contains all of
-# includes, typedefs and functions (with return types and arguments) parsed from
-# the header file.
-def create_cmock_style_parsed_header(functions, typedefs = nil)
- parsed_header = {
- :includes => nil,
- :functions => [],
- :typedefs => []
- }
-
- # Add the typedefs.
- if typedefs
- typedefs.each do |typedef|
- parsed_header[:typedefs] << typedef
- end
- end
-
- # Add the functions.
- if functions
- functions.each do |function|
- # Build the array of arguments.
- args = []
- if function.key?(:args)
- function[:args].each do |arg|
- args << {
- :type => arg
- }
- end
- end
- parsed_header[:functions] << {
- :name => function[:name],
- :modifier => "",
- :return => {
- :type => function[:return_type],
- :name => "cmock_to_return",
- :ptr? => false,
- :const? => false,
- :str => "void cmock_to_return",
- :void? => true
- },
- :var_arg => nil,
- :args_string => "void",
- :args => args,
- :args_call => "",
- :contains_ptr? => false
- }
- end
- end
- parsed_header
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb
deleted file mode 100644
index 25dc80ace8..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/spec/spec_helper.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# This file was generated by the `rspec --init` command. Conventionally, all
-# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
-# The generated `.rspec` file contains `--require spec_helper` which will cause
-# this file to always be loaded, without a need to explicitly require it in any
-# files.
-#
-# Given that it is always loaded, you are encouraged to keep this file as
-# light-weight as possible. Requiring heavyweight dependencies from this file
-# will add to the boot time of your test suite on EVERY test run, even for an
-# individual file that may not need all of that loaded. Instead, consider making
-# a separate helper file that requires the additional dependencies and performs
-# the additional setup, and require it from the spec files that actually need
-# it.
-#
-# The `.rspec` file also contains a few flags that are not defaults but that
-# users commonly want.
-#
-# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
-RSpec.configure do |config|
- # rspec-expectations config goes here. You can use an alternate
- # assertion/expectation library such as wrong or the stdlib/minitest
- # assertions if you prefer.
- config.expect_with :rspec do |expectations|
- # This option will default to `true` in RSpec 4. It makes the `description`
- # and `failure_message` of custom matchers include text for helper methods
- # defined using `chain`, e.g.:
- # be_bigger_than(2).and_smaller_than(4).description
- # # => "be bigger than 2 and smaller than 4"
- # ...rather than:
- # # => "be bigger than 2"
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
- end
-
- # rspec-mocks config goes here. You can use an alternate test double
- # library (such as bogus or mocha) by changing the `mock_with` option here.
- config.mock_with :rspec do |mocks|
- # Prevents you from mocking or stubbing a method that does not exist on
- # a real object. This is generally recommended, and will default to
- # `true` in RSpec 4.
- mocks.verify_partial_doubles = true
- end
-
-# The settings below are suggested to provide a good initial experience
-# with RSpec, but feel free to customize to your heart's content.
-=begin
- # These two settings work together to allow you to limit a spec run
- # to individual examples or groups you care about by tagging them with
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
- # get run.
- config.filter_run :focus
- config.run_all_when_everything_filtered = true
-
- # Allows RSpec to persist some state between runs in order to support
- # the `--only-failures` and `--next-failure` CLI options. We recommend
- # you configure your source control system to ignore this file.
- config.example_status_persistence_file_path = "spec/examples.txt"
-
- # Limits the available syntax to the non-monkey patched syntax that is
- # recommended. For more details, see:
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
- config.disable_monkey_patching!
-
- # This setting enables warnings. It's recommended, but in some cases may
- # be too noisy due to issues in dependencies.
- config.warnings = true
-
- # Many RSpec users commonly either run the entire suite or an individual
- # file, and it's useful to allow more verbose output when running an
- # individual spec file.
- if config.files_to_run.one?
- # Use the documentation formatter for detailed output,
- # unless a formatter has already been configured
- # (e.g. via a command-line flag).
- config.default_formatter = 'doc'
- end
-
- # Print the 10 slowest examples and example groups at the
- # end of the spec run, to help surface which specs are running
- # particularly slow.
- config.profile_examples = 10
-
- # Run specs in random order to surface order dependencies. If you find an
- # order dependency and want to debug it, you can fix the order by providing
- # the seed, which is printed after each run.
- # --seed 1234
- config.order = :random
-
- # Seed global randomization in this process using the `--seed` CLI option.
- # Setting this allows you to use `--seed` to deterministically reproduce
- # test failures related to randomization by passing the same `--seed` value
- # as the one that triggered the failure.
- Kernel.srand config.seed
-=end
-end
diff --git a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h b/test/unit-test/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h
deleted file mode 100644
index 970ecbb35a..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/fake_function_framework/src/fff_unity_helper.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef fff_unity_helper_H
-#define fff_unity_helper_H
-
-/*
- FFF helper macros for Unity.
-*/
-
-/*
- Fail if the function was not called the expected number of times.
-*/
-#define TEST_ASSERT_CALLED_TIMES(times_, function_) \
- TEST_ASSERT_EQUAL_MESSAGE(times_, \
- function_ ## _fake.call_count, \
- "Function " #function_ " called the incorrect number of times.")
-/*
- Fail if the function was not called exactly once.
-*/
-#define TEST_ASSERT_CALLED(function_) TEST_ASSERT_CALLED_TIMES(1, function_)
-
-/*
- Fail if the function was called 1 or more times.
-*/
-#define TEST_ASSERT_NOT_CALLED(function_) TEST_ASSERT_CALLED_TIMES(0, function_)
-
-/*
- Fail if the function was not called in this particular order.
-*/
-#define TEST_ASSERT_CALLED_IN_ORDER(order_, function_) \
- TEST_ASSERT_EQUAL_PTR_MESSAGE((void *) function_, \
- fff.call_history[order_], \
- "Function " #function_ " not called in order " #order_ )
-
-#endif
diff --git a/test/unit-test/vendor/ceedling/plugins/gcov/README.md b/test/unit-test/vendor/ceedling/plugins/gcov/README.md
deleted file mode 100644
index b144e3b74e..0000000000
--- a/test/unit-test/vendor/ceedling/plugins/gcov/README.md
+++ /dev/null
@@ -1,433 +0,0 @@
-ceedling-gcov
-=============
-
-# Plugin Overview
-
-Plugin for integrating GNU GCov code coverage tool into Ceedling projects.
-Currently only designed for the gcov command (like LCOV for example). In the
-future we could configure this to work with other code coverage tools.
-
-This plugin currently uses [gcovr](https://www.gcovr.com/) and / or
-[ReportGenerator](https://danielpalme.github.io/ReportGenerator/)
-as utilities to generate HTML, XML, JSON, or Text reports. The normal gcov
-plugin _must_ be run first for these reports to generate.
-
-## Installation
-
-gcovr can be installed via pip like so:
-
-```sh
-pip install gcovr
-```
-
-ReportGenerator can be installed via .NET Core like so:
-
-```sh
-dotnet tool install -g dotnet-reportgenerator-globaltool
-```
-
-It is not required to install both `gcovr` and `ReportGenerator`. Either utility
-may be installed to create reports.
-
-## Configuration
-
-The gcov plugin supports configuration options via your `project.yml` provided
-by Ceedling.
-
-### Utilities
-
-Gcovr and / or ReportGenerator may be enabled to create coverage reports.
-
-```yaml
-:gcov:
- :utilities:
- - gcovr # Use gcovr to create the specified reports (default).
- - ReportGenerator # Use ReportGenerator to create the specified reports.
-```
-
-### Reports
-
-Various reports are available and may be enabled with the following
-configuration item. See the specific report sections in this README
-for additional options and information. All generated reports will be found in `build/artifacts/gcov`.
-
-```yaml
-:gcov:
- # Specify one or more reports to generate.
- # Defaults to HtmlBasic.
- :reports:
- # Make an HTML summary report.
- # Supported utilities: gcovr, ReportGenerator
- - HtmlBasic
-
- # Make an HTML report with line by line coverage of each source file.
- # Supported utilities: gcovr, ReportGenerator
- - HtmlDetailed
-
- # Make a Text report, which may be output to the console with gcovr or a file in both gcovr and ReportGenerator.
- # Supported utilities: gcovr, ReportGenerator
- - Text
-
- # Make a Cobertura XML report.
- # Supported utilities: gcovr, ReportGenerator
- - Cobertura
-
- # Make a SonarQube XML report.
- # Supported utilities: gcovr, ReportGenerator
- - SonarQube
-
- # Make a JSON report.
- # Supported utilities: gcovr
- - JSON
-
- # Make a detailed HTML report with CSS and JavaScript included in every HTML page. Useful for build servers.
- # Supported utilities: ReportGenerator
- - HtmlInline
-
- # Make a detailed HTML report with a light theme and CSS and JavaScript included in every HTML page for Azure DevOps.
- # Supported utilities: ReportGenerator
- - HtmlInlineAzure
-
- # Make a detailed HTML report with a dark theme and CSS and JavaScript included in every HTML page for Azure DevOps.
- # Supported utilities: ReportGenerator
- - HtmlInlineAzureDark
-
- # Make a single HTML file containing a chart with historic coverage information.
- # Supported utilities: ReportGenerator
- - HtmlChart
-
- # Make a detailed HTML report in a single file.
- # Supported utilities: ReportGenerator
- - MHtml
-
- # Make SVG and PNG files that show line and / or branch coverage information.
- # Supported utilities: ReportGenerator
- - Badges
-
- # Make a single CSV file containing coverage information per file.
- # Supported utilities: ReportGenerator
- - CsvSummary
-
- # Make a single TEX file containing a summary for all files and detailed reports for each files.
- # Supported utilities: ReportGenerator
- - Latex
-
- # Make a single TEX file containing a summary for all files.
- # Supported utilities: ReportGenerator
- - LatexSummary
-
- # Make a single PNG file containing a chart with historic coverage information.
- # Supported utilities: ReportGenerator
- - PngChart
-
- # Command line output interpreted by TeamCity.
- # Supported utilities: ReportGenerator
- - TeamCitySummary
-
- # Make a text file in lcov format.
- # Supported utilities: ReportGenerator
- - lcov
-
- # Make a XML file containing a summary for all classes and detailed reports for each class.
- # Supported utilities: ReportGenerator
- - Xml
-
- # Make a single XML file containing a summary for all files.
- # Supported utilities: ReportGenerator
- - XmlSummary
-```
-
-### Gcovr HTML Reports
-
-Generation of Gcovr HTML reports may be modified with the following configuration items.
-
-```yaml
-:gcov:
- # Set to 'true' to enable HTML reports or set to 'false' to disable.
- # Defaults to enabled. (gcovr --html)
- # Deprecated - See the :reports: configuration option.
- :html_report: [true|false]
-
- # Gcovr supports generating two types of HTML reports. Use 'basic' to create
- # an HTML report with only the overall file information. Use 'detailed' to create
- # an HTML report with line by line coverage of each source file.
- # Defaults to 'basic'. Set to 'detailed' for (gcovr --html-details).
- # Deprecated - See the :reports: configuration option.
- :html_report_type: [basic|detailed]
-
-
- :gcovr:
- # HTML report filename.
- :html_artifact_filename: