diff --git a/.gitignore b/.gitignore index 694bd78..c2474ed 100644 --- a/.gitignore +++ b/.gitignore @@ -60,4 +60,4 @@ compile_commands.json docs/ -tests/sim/test_sim +tests/core/test_core diff --git a/README.md b/README.md index aac40a9..5e0e3d0 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ platforms. | Platform | Board | Drivers | |----------|-------|---------| -| STM32WB55 | Nucleo | RCC (PLL + MSI), GPIO, UART, LPUART, SPI, Flash, SysTick | -| PIC32CZ | Curiosity Ultra | Clock (dual PLL), GPIO, UART, Supply (SUPC), SysTick | +| STM32WB55 | Nucleo | RCC (PLL + MSI), GPIO, UART, LPUART, SPI, Flash, RNG, SysTick | +| PIC32CZ | Curiosity Ultra | Clock (dual PLL), GPIO, UART, Flash, Supply (SUPC), SysTick | ## Architecture @@ -48,6 +48,7 @@ whal_Gpio g_whalGpio = { | Flash | `wolfHAL/flash/flash.h` | Init, Deinit, Lock, Unlock, Read, Write, Erase | | SPI | `wolfHAL/spi/spi.h` | Init, Deinit, SendRecv, Send, Recv | | Timer | `wolfHAL/timer/timer.h` | Init, Deinit, Start, Stop, Reset | +| RNG | `wolfHAL/rng/rng.h` | Init, Deinit, Generate | | Supply | `wolfHAL/supply/supply.h` | Init, Deinit, Enable, Disable | Utilities: `wolfHAL/regmap.h` (masked register access), `wolfHAL/bitops.h` @@ -61,13 +62,15 @@ wolfHAL/ Public headers (API surface) platform/st/ STM32WB55 device macros platform/microchip/ PIC32CZ device macros src/ Driver implementations (generic + platform) +boards/ + stm32wb55xx_nucleo/ STM32WB55 Nucleo board support + pic32cz_curiosity_ultra/ PIC32CZ Curiosity Ultra board support examples/ - stm32wb/ STM32WB55 Nucleo board bring-up and UART echo - pic32cz/ PIC32CZ Curiosity Ultra board bring-up + blinky/ LED blink + UART echo (multi-board) tests/ test.h Minimal test framework (no libc dependency) - sim/ Host-compiled tests (bitops, dispatch validation) - hw/stm32wb/ On-target tests (clock, GPIO, flash, timer) + core/ Host-compiled tests (bitops, dispatch validation) + clock/ gpio/ flash/ ... On-target per-module tests ``` ## Getting started @@ -82,7 +85,7 @@ src/reg.c # Generic dispatch (include all, or just the modules you use) src/clock/clock.c src/gpio/gpio.c src/uart/uart.c src/flash/flash.c src/spi/spi.c src/timer/timer.c -src/supply/supply.c +src/supply/supply.c src/rng/rng.c # Platform drivers (pick your target) src/clock/stm32wb_rcc.c src/gpio/stm32wb_gpio.c ... @@ -91,43 +94,50 @@ src/timer/systick.c ``` Create a board config file that instantiates devices with your pin assignments, -clock settings, and peripheral configs. See `examples/stm32wb/stm32wb55xx_nucleo.c` -or `examples/pic32cz/pic32cz_curiosity_ultra.c` for reference. +clock settings, and peripheral configs. See `boards/stm32wb55xx_nucleo/board.c` +or `boards/pic32cz_curiosity_ultra/board.c` for reference. To write a driver for a new platform, implement the functions in the relevant `*Driver` vtable and provide device macros in a platform header. ## Building the examples -Both examples use `arm-none-eabi-gcc` and produce a `.bin` suitable for flashing: +Examples use `arm-none-eabi-gcc` and produce a `.bin` suitable for flashing. +Select a board with `BOARD=`: ```sh -cd examples/stm32wb && make # -> boot.bin (Cortex-M4) -cd examples/pic32cz && make # -> boot.bin (Cortex-M33) +cd examples/blinky +make BOARD=stm32wb55xx_nucleo # -> build/stm32wb55xx_nucleo/blinky.bin +make BOARD=pic32cz_curiosity_ultra # -> build/pic32cz_curiosity_ultra/blinky.bin ``` ## Tests -**Simulation tests** run on the host and validate the abstraction layer without -any hardware: +**Core tests** run on the host and validate the abstraction layer without any +hardware: ```sh -cd tests/sim && make run +cd tests/core && make run ``` -**Hardware tests** cross-compile and run on an STM32WB55 Nucleo. They boot the -board, report results over UART, and signal pass/fail via LED: +**Hardware tests** cross-compile for a target board. They boot the board, report +results over UART, and signal pass/fail via LED: ```sh -cd tests/stm32wb && make # -> test_hw.bin +cd tests +make BOARD=stm32wb55xx_nucleo # -> build/stm32wb55xx_nucleo/test_hw.bin +make BOARD=pic32cz_curiosity_ultra # -> build/pic32cz_curiosity_ultra/test_hw.bin ``` +Each board's `Makefile.inc` defines a default `TESTS` list (e.g. `clock gpio +flash timer rng`). Override it on the command line to run a subset. + ## CI GitHub Actions runs on every push and PR to `main`: -- **sim-tests** -- builds and runs the host test suite +- **core-tests** -- builds and runs the host test suite - **cross-compile** -- verifies all examples and hardware tests compile cleanly - with `arm-none-eabi-gcc` + with `arm-none-eabi-gcc` for every supported board ## Documentation diff --git a/boards/README.md b/boards/README.md new file mode 100644 index 0000000..e2cb445 --- /dev/null +++ b/boards/README.md @@ -0,0 +1,70 @@ +# wolfHAL Example Board Definitions + +The board definitions in this directory are **examples** for use with +wolfHAL's tests and sample applications. They are configured for specific +development boards and are not intended for production use. Users should +create their own board support packages tailored to their hardware. + +Each subdirectory contains a board support package (BSP) for a specific +development board. A BSP provides everything needed to build wolfHAL for a +given target: startup code, peripheral initialization, linker script, and +build configuration. + +## Supported Boards + +| Board | Platform | CPU | Directory | +|-------|----------|-----|-----------| +| Microchip PIC32CZ CA Curiosity Ultra | PIC32CZ | Cortex-M7 | `pic32cz_curiosity_ultra/` | +| ST STM32WB55 Nucleo | STM32WB | Cortex-M4 | `stm32wb55xx_nucleo/` | + +## Board Directory Contents + +Each board directory contains: + +- **`Makefile.inc`** - Build configuration: toolchain, CPU flags, platform + drivers, and linker script. Included by application Makefiles via + `include $(BOARD_DIR)/Makefile.inc`. +- **`board.h`** - Board-level declarations: global peripheral instances, + pin definitions, and `Board_Init()`/`Board_Deinit()` prototypes. +- **`board.c`** - Peripheral instantiation and `Board_Init()` implementation + (supply, clock, GPIO, UART, flash, timer). +- **`linker.ld`** - Linker script defining memory regions (flash, RAM). +- Any additional board-specific source files (e.g. interrupt vector table, + architecture-specific startup code). + +## Makefile.inc Convention + +Board `Makefile.inc` files use a self-referencing pattern so that they can be +included from any directory: + +```makefile +_BOARD_DIR := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) +``` + +`_BOARD_DIR` points to the board's own directory, while the application +Makefile sets `BOARD_DIR` which may point elsewhere (e.g. a private board +overlay). This enables private repositories to extend a board by including +the base `Makefile.inc` and adding additional sources. + +### What `BOARD_SOURCE` includes + +Board `Makefile.inc` populates `BOARD_SOURCE` with all of the sources +required to build the wolfHAL tests and sample applications for that board: + +- Board files: `board.c` and any additional board-specific source files +- Platform / SoC drivers: e.g. `pic32cz_*.c`, `stm32wb_*.c` +- Architecture support: `systick.c` and any related startup / vector code +- Core wolfHAL modules and common sources: generic drivers such as + `gpio.c`, `clock.c`, `uart.c`, and other files under `src/*.c` + +In your own projects you may either reuse these defaults by including the +board `Makefile.inc` as-is, or define your own `BOARD_SOURCE` in your +application Makefile to select a different set of modules. + +## Adding a New Board + +1. Create a new directory: `boards/_/` +2. Add `Makefile.inc` following the `_BOARD_DIR` pattern above +3. Implement `board.h`, `board.c`, and `linker.ld` +4. Set `PLATFORM`, `TESTS`, toolchain variables, `CFLAGS`, and `BOARD_SOURCE` +5. Build with `make BOARD=` diff --git a/tests/boards/pic32cz_curiosity_ultra/Makefile.inc b/boards/pic32cz_curiosity_ultra/Makefile.inc similarity index 72% rename from tests/boards/pic32cz_curiosity_ultra/Makefile.inc rename to boards/pic32cz_curiosity_ultra/Makefile.inc index f8a7760..48c03be 100644 --- a/tests/boards/pic32cz_curiosity_ultra/Makefile.inc +++ b/boards/pic32cz_curiosity_ultra/Makefile.inc @@ -1,5 +1,7 @@ +_BOARD_DIR := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) + PLATFORM = pic32cz -TESTS = clock gpio flash timer +TESTS ?= clock gpio flash timer GCC = $(GCC_PATH)arm-none-eabi-gcc LD = $(GCC_PATH)arm-none-eabi-ld @@ -10,8 +12,12 @@ CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -DPLATFORM_PIC32CZ -MMD -MP LDFLAGS = --omagic -static -BOARD_SOURCE = $(BOARD_DIR)/ivt.c -BOARD_SOURCE += $(BOARD_DIR)/board.c +LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld + +INCLUDE += -I$(_BOARD_DIR) + +BOARD_SOURCE = $(_BOARD_DIR)/ivt.c +BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) @@ -19,5 +25,6 @@ BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/pic32cz_*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/systick.c) diff --git a/tests/boards/pic32cz_curiosity_ultra/board.c b/boards/pic32cz_curiosity_ultra/board.c similarity index 98% rename from tests/boards/pic32cz_curiosity_ultra/board.c rename to boards/pic32cz_curiosity_ultra/board.c index 8d02311..a78df0a 100644 --- a/tests/boards/pic32cz_curiosity_ultra/board.c +++ b/boards/pic32cz_curiosity_ultra/board.c @@ -1,10 +1,118 @@ +/* Example board configuration for the PIC32CZ CA Curiosity Ultra dev board */ + #include #include #include "board.h" #include -/* Forward declarations for static device instances */ -static whal_Supply g_whalSupply; +/* Supply */ +static whal_Supply g_whalSupply = { + WHAL_PIC32CZ_SUPPLY_DEVICE, +}; + +/* Clock */ +whal_Clock g_whalClock = { + WHAL_PIC32CZ_CLOCK_PLL_DEVICE, + + .cfg = &(whal_Pic32czClock_Cfg) { + /* 300MHz clock */ + .oscCtrlCfg = &(whal_Pic32czClockPll_OscCtrlCfg) { + .supplyCtrl = &g_whalSupply, + .supply = &(whal_Pic32czSupc_Supply){WHAL_PIC32CZ_SUPPLY_PLL}, + + .pllInst = WHAL_PIC32CZ_PLL0, + .refSel = WHAL_PIC32CZ_REFSEL_DFLL48M, + .bwSel = WHAL_PIC32CZ_BWSEL_10MHz_TO_20MHz, + + .fbDiv = 225, + .refDiv = 12, + + .outCfgCount = 1, + .outCfg = &(whal_Pic32czClockPll_OutCfg) { + .postDivMask = WHAL_PIC32CZ_POSTDIV0_Msk, + .postDivPos = WHAL_PIC32CZ_POSTDIV0_Pos, + .outEnMask = WHAL_PIC32CZ_OUTEN0_Msk, + .outEnPos = WHAL_PIC32CZ_OUTEN0_Pos, + .postDiv = 3, + }, + }, + .mclkCfg = &(whal_Pic32czClock_MclkCfg) { + .div = 2, + }, + .gclkCfgCount = 1, + .gclkCfg = &(whal_Pic32czClock_GclkCfg) { + .gen = 0, + .genSrc = WHAL_PIC32CZ_GENSRC_PLL0_CLOCKOUT0, + .genDiv = 1, + }, + }, +}; + +/* GPIO */ +whal_Gpio g_whalGpio = { + WHAL_PIC32CZ_GPIO_DEVICE, + + .cfg = &(whal_Pic32czGpio_Cfg) { + .pinCfgCount = 3, + .pinCfg = (whal_Pic32czGpio_PinCfg[]) { + { /* LED */ + .port = 1, + .pin = 21, + .dir = WHAL_PIC32CZ_DIR_OUTPUT, + .out = 0, + }, + { /* UART TX */ + .port = 2, + .pin = 21, + .pmuxEn = 1, + .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, + }, + { /* UART RX */ + .port = 2, + .pin = 22, + .pmuxEn = 1, + .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, + }, + }, + }, +}; + +/* UART */ +static whal_Pic32czClock_Clk uartClk = { + .gclkPeriphChannel = 25, /* SERCOM 4 */ + .gclkPeriphSrc = 0, /* GEN 0 */ + .mclkEnableInst = 1, /* Peripheral BUS Clock Enable Mask1 Register */ + .mclkEnableMask = (1UL << 3), /* SERCOM 4 enable mask */ + .mclkEnablePos = 3, +}; + +whal_Uart g_whalUart = { + WHAL_PIC32CZ_SERCOM4_UART_DEVICE, + + .cfg = &(whal_Pic32czUart_Cfg) { + .clkCtrl = &g_whalClock, + .clk = &uartClk, + .baud = WHAL_PIC32CZ_UART_BAUD(115200, 300000000), + .txPad = WHAL_PIC32CZ_UART_TXPO_PAD0, + .rxPad = WHAL_PIC32CZ_UART_RXPO_PAD1, + }, +}; + +/* Timer */ +whal_Timer g_whalTimer = { + WHAL_CORTEX_M7_SYSTICK_DEVICE, + + .cfg = &(whal_SysTick_Cfg) { + .cyclesPerTick = 300000000 / 1000, + .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, + .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, + }, +}; + +/* Flash */ +whal_Flash g_whalFlash = { + WHAL_PIC32CZ_FLASH_DEVICE, +}; /* SysTick timing */ volatile size_t g_tick = 0; @@ -122,112 +230,3 @@ whal_Error Board_Deinit(void) return WHAL_SUCCESS; } - -/* Supply */ -static whal_Supply g_whalSupply = { - WHAL_PIC32CZ_SUPPLY_DEVICE, -}; - -/* Clock */ -whal_Clock g_whalClock = { - WHAL_PIC32CZ_CLOCK_PLL_DEVICE, - - .cfg = &(whal_Pic32czClock_Cfg) { - /* 300MHz clock */ - .oscCtrlCfg = &(whal_Pic32czClockPll_OscCtrlCfg) { - .supplyCtrl = &g_whalSupply, - .supply = &(whal_Pic32czSupc_Supply){WHAL_PIC32CZ_SUPPLY_PLL}, - - .pllInst = WHAL_PIC32CZ_PLL0, - .refSel = WHAL_PIC32CZ_REFSEL_DFLL48M, - .bwSel = WHAL_PIC32CZ_BWSEL_10MHz_TO_20MHz, - - .fbDiv = 225, - .refDiv = 12, - - .outCfgCount = 1, - .outCfg = &(whal_Pic32czClockPll_OutCfg) { - .postDivMask = WHAL_PIC32CZ_POSTDIV0_Msk, - .postDivPos = WHAL_PIC32CZ_POSTDIV0_Pos, - .outEnMask = WHAL_PIC32CZ_OUTEN0_Msk, - .outEnPos = WHAL_PIC32CZ_OUTEN0_Pos, - .postDiv = 3, - }, - }, - .mclkCfg = &(whal_Pic32czClock_MclkCfg) { - .div = 2, - }, - .gclkCfgCount = 1, - .gclkCfg = &(whal_Pic32czClock_GclkCfg) { - .gen = 0, - .genSrc = WHAL_PIC32CZ_GENSRC_PLL0_CLOCKOUT0, - .genDiv = 1, - }, - }, -}; - -/* GPIO */ -whal_Gpio g_whalGpio = { - WHAL_PIC32CZ_GPIO_DEVICE, - - .cfg = &(whal_Pic32czGpio_Cfg) { - .pinCfgCount = 3, - .pinCfg = (whal_Pic32czGpio_PinCfg[]) { - { /* LED */ - .port = 1, - .pin = 21, - .dir = WHAL_PIC32CZ_DIR_OUTPUT, - .out = 0, - }, - { /* UART TX */ - .port = 2, - .pin = 21, - .pmuxEn = 1, - .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, - }, - { /* UART RX */ - .port = 2, - .pin = 22, - .pmuxEn = 1, - .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, - }, - }, - }, -}; - -/* UART */ -static whal_Pic32czClock_Clk uartClk = { - .gclkPeriphChannel = 25, /* SERCOM 4 */ - .gclkPeriphSrc = 0, /* GEN 0 */ - .mclkEnableInst = 1, /* Peripheral BUS Clock Enable Mask1 Register */ - .mclkEnableMask = (1UL << 3), /* SERCOM 4 enable mask */ - .mclkEnablePos = 3, -}; - -whal_Uart g_whalUart = { - WHAL_PIC32CZ_SERCOM4_UART_DEVICE, - - .cfg = &(whal_Pic32czUart_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &uartClk, - .baud = WHAL_PIC32CZ_UART_BAUD(115200, 300000000), - .txPad = WHAL_PIC32CZ_UART_TXPO_PAD0, - .rxPad = WHAL_PIC32CZ_UART_RXPO_PAD1, - }, -}; - -/* Timer */ -whal_Timer g_whalTimer = { - WHAL_CORTEX_M7_SYSTICK_DEVICE, - - .cfg = &(whal_SysTick_Cfg) { - .cyclesPerTick = 300000000 / 1000, - .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, - .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, - }, -}; - -/* Flash */ -whal_Flash g_whalFlash = { - WHAL_PIC32CZ_FLASH_DEVICE, -}; diff --git a/tests/boards/pic32cz_curiosity_ultra/board.h b/boards/pic32cz_curiosity_ultra/board.h similarity index 100% rename from tests/boards/pic32cz_curiosity_ultra/board.h rename to boards/pic32cz_curiosity_ultra/board.h diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/ivt.c b/boards/pic32cz_curiosity_ultra/ivt.c similarity index 100% rename from examples/blinky/boards/pic32cz_curiosity_ultra/ivt.c rename to boards/pic32cz_curiosity_ultra/ivt.c diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/jlink/target.xml b/boards/pic32cz_curiosity_ultra/jlink/target.xml similarity index 100% rename from examples/blinky/boards/pic32cz_curiosity_ultra/jlink/target.xml rename to boards/pic32cz_curiosity_ultra/jlink/target.xml diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/linker.ld b/boards/pic32cz_curiosity_ultra/linker.ld similarity index 100% rename from examples/blinky/boards/pic32cz_curiosity_ultra/linker.ld rename to boards/pic32cz_curiosity_ultra/linker.ld diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/Makefile.inc b/boards/stm32wb55xx_nucleo/Makefile.inc similarity index 56% rename from examples/blinky/boards/pic32cz_curiosity_ultra/Makefile.inc rename to boards/stm32wb55xx_nucleo/Makefile.inc index 27bb27c..f98b6e6 100644 --- a/examples/blinky/boards/pic32cz_curiosity_ultra/Makefile.inc +++ b/boards/stm32wb55xx_nucleo/Makefile.inc @@ -1,16 +1,23 @@ -PLATFORM = pic32cz +_BOARD_DIR := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) + +PLATFORM = stm32wb +TESTS ?= clock gpio flash timer rng GCC = $(GCC_PATH)arm-none-eabi-gcc LD = $(GCC_PATH)arm-none-eabi-ld OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ - -ffreestanding -nostdlib -mcpu=cortex-m7 \ - -MMD -MP + -ffreestanding -nostdlib -mcpu=cortex-m4 \ + -DPLATFORM_STM32WB -MMD -MP LDFLAGS = --omagic -static -BOARD_SOURCE = $(BOARD_DIR)/ivt.c -BOARD_SOURCE += $(BOARD_DIR)/board.c +LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld + +INCLUDE += -I$(_BOARD_DIR) + +BOARD_SOURCE = $(_BOARD_DIR)/ivt.c +BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) @@ -18,5 +25,6 @@ BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/pic32cz_*.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/stm32wb_*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/systick.c) diff --git a/tests/boards/stm32wb55xx_nucleo/board.c b/boards/stm32wb55xx_nucleo/board.c similarity index 98% rename from tests/boards/stm32wb55xx_nucleo/board.c rename to boards/stm32wb55xx_nucleo/board.c index ac8e867..d268566 100644 --- a/tests/boards/stm32wb55xx_nucleo/board.c +++ b/boards/stm32wb55xx_nucleo/board.c @@ -1,8 +1,128 @@ +/* Example board configuration for the STM32WB55 Nucleo dev board */ + #include #include #include "board.h" #include +/* Clock */ +whal_Clock g_whalClock = { + WHAL_STM32WB55_RCC_PLL_DEVICE, + + .cfg = &(whal_Stm32wbRcc_Cfg) { + .flash = &g_whalFlash, + .flashLatency = WHAL_STM32WB_FLASH_LATENCY_3, + + .sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL, + .sysClkCfg = &(whal_Stm32wbRcc_PllClkCfg) + { + .clkSrc = WHAL_STM32WB_RCC_PLLCLK_SRC_MSI, + /* 64 MHz */ + .n = 32, + .m = 0, + .r = 1, + .q = 0, + .p = 0, + }, + }, +}; + +/* GPIO */ +enum { + LED_PIN, + UART_TX_PIN, + UART_RX_PIN, +}; + +whal_Gpio g_whalGpio = { + WHAL_STM32WB55_GPIO_DEVICE, + + .cfg = &(whal_Stm32wbGpio_Cfg) { + .clkCtrl = &g_whalClock, + .clk = (const void *[1]) { + &(whal_Stm32wbRcc_Clk){WHAL_STM32WB55_GPIOB_CLOCK}, + }, + .clkCount = 1, + + .pinCfg = (whal_Stm32wbGpio_PinCfg[3]) { + [LED_PIN] = { /* LED */ + .port = WHAL_STM32WB_GPIO_PORT_B, + .pin = 5, + .mode = WHAL_STM32WB_GPIO_MODE_OUT, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_LOW, + .pull = WHAL_STM32WB_GPIO_PULL_UP, + .altFn = 0, + }, + [UART_TX_PIN] = { /* UART1 TX */ + .port = WHAL_STM32WB_GPIO_PORT_B, + .pin = 6, + .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_FAST, + .pull = WHAL_STM32WB_GPIO_PULL_UP, + .altFn = 7, + }, + [UART_RX_PIN] = { /* UART1 RX */ + .port = WHAL_STM32WB_GPIO_PORT_B, + .pin = 7, + .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_FAST, + .pull = WHAL_STM32WB_GPIO_PULL_UP, + .altFn = 7, + }, + }, + .pinCount = 3, + }, +}; + +/* Timer */ +whal_Timer g_whalTimer = { + WHAL_CORTEX_M4_SYSTICK_DEVICE, + + .cfg = &(whal_SysTick_Cfg) { + .cyclesPerTick = 64000000 / 1000, + .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, + .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, + }, +}; + +/* UART */ +whal_Uart g_whalUart = { + WHAL_STM32WB55_UART1_DEVICE, + + .cfg = &(whal_Stm32wbUart_Cfg) { + .clkCtrl = &g_whalClock, + .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, + + .baud = 115200, + }, +}; + +/* Flash */ +whal_Flash g_whalFlash = { + WHAL_STM32WB55_FLASH_DEVICE, + + .cfg = &(whal_Stm32wbFlash_Cfg) { + .clkCtrl = &g_whalClock, + .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_FLASH_CLOCK}, + + .startAddr = 0x08000000, + .size = 0x100000, + }, +}; + +/* RNG */ +whal_Rng g_whalRng = { + WHAL_STM32WB55_RNG_DEVICE, + + .cfg = &(whal_Stm32wbRng_Cfg) { + .clkCtrl = &g_whalClock, + .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_RNG_CLOCK}, + }, +}; + /* SysTick timing */ volatile size_t g_tick = 0; volatile uint8_t g_waiting = 0; @@ -130,121 +250,3 @@ whal_Error Board_Deinit(void) return WHAL_SUCCESS; } - -/* Clock */ -whal_Clock g_whalClock = { - WHAL_STM32WB55_RCC_PLL_DEVICE, - - .cfg = &(whal_Stm32wbRcc_Cfg) { - .flash = &g_whalFlash, - .flashLatency = WHAL_STM32WB_FLASH_LATENCY_3, - - .sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL, - .sysClkCfg = &(whal_Stm32wbRcc_PllClkCfg) - { - .clkSrc = WHAL_STM32WB_RCC_PLLCLK_SRC_MSI, - /* 64 MHz */ - .n = 32, - .m = 0, - .r = 1, - .q = 0, - .p = 0, - }, - }, -}; - -/* GPIO */ -enum { - LED_PIN, - UART_TX_PIN, - UART_RX_PIN, -}; - -whal_Gpio g_whalGpio = { - WHAL_STM32WB55_GPIO_DEVICE, - - .cfg = &(whal_Stm32wbGpio_Cfg) { - .clkCtrl = &g_whalClock, - .clk = (const void *[1]) { - &(whal_Stm32wbRcc_Clk){WHAL_STM32WB55_GPIOB_CLOCK}, - }, - .clkCount = 1, - - .pinCfg = (whal_Stm32wbGpio_PinCfg[3]) { - [LED_PIN] = { /* LED */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 5, - .mode = WHAL_STM32WB_GPIO_MODE_OUT, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_LOW, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 0, - }, - [UART_TX_PIN] = { /* UART1 TX */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 6, - .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_FAST, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 7, - }, - [UART_RX_PIN] = { /* UART1 RX */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 7, - .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_FAST, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 7, - }, - }, - .pinCount = 3, - }, -}; - -/* Timer */ -whal_Timer g_whalTimer = { - WHAL_CORTEX_M4_SYSTICK_DEVICE, - - .cfg = &(whal_SysTick_Cfg) { - .cyclesPerTick = 64000000 / 1000, - .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, - .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, - }, -}; - -/* UART */ -whal_Uart g_whalUart = { - WHAL_STM32WB55_UART1_DEVICE, - - .cfg = &(whal_Stm32wbUart_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, - - .baud = 115200, - }, -}; - -/* Flash */ -whal_Flash g_whalFlash = { - WHAL_STM32WB55_FLASH_DEVICE, - - .cfg = &(whal_Stm32wbFlash_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_FLASH_CLOCK}, - - .startAddr = 0x08000000, - .size = 0x100000, - }, -}; - -/* RNG */ -whal_Rng g_whalRng = { - WHAL_STM32WB55_RNG_DEVICE, - - .cfg = &(whal_Stm32wbRng_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_RNG_CLOCK}, - }, -}; diff --git a/tests/boards/stm32wb55xx_nucleo/board.h b/boards/stm32wb55xx_nucleo/board.h similarity index 100% rename from tests/boards/stm32wb55xx_nucleo/board.h rename to boards/stm32wb55xx_nucleo/board.h diff --git a/examples/blinky/boards/stm32wb55xx_nucleo/ivt.c b/boards/stm32wb55xx_nucleo/ivt.c similarity index 100% rename from examples/blinky/boards/stm32wb55xx_nucleo/ivt.c rename to boards/stm32wb55xx_nucleo/ivt.c diff --git a/examples/blinky/boards/stm32wb55xx_nucleo/linker.ld b/boards/stm32wb55xx_nucleo/linker.ld similarity index 100% rename from examples/blinky/boards/stm32wb55xx_nucleo/linker.ld rename to boards/stm32wb55xx_nucleo/linker.ld diff --git a/examples/blinky/Makefile b/examples/blinky/Makefile index 5e0762e..b180263 100644 --- a/examples/blinky/Makefile +++ b/examples/blinky/Makefile @@ -1,10 +1,10 @@ WHAL_DIR = $(CURDIR)/../.. BOARD ?= stm32wb55xx_nucleo -BOARD_DIR = boards/$(BOARD) +BOARD_DIR = $(WHAL_DIR)/boards/$(BOARD) BUILD_DIR = build/$(BOARD) -INCLUDE = -I$(WHAL_DIR) -I$(BOARD_DIR) +INCLUDE = -I$(WHAL_DIR) include $(BOARD_DIR)/Makefile.inc @@ -14,8 +14,6 @@ SOURCE += $(BOARD_SOURCE) OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(SOURCE)) DEPENDS = $(OBJECTS:.o=.d) -LINKER_SCRIPT = $(BOARD_DIR)/linker.ld - all: $(BUILD_DIR)/$(notdir $(CURDIR)).bin $(BUILD_DIR)/%.o: %.c Makefile diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/board.c b/examples/blinky/boards/pic32cz_curiosity_ultra/board.c deleted file mode 100644 index 8cb9424..0000000 --- a/examples/blinky/boards/pic32cz_curiosity_ultra/board.c +++ /dev/null @@ -1,218 +0,0 @@ -#include -#include -#include "board.h" -#include - -/* Forward declarations for static device instances */ -static whal_Supply g_whalSupply; - -/* SysTick timing */ -volatile size_t g_tick = 0; -volatile uint8_t g_waiting = 0; -volatile uint8_t g_tickOverflow = 0; - -void SysTick_Handler() -{ - size_t tickBefore = g_tick++; - if (g_waiting) { - if (tickBefore > g_tick) - g_tickOverflow = 1; - } -} - -void Board_WaitMs(size_t ms) -{ - size_t startCount = g_tick; - g_waiting = 1; - while (1) { - size_t currentCount = g_tick; - if (g_tickOverflow) { - if ((SIZE_MAX - startCount) + currentCount > ms) { - break; - } - } else if (currentCount - startCount > ms) { - break; - } - } - - g_waiting = 0; - g_tickOverflow = 0; -} - -whal_Error Board_Init(void) -{ - whal_Error err; - - err = whal_Supply_Init(&g_whalSupply); - if (err) { - return err; - } - - err = whal_Clock_Init(&g_whalClock); - if (err) { - return err; - } - - err = whal_Gpio_Init(&g_whalGpio); - if (err) { - return err; - } - - err = whal_Uart_Init(&g_whalUart); - if (err) { - return err; - } - - err = whal_Timer_Init(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Timer_Start(&g_whalTimer); - if (err) { - return err; - } - - return WHAL_SUCCESS; -} - -whal_Error Board_Deinit(void) -{ - whal_Error err; - - err = whal_Timer_Stop(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Timer_Deinit(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Uart_Deinit(&g_whalUart); - if (err) { - return err; - } - - err = whal_Gpio_Deinit(&g_whalGpio); - if (err) { - return err; - } - - err = whal_Clock_Deinit(&g_whalClock); - if (err) { - return err; - } - - err = whal_Supply_Deinit(&g_whalSupply); - if (err) { - return err; - } - - return WHAL_SUCCESS; -} - -/* Supply */ -static whal_Supply g_whalSupply = { - WHAL_PIC32CZ_SUPPLY_DEVICE, -}; - -/* Clock */ -whal_Clock g_whalClock = { - WHAL_PIC32CZ_CLOCK_PLL_DEVICE, - - .cfg = &(whal_Pic32czClock_Cfg) { - /* 300MHz clock */ - .oscCtrlCfg = &(whal_Pic32czClockPll_OscCtrlCfg) { - .supplyCtrl = &g_whalSupply, - .supply = &(whal_Pic32czSupc_Supply){WHAL_PIC32CZ_SUPPLY_PLL}, - - .pllInst = WHAL_PIC32CZ_PLL0, - .refSel = WHAL_PIC32CZ_REFSEL_DFLL48M, - .bwSel = WHAL_PIC32CZ_BWSEL_10MHz_TO_20MHz, - - .fbDiv = 225, - .refDiv = 12, - - .outCfgCount = 1, - .outCfg = &(whal_Pic32czClockPll_OutCfg) { - .postDivMask = WHAL_PIC32CZ_POSTDIV0_Msk, - .postDivPos = WHAL_PIC32CZ_POSTDIV0_Pos, - .outEnMask = WHAL_PIC32CZ_OUTEN0_Msk, - .outEnPos = WHAL_PIC32CZ_OUTEN0_Pos, - .postDiv = 3, - }, - }, - .mclkCfg = &(whal_Pic32czClock_MclkCfg) { - .div = 2, - }, - .gclkCfgCount = 1, - .gclkCfg = &(whal_Pic32czClock_GclkCfg) { - .gen = 0, - .genSrc = WHAL_PIC32CZ_GENSRC_PLL0_CLOCKOUT0, - .genDiv = 1, - }, - }, -}; - -/* GPIO */ -whal_Gpio g_whalGpio = { - WHAL_PIC32CZ_GPIO_DEVICE, - - .cfg = &(whal_Pic32czGpio_Cfg) { - .pinCfgCount = 3, - .pinCfg = (whal_Pic32czGpio_PinCfg[]) { - { /* LED */ - .port = 1, - .pin = 21, - .dir = WHAL_PIC32CZ_DIR_OUTPUT, - .out = 0, - }, - { /* UART TX */ - .port = 2, - .pin = 21, - .pmuxEn = 1, - .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, - }, - { /* UART RX */ - .port = 2, - .pin = 22, - .pmuxEn = 1, - .pmux = WHAL_PIC32CZ_PMUX_SERCOM_ALT, - }, - }, - }, -}; - -/* UART */ -static whal_Pic32czClock_Clk uartClk = { - .gclkPeriphChannel = 25, /* SERCOM 4 */ - .gclkPeriphSrc = 0, /* GEN 0 */ - .mclkEnableInst = 1, /* Peripheral BUS Clock Enable Mask1 Register */ - .mclkEnableMask = (1UL << 3), /* SERCOM 4 enable mask */ - .mclkEnablePos = 3, -}; - -whal_Uart g_whalUart = { - WHAL_PIC32CZ_SERCOM4_UART_DEVICE, - - .cfg = &(whal_Pic32czUart_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &uartClk, - .baud = WHAL_PIC32CZ_UART_BAUD(115200, 300000000), - .txPad = WHAL_PIC32CZ_UART_TXPO_PAD0, - .rxPad = WHAL_PIC32CZ_UART_RXPO_PAD1, - }, -}; - -/* Timer */ -whal_Timer g_whalTimer = { - WHAL_CORTEX_M7_SYSTICK_DEVICE, - - .cfg = &(whal_SysTick_Cfg) { - .cyclesPerTick = 300000000 / 1000, - .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, - .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, - }, -}; diff --git a/examples/blinky/boards/pic32cz_curiosity_ultra/board.h b/examples/blinky/boards/pic32cz_curiosity_ultra/board.h deleted file mode 100644 index 45e2995..0000000 --- a/examples/blinky/boards/pic32cz_curiosity_ultra/board.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef BOARD_H -#define BOARD_H - -#include -#include - -extern whal_Clock g_whalClock; -extern whal_Gpio g_whalGpio; -extern whal_Timer g_whalTimer; -extern whal_Uart g_whalUart; - -#define BOARD_LED_PIN 0 - -whal_Error Board_Init(void); -whal_Error Board_Deinit(void); -void Board_WaitMs(size_t ms); - -#endif /* BOARD_H */ diff --git a/examples/blinky/boards/stm32wb55xx_nucleo/Makefile.inc b/examples/blinky/boards/stm32wb55xx_nucleo/Makefile.inc deleted file mode 100644 index c18eb31..0000000 --- a/examples/blinky/boards/stm32wb55xx_nucleo/Makefile.inc +++ /dev/null @@ -1,15 +0,0 @@ -PLATFORM = stm32wb - -GCC = $(GCC_PATH)arm-none-eabi-gcc -LD = $(GCC_PATH)arm-none-eabi-ld -OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy - -CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ - -ffreestanding -nostdlib -mcpu=cortex-m4 \ - -MMD -MP -LDFLAGS = --omagic -static - -BOARD_SOURCE = $(BOARD_DIR)/ivt.c -BOARD_SOURCE += $(BOARD_DIR)/board.c -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/*.c) diff --git a/examples/blinky/boards/stm32wb55xx_nucleo/board.c b/examples/blinky/boards/stm32wb55xx_nucleo/board.c deleted file mode 100644 index 966a382..0000000 --- a/examples/blinky/boards/stm32wb55xx_nucleo/board.c +++ /dev/null @@ -1,209 +0,0 @@ -#include -#include -#include "board.h" -#include - -/* SysTick timing */ -volatile size_t g_tick = 0; -volatile uint8_t g_waiting = 0; -volatile uint8_t g_tickOverflow = 0; - -void SysTick_Handler() -{ - size_t tickBefore = g_tick++; - if (g_waiting) { - if (tickBefore > g_tick) - g_tickOverflow = 1; - } -} - -void Board_WaitMs(size_t ms) -{ - size_t startCount = g_tick; - g_waiting = 1; - while (1) { - size_t currentCount = g_tick; - if (g_tickOverflow) { - if ((SIZE_MAX - startCount) + currentCount > ms) { - break; - } - } else if (currentCount - startCount > ms) { - break; - } - } - - g_waiting = 0; - g_tickOverflow = 0; -} - -whal_Error Board_Init(void) -{ - whal_Error err; - - err = whal_Clock_Init(&g_whalClock); - if (err) { - return err; - } - - err = whal_Gpio_Init(&g_whalGpio); - if (err) { - return err; - } - - err = whal_Uart_Init(&g_whalUart); - if (err) { - return err; - } - - err = whal_Timer_Init(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Timer_Start(&g_whalTimer); - if (err) { - return err; - } - - return WHAL_SUCCESS; -} - -whal_Error Board_Deinit(void) -{ - whal_Error err; - - err = whal_Timer_Stop(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Timer_Deinit(&g_whalTimer); - if (err) { - return err; - } - - err = whal_Uart_Deinit(&g_whalUart); - if (err) { - return err; - } - - err = whal_Gpio_Deinit(&g_whalGpio); - if (err) { - return err; - } - - err = whal_Clock_Deinit(&g_whalClock); - if (err) { - return err; - } - - return WHAL_SUCCESS; -} - -/* Flash (needed by clock for wait state configuration) */ -static whal_Flash flash = { - WHAL_STM32WB55_FLASH_DEVICE, - - .cfg = &(whal_Stm32wbFlash_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_FLASH_CLOCK}, - - .startAddr = 0x08000000, - .size = 0x100000, - }, -}; - -/* Clock */ -whal_Clock g_whalClock = { - WHAL_STM32WB55_RCC_PLL_DEVICE, - - .cfg = &(whal_Stm32wbRcc_Cfg) { - .flash = &flash, - .flashLatency = WHAL_STM32WB_FLASH_LATENCY_3, - - .sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL, - .sysClkCfg = &(whal_Stm32wbRcc_PllClkCfg) - { - .clkSrc = WHAL_STM32WB_RCC_PLLCLK_SRC_MSI, - /* 64 MHz */ - .n = 32, - .m = 0, - .r = 1, - .q = 0, - .p = 0, - }, - }, -}; - -/* GPIO */ -enum { - LED_PIN, - UART_TX_PIN, - UART_RX_PIN, -}; - -whal_Gpio g_whalGpio = { - WHAL_STM32WB55_GPIO_DEVICE, - - .cfg = &(whal_Stm32wbGpio_Cfg) { - .clkCtrl = &g_whalClock, - .clk = (const void *[1]) { - &(whal_Stm32wbRcc_Clk){WHAL_STM32WB55_GPIOB_CLOCK}, - }, - .clkCount = 1, - - .pinCfg = (whal_Stm32wbGpio_PinCfg[3]) { - [LED_PIN] = { /* LED */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 5, - .mode = WHAL_STM32WB_GPIO_MODE_OUT, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_LOW, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 0, - }, - [UART_TX_PIN] = { /* UART1 TX */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 6, - .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_FAST, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 7, - }, - [UART_RX_PIN] = { /* UART1 RX */ - .port = WHAL_STM32WB_GPIO_PORT_B, - .pin = 7, - .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, - .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STM32WB_GPIO_SPEED_FAST, - .pull = WHAL_STM32WB_GPIO_PULL_UP, - .altFn = 7, - }, - }, - .pinCount = 3, - }, -}; - -/* Timer */ -whal_Timer g_whalTimer = { - WHAL_CORTEX_M4_SYSTICK_DEVICE, - - .cfg = &(whal_SysTick_Cfg) { - .cyclesPerTick = 64000000 / 1000, - .clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK, - .tickInt = WHAL_SYSTICK_TICKINT_ENABLED, - }, -}; - -/* UART */ -whal_Uart g_whalUart = { - WHAL_STM32WB55_UART1_DEVICE, - - .cfg = &(whal_Stm32wbUart_Cfg) { - .clkCtrl = &g_whalClock, - .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, - - .baud = 115200, - }, -}; diff --git a/examples/blinky/boards/stm32wb55xx_nucleo/board.h b/examples/blinky/boards/stm32wb55xx_nucleo/board.h deleted file mode 100644 index 45e2995..0000000 --- a/examples/blinky/boards/stm32wb55xx_nucleo/board.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef BOARD_H -#define BOARD_H - -#include -#include - -extern whal_Clock g_whalClock; -extern whal_Gpio g_whalGpio; -extern whal_Timer g_whalTimer; -extern whal_Uart g_whalUart; - -#define BOARD_LED_PIN 0 - -whal_Error Board_Init(void); -whal_Error Board_Deinit(void); -void Board_WaitMs(size_t ms); - -#endif /* BOARD_H */ diff --git a/examples/blinky/main.c b/examples/blinky/main.c index 7abc8a2..89760d6 100644 --- a/examples/blinky/main.c +++ b/examples/blinky/main.c @@ -9,10 +9,10 @@ void main(void) while (1) { whal_Gpio_Set(&g_whalGpio, BOARD_LED_PIN, 1); - whal_Uart_Send(&g_whalUart, (const uint8_t *)"Blink!\r\n", 8); + whal_Uart_Send(&g_whalUart, "Blink!\r\n", 8); Board_WaitMs(1000); whal_Gpio_Set(&g_whalGpio, BOARD_LED_PIN, 0); - whal_Uart_Send(&g_whalUart, (const uint8_t *)"Blink!\r\n", 8); + whal_Uart_Send(&g_whalUart, "Blink!\r\n", 8); Board_WaitMs(1000); } diff --git a/src/uart/pic32cz_uart.c b/src/uart/pic32cz_uart.c index f457429..2df420e 100644 --- a/src/uart/pic32cz_uart.c +++ b/src/uart/pic32cz_uart.c @@ -280,9 +280,10 @@ whal_Error whal_Pic32czUart_Deinit(whal_Uart *uartDev) return WHAL_SUCCESS; } -whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz) +whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const void *data, size_t dataSz) { const whal_Regmap *reg; + const uint8_t *buf = data; if (!uartDev || !data) { return WHAL_EINVAL; @@ -302,7 +303,7 @@ whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t /* Write data to transmit register */ whal_Reg_Update(reg->base, USART_DATA_REG, USART_DATA_Msk, - whal_SetBits(USART_DATA_Msk, USART_DATA_Pos, data[i])); + whal_SetBits(USART_DATA_Msk, USART_DATA_Pos, buf[i])); } /* Wait for transmission complete */ @@ -321,9 +322,10 @@ whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t return WHAL_SUCCESS; } -whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz) +whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) { const whal_Regmap *reg; + uint8_t *buf = data; if (!uartDev || !data) { return WHAL_EINVAL; @@ -345,7 +347,7 @@ whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataS whal_Reg_Get(reg->base, USART_DATA_REG, USART_DATA_Msk, USART_DATA_Pos, &rxData); - data[i] = (uint8_t)rxData; + buf[i] = (uint8_t)rxData; } return WHAL_SUCCESS; diff --git a/src/uart/stm32wb_uart.c b/src/uart/stm32wb_uart.c index 96c8b83..43476ea 100644 --- a/src/uart/stm32wb_uart.c +++ b/src/uart/stm32wb_uart.c @@ -130,15 +130,16 @@ whal_Error whal_Stm32wbUart_Deinit(whal_Uart *uartDev) return WHAL_SUCCESS; } -whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz) +whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const void *data, size_t dataSz) { const whal_Regmap *reg = &uartDev->regmap; + const uint8_t *buf = data; for (size_t i = 0; i < dataSz; ++i) { size_t txComplete = 0; whal_Reg_Update(reg->base, UART_TDR_REG, UART_TDR_Msk, - whal_SetBits(UART_TDR_Msk, UART_TDR_Pos, data[i])); + whal_SetBits(UART_TDR_Msk, UART_TDR_Pos, buf[i])); while (!txComplete) { whal_Reg_Get(reg->base, UART_ISR_REG, UART_ISR_TC_Msk, UART_ISR_TC_Pos, &txComplete); @@ -148,9 +149,10 @@ whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t return WHAL_SUCCESS; } -whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz) +whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) { const whal_Regmap *reg = &uartDev->regmap; + uint8_t *buf = data; size_t d; for (size_t i = 0; i < dataSz; ++i) { @@ -163,7 +165,7 @@ whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataS whal_Reg_Get(reg->base, UART_RDR_REG, UART_RDR_Msk, UART_RDR_Pos, &d); - data[i] = d; + buf[i] = d; } return WHAL_SUCCESS; diff --git a/src/uart/uart.c b/src/uart/uart.c index e681dfb..6c0b23f 100644 --- a/src/uart/uart.c +++ b/src/uart/uart.c @@ -20,7 +20,7 @@ inline whal_Error whal_Uart_Deinit(whal_Uart *uartDev) return uartDev->driver->Deinit(uartDev); } -inline whal_Error whal_Uart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz) +inline whal_Error whal_Uart_Send(whal_Uart *uartDev, const void *data, size_t dataSz) { if (!uartDev || !uartDev->driver || !uartDev->driver->Send || !data) { return WHAL_EINVAL; @@ -29,7 +29,7 @@ inline whal_Error whal_Uart_Send(whal_Uart *uartDev, const uint8_t *data, size_t return uartDev->driver->Send(uartDev, data, dataSz); } -inline whal_Error whal_Uart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz) +inline whal_Error whal_Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) { if (!uartDev || !uartDev->driver || !uartDev->driver->Recv || !data) { return WHAL_EINVAL; diff --git a/tests/Makefile b/tests/Makefile index 7cf41d0..38a686c 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,14 +1,12 @@ WHAL_DIR = $(CURDIR)/.. BOARD ?= stm32wb55xx_nucleo -BOARD_DIR = boards/$(BOARD) +BOARD_DIR = $(WHAL_DIR)/boards/$(BOARD) BUILD_DIR = build/$(BOARD) -INCLUDE = -I$(WHAL_DIR) -I$(BOARD_DIR) -I. +INCLUDE = -I$(WHAL_DIR) -I. include $(BOARD_DIR)/Makefile.inc -TESTS ?= clock gpio flash timer - uc = $(shell echo $(1) | tr a-z A-Z) CFLAGS += $(foreach t,$(TESTS),-DWHAL_TEST_ENABLE_$(call uc,$(t))) CFLAGS += $(foreach t,$(TESTS),$(if $(wildcard $(t)/test_$(PLATFORM)_$(t).c),-DWHAL_TEST_ENABLE_$(call uc,$(t))_PLATFORM)) @@ -21,8 +19,6 @@ SOURCE += $(foreach t,$(TESTS),$(wildcard $(t)/test_$(PLATFORM)_$(t).c)) OBJECTS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(SOURCE)) DEPENDS = $(OBJECTS:.o=.d) -LINKER_SCRIPT = $(BOARD_DIR)/linker.ld - all: $(BUILD_DIR)/test_hw.bin $(BUILD_DIR)/%.o: %.c Makefile diff --git a/tests/boards/pic32cz_curiosity_ultra/ivt.c b/tests/boards/pic32cz_curiosity_ultra/ivt.c deleted file mode 100644 index 5493981..0000000 --- a/tests/boards/pic32cz_curiosity_ultra/ivt.c +++ /dev/null @@ -1,79 +0,0 @@ -#include - -extern uint32_t _sidata; -extern uint32_t _sdata; -extern uint32_t _edata; -extern uint32_t _sbss; -extern uint32_t _ebss; -extern uint32_t _estack; - -void Reset_Handler(void); -void NMI_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void HardFault_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void MemManage_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void BusFault_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void UsageFault_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void SVC_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void DebugMon_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void PendSV_Handler(void) __attribute__((weak, alias("Default_Handler"))); -void SysTick_Handler(void) __attribute__((weak, alias("Default_Handler"))); - -extern int main(void); - -void Default_Handler(void) -{ - while (1) { - } -} - -/* Vector table */ -__attribute__((section(".isr_vectors"))) const void* vector_table[] = { - /* Stack pointer */ - &_estack, - - /* Core handlers */ - Reset_Handler, - NMI_Handler, - HardFault_Handler, - MemManage_Handler, - BusFault_Handler, - UsageFault_Handler, - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, - DebugMon_Handler, - 0, /* Reserved */ - PendSV_Handler, - SysTick_Handler, -}; - -void Reset_Handler(void) -{ - uint32_t* src = &_sidata; - uint32_t* dst = &_sdata; - - __asm__("ldr r0, =_estack\n\t" - "mov sp, r0"); - - while (dst < &_edata) { - *dst++ = *src++; - } - - dst = &_sbss; - while (dst < &_ebss) { - *dst++ = 0; - } - - /* Point VTOR to our vector table (SCB->VTOR = 0xE000ED08) */ - *(volatile uint32_t *)0xE000ED08 = (uint32_t)vector_table; - - /* Call main */ - main(); - - /* Never return */ - while (1) { - } -} - diff --git a/tests/boards/pic32cz_curiosity_ultra/jlink/target.xml b/tests/boards/pic32cz_curiosity_ultra/jlink/target.xml deleted file mode 100644 index f5ecb8d..0000000 --- a/tests/boards/pic32cz_curiosity_ultra/jlink/target.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - arm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/boards/pic32cz_curiosity_ultra/linker.ld b/tests/boards/pic32cz_curiosity_ultra/linker.ld deleted file mode 100644 index 1b869e5..0000000 --- a/tests/boards/pic32cz_curiosity_ultra/linker.ld +++ /dev/null @@ -1,55 +0,0 @@ -MEMORY -{ - FLASH (rwx) : ORIGIN = 0x08000000, LENGTH = 64K - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 512K -} - -ENTRY(Reset_Handler) - -SECTIONS -{ - .isr_vectors : - { - . = ALIGN(4); - KEEP(*(.isr_vectors)) - . = ALIGN(4); - } > FLASH - - .text : - { - . = ALIGN(4); - *(.text*) - *(.rodata*) - . = ALIGN(4); - } > FLASH - - .data : - { - . = ALIGN(4); - _sdata = .; - *(.data*) - . = ALIGN(4); - _edata = .; - } > RAM AT > FLASH - - _sidata = LOADADDR(.data); - - .bss : - { - . = ALIGN(4); - _sbss = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - _ebss = .; - } > RAM - - /* Set stack top to end of RAM */ - _estack = ORIGIN(RAM) + LENGTH(RAM); - - /DISCARD/ : - { - *(.comment) - *(.ARM.attributes) - } -} diff --git a/tests/boards/stm32wb55xx_nucleo/Makefile.inc b/tests/boards/stm32wb55xx_nucleo/Makefile.inc deleted file mode 100644 index b114874..0000000 --- a/tests/boards/stm32wb55xx_nucleo/Makefile.inc +++ /dev/null @@ -1,16 +0,0 @@ -PLATFORM = stm32wb -TESTS = clock gpio flash timer rng - -GCC = $(GCC_PATH)arm-none-eabi-gcc -LD = $(GCC_PATH)arm-none-eabi-ld -OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy - -CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ - -ffreestanding -nostdlib -mcpu=cortex-m4 \ - -DPLATFORM_STM32WB -MMD -MP -LDFLAGS = --omagic -static - -BOARD_SOURCE = $(BOARD_DIR)/ivt.c -BOARD_SOURCE += $(BOARD_DIR)/board.c -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/*.c) diff --git a/tests/boards/stm32wb55xx_nucleo/ivt.c b/tests/boards/stm32wb55xx_nucleo/ivt.c deleted file mode 100644 index a8b8d89..0000000 --- a/tests/boards/stm32wb55xx_nucleo/ivt.c +++ /dev/null @@ -1,216 +0,0 @@ -#include -#include - -extern uint32_t _estack[]; -extern uint32_t _sidata[]; -extern uint32_t _sdata[]; -extern uint32_t _edata[]; -extern uint32_t _sbss[]; -extern uint32_t _ebss[]; - -extern void main(); - -void __attribute__((naked,noreturn)) Default_Handler() -{ - while(1); -} - -void Reset_Handler() __attribute__((weak)); -void NMI_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void HardFault_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void MemManage_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void BusFault_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void UsageFault_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void SVC_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DebugMon_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void PendSV_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void SysTick_Handler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void WWDG_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void PVD_PVM_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TAMP_STAMP_LSECSS_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void RTC_WKUP_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void FLASH_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void RCC_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI0_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI3_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI4_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel3_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel4_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel5_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel6_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA1_Channel7_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void ADC1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void USB_HP_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void USB_LP_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void C2SEV_PWR_C2H_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void COMP_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI9_5_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TIM1_BRK_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TIM1_UP_TIM16_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TIM1_TRG_COM_TIM17_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TIM1_CC_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TIM2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void PKA_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void I2C1_EV_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void I2C1_ER_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void I2C3_EV_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void I2C3_ER_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void SPI1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void SPI2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void USART1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void LPUART1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void SAI1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void TSC_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void EXTI15_10_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void RTC_Alarm_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void CRS_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void IPCC_C1_RX_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void IPCC_C1_TX_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void HSEM_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void LPTIM1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void LPTIM2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void LCD_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void QUADSPI_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void AES1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void AES2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void RNG_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void FPU_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel1_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel2_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel3_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel4_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel5_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel6_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMA2_Channel7_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); -void DMAMUX1_OVR_IRQHandler() __attribute__((weak, noreturn, alias("Default_Handler"))); - -#define RESERVED Default_Handler - -void (* const interrupt_vector_table[])() __attribute__((section(".isr_vector"))) = { - (void (*)())_estack, - Reset_Handler, - NMI_Handler, - HardFault_Handler, - MemManage_Handler, - BusFault_Handler, - UsageFault_Handler, - RESERVED, - RESERVED, - RESERVED, - RESERVED, - SVC_Handler, - DebugMon_Handler, - RESERVED, - PendSV_Handler, - SysTick_Handler, - WWDG_IRQHandler, - PVD_PVM_IRQHandler, - TAMP_STAMP_LSECSS_IRQHandler, - RTC_WKUP_IRQHandler, - FLASH_IRQHandler, - RCC_IRQHandler, - EXTI0_IRQHandler, - EXTI1_IRQHandler, - EXTI2_IRQHandler, - EXTI3_IRQHandler, - EXTI4_IRQHandler, - DMA1_Channel1_IRQHandler, - DMA1_Channel2_IRQHandler, - DMA1_Channel3_IRQHandler, - DMA1_Channel4_IRQHandler, - DMA1_Channel5_IRQHandler, - DMA1_Channel6_IRQHandler, - DMA1_Channel7_IRQHandler, - ADC1_IRQHandler, - USB_HP_IRQHandler, - USB_LP_IRQHandler, - C2SEV_PWR_C2H_IRQHandler, - COMP_IRQHandler, - EXTI9_5_IRQHandler, - TIM1_BRK_IRQHandler, - TIM1_UP_TIM16_IRQHandler, - TIM1_TRG_COM_TIM17_IRQHandler, - TIM1_CC_IRQHandler, - TIM2_IRQHandler, - PKA_IRQHandler, - I2C1_EV_IRQHandler, - I2C1_ER_IRQHandler, - I2C3_EV_IRQHandler, - I2C3_ER_IRQHandler, - SPI1_IRQHandler, - SPI2_IRQHandler, - USART1_IRQHandler, - LPUART1_IRQHandler, - SAI1_IRQHandler, - TSC_IRQHandler, - EXTI15_10_IRQHandler, - RTC_Alarm_IRQHandler, - CRS_IRQHandler, - PWR_SOTF_BLEACT_802ACT_RFPHASE_IRQHandler, - IPCC_C1_RX_IRQHandler, - IPCC_C1_TX_IRQHandler, - HSEM_IRQHandler, - LPTIM1_IRQHandler, - LPTIM2_IRQHandler, - LCD_IRQHandler, - QUADSPI_IRQHandler, - AES1_IRQHandler, - AES2_IRQHandler, - RNG_IRQHandler, - FPU_IRQHandler, - DMA2_Channel1_IRQHandler, - DMA2_Channel2_IRQHandler, - DMA2_Channel3_IRQHandler, - DMA2_Channel4_IRQHandler, - DMA2_Channel5_IRQHandler, - DMA2_Channel6_IRQHandler, - DMA2_Channel7_IRQHandler, - DMAMUX1_OVR_IRQHandler, -}; - -void *memcpy(void *dest, const void *src, size_t n) -{ - unsigned char *d = dest; - const unsigned char *s = src; - - for (size_t i = 0; i < n; i++) - d[i] = s[i]; - - return dest; -} - -void *memset(void *s, int c, size_t n) -{ - unsigned char *p = s; - unsigned char v = (unsigned char)c; - - for (size_t i = 0; i < n; i++) - p[i] = v; - - return s; -} - -void __attribute__((naked)) Reset_Handler() -{ - __asm__("ldr r0, =_estack\n\t" - "mov sp, r0"); - - // Copy data section from flash memory to ram - uint32_t data_section_size = _edata - _sdata; - memcpy(_sdata, _sidata, data_section_size*4); - - // Zero out bss - uint32_t bss_section_size = _ebss - _sbss; - memset(_sbss, 0, bss_section_size*4); - - // Set Interrupt Vector Table Offset - uint32_t *vtor = (uint32_t *)0xE000ED08; - *vtor = (uint32_t)interrupt_vector_table; - - main(); -} diff --git a/tests/boards/stm32wb55xx_nucleo/linker.ld b/tests/boards/stm32wb55xx_nucleo/linker.ld deleted file mode 100644 index b98b596..0000000 --- a/tests/boards/stm32wb55xx_nucleo/linker.ld +++ /dev/null @@ -1,173 +0,0 @@ -/* -***************************************************************************** -** -** File : linker.ld -** -** Abstract : System Workbench Minimal System calls file -** -** For more information about which c-functions -** need which of these lowlevel functions -** please consult the Newlib libc-manual -** -** Environment : System Workbench for MCU -** -** Distribution: The file is distributed “as is,” without any warranty -** of any kind. -** -***************************************************************************** -** -**

© COPYRIGHT(c) 2019 Ac6

-** -** Redistribution and use in source and binary forms, with or without modification, -** are permitted provided that the following conditions are met: -** 1. Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** 3. Neither the name of Ac6 nor the names of its contributors -** may be used to endorse or promote products derived from this software -** without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -** -***************************************************************************** -*/ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = 0x20030000; /* end of RAM */ -/* Generate a link error if the stack don't fit into RAM */ -_Min_Stack_Size = 0x500; /* required amount of stack */ - -/* Specify the memory areas */ -MEMORY -{ -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K -BOOTLOADER_MAGIC (rx) : ORIGIN = 0x20000004, LENGTH = 0x4 -RAM1 (xrw) : ORIGIN = 0x20000008, LENGTH = 0x1ffc -} - -/* Define output sections */ -SECTIONS -{ - /* The startup code goes first into FLASH */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >FLASH - - /* The program code and other data goes into FLASH */ - .text : - { - . = ALIGN(4); - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.glue_7) /* glue arm to thumb code */ - *(.glue_7t) /* glue thumb to arm code */ - *(.eh_frame) - - KEEP (*(.init)) - KEEP (*(.fini)) - - . = ALIGN(4); - _etext = .; /* define a global symbols at end of code */ - } >FLASH - - /* Constant data goes into FLASH */ - .rodata : - { - . = ALIGN(4); - *(.rodata) /* .rodata sections (constants, strings, etc.) */ - *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ - . = ALIGN(4); - } >FLASH - - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { - __exidx_start = .; - *(.ARM.exidx*) - __exidx_end = .; - } >FLASH - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array*)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >FLASH - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array*)) - PROVIDE_HIDDEN (__init_array_end = .); - } >FLASH - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT(.fini_array.*))) - KEEP (*(.fini_array*)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >FLASH - - /* used by the startup to initialize data */ - _sidata = LOADADDR(.data); - - /* Initialized data sections goes into RAM, load LMA copy after code */ - .data : - { - . = ALIGN(4); - _sdata = .; /* create a global symbol at data start */ - *(.data) /* .data sections */ - *(.data*) /* .data* sections */ - - . = ALIGN(4); - _edata = .; /* define a global symbol at data end */ - } >RAM1 AT> FLASH - - - /* Uninitialized data section */ - . = ALIGN(4); - .bss : - { - /* This is used by the startup in order to initialize the .bss section */ - _sbss = .; /* define a global symbol at bss start */ - __bss_start__ = _sbss; - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ebss = .; /* define a global symbol at bss end */ - __bss_end__ = _ebss; - } >RAM1 - - /* User_heap_stack section, used to check that there is enough RAM left */ - ._user_heap_stack : - { - . = ALIGN(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM1 - - /* .ARM.attributes 0 : { *(.ARM.attributes) } */ - /* MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED */ - /* MB_MEM1 (NOLOAD) : { *(MB_MEM1) } >RAM_SHARED */ - /* MB_MEM2 (NOLOAD) : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED */ -} diff --git a/tests/core/test_dispatch.c b/tests/core/test_dispatch.c index fce0951..86a0387 100644 --- a/tests/core/test_dispatch.c +++ b/tests/core/test_dispatch.c @@ -37,8 +37,8 @@ static const whal_GpioDriver mockGpioDriver = { static whal_Error MockUartInit(whal_Uart *d) { (void)d; return WHAL_SUCCESS; } static whal_Error MockUartDeinit(whal_Uart *d) { (void)d; return WHAL_SUCCESS; } -static whal_Error MockUartSend(whal_Uart *d, const uint8_t *data, size_t sz) { (void)d; (void)data; (void)sz; return WHAL_SUCCESS; } -static whal_Error MockUartRecv(whal_Uart *d, uint8_t *data, size_t sz) { (void)d; (void)data; (void)sz; return WHAL_SUCCESS; } +static whal_Error MockUartSend(whal_Uart *d, const void *data, size_t sz) { (void)d; (void)data; (void)sz; return WHAL_SUCCESS; } +static whal_Error MockUartRecv(whal_Uart *d, void *data, size_t sz) { (void)d; (void)data; (void)sz; return WHAL_SUCCESS; } static const whal_UartDriver mockUartDriver = { .Init = MockUartInit, diff --git a/tests/ipc/test_ipc.c b/tests/ipc/test_ipc.c new file mode 100644 index 0000000..edb365c --- /dev/null +++ b/tests/ipc/test_ipc.c @@ -0,0 +1,35 @@ +#include +#include "board.h" +#include "test.h" + +static void Test_Ipc_InitDeinit(void) +{ + WHAL_ASSERT_EQ(whal_Ipc_Init(&g_whalIpc), WHAL_SUCCESS); + WHAL_ASSERT_EQ(whal_Ipc_Deinit(&g_whalIpc), WHAL_SUCCESS); + WHAL_ASSERT_EQ(whal_Ipc_Init(&g_whalIpc), WHAL_SUCCESS); +} + +static void Test_Ipc_InitNull(void) +{ + WHAL_ASSERT_EQ(whal_Ipc_Init(NULL), WHAL_EINVAL); +} + +static void Test_Ipc_SendNull(void) +{ + WHAL_ASSERT_EQ(whal_Ipc_Send(&g_whalIpc, NULL, 0), WHAL_EINVAL); +} + +static void Test_Ipc_RecvNull(void) +{ + WHAL_ASSERT_EQ(whal_Ipc_Recv(&g_whalIpc, NULL, 0), WHAL_EINVAL); +} + +void whal_Test_Ipc(void) +{ + WHAL_TEST_SUITE_START("ipc"); + WHAL_TEST(Test_Ipc_InitDeinit); + WHAL_TEST(Test_Ipc_InitNull); + WHAL_TEST(Test_Ipc_SendNull); + WHAL_TEST(Test_Ipc_RecvNull); + WHAL_TEST_SUITE_END(); +} diff --git a/tests/main.c b/tests/main.c index 4dc44ab..5100f9d 100644 --- a/tests/main.c +++ b/tests/main.c @@ -35,6 +35,13 @@ void whal_Test_Rng_Platform(void); #endif #endif +#ifdef WHAL_TEST_ENABLE_IPC +void whal_Test_Ipc(void); +#ifdef WHAL_TEST_ENABLE_IPC_PLATFORM +void whal_Test_Ipc_Platform(void); +#endif +#endif + int g_whalTestPassed; int g_whalTestFailed; int g_whalTestCurFailed; @@ -43,9 +50,9 @@ void whal_Test_Puts(const char *s) { while (*s) { if (*s == '\n') - whal_Uart_Send(&g_whalUart, (const uint8_t *)"\r\n", 2); + whal_Uart_Send(&g_whalUart, "\r\n", 2); else - whal_Uart_Send(&g_whalUart, (const uint8_t *)s, 1); + whal_Uart_Send(&g_whalUart, s, 1); s++; } } @@ -93,6 +100,13 @@ void main(void) #ifdef WHAL_TEST_ENABLE_RNG_PLATFORM whal_Test_Rng_Platform(); #endif +#endif + +#ifdef WHAL_TEST_ENABLE_IPC + whal_Test_Ipc(); +#ifdef WHAL_TEST_ENABLE_IPC_PLATFORM + whal_Test_Ipc_Platform(); +#endif #endif WHAL_TEST_SUMMARY(); diff --git a/wolfHAL/uart/pic32cz_uart.h b/wolfHAL/uart/pic32cz_uart.h index de55c27..d3fae5b 100644 --- a/wolfHAL/uart/pic32cz_uart.h +++ b/wolfHAL/uart/pic32cz_uart.h @@ -77,7 +77,7 @@ whal_Error whal_Pic32czUart_Deinit(whal_Uart *uartDev); * @retval WHAL_SUCCESS Transfer completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz); +whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const void *data, size_t dataSz); /* * @brief Receive a buffer over UART. * @@ -88,6 +88,6 @@ whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t * @retval WHAL_SUCCESS Transfer completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz); +whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); #endif /* WHAL_PIC32CZ_UART_H */ diff --git a/wolfHAL/uart/stm32wb_uart.h b/wolfHAL/uart/stm32wb_uart.h index 746e358..d5b7f8a 100644 --- a/wolfHAL/uart/stm32wb_uart.h +++ b/wolfHAL/uart/stm32wb_uart.h @@ -63,7 +63,7 @@ whal_Error whal_Stm32wbUart_Deinit(whal_Uart *uartDev); * @retval WHAL_SUCCESS Transfer completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz); +whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const void *data, size_t dataSz); /* * @brief Receive a buffer over UART. * @@ -74,6 +74,6 @@ whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const uint8_t *data, size_t * @retval WHAL_SUCCESS Transfer completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz); +whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); #endif /* WHAL_STM32WB_UART_H */ diff --git a/wolfHAL/uart/uart.h b/wolfHAL/uart/uart.h index d79a56f..27db672 100644 --- a/wolfHAL/uart/uart.h +++ b/wolfHAL/uart/uart.h @@ -22,9 +22,9 @@ typedef struct { /* Deinitialize the UART hardware. */ whal_Error (*Deinit)(whal_Uart *uartDev); /* Transmit a buffer. */ - whal_Error (*Send)(whal_Uart *uartDev, const uint8_t *data, size_t dataSz); + whal_Error (*Send)(whal_Uart *uartDev, const void *data, size_t dataSz); /* Receive into a buffer. */ - whal_Error (*Recv)(whal_Uart *uartDev, uint8_t *data, size_t dataSz); + whal_Error (*Recv)(whal_Uart *uartDev, void *data, size_t dataSz); } whal_UartDriver; /* @@ -72,7 +72,7 @@ whal_Error whal_Uart_Deinit(whal_Uart *uartDev); * @retval WHAL_SUCCESS Buffer was queued or transmitted. * @retval WHAL_EINVAL Null pointer or driver failed to send. */ -whal_Error whal_Uart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz); +whal_Error whal_Uart_Send(whal_Uart *uartDev, const void *data, size_t dataSz); /* * @brief Receives data from the UART into a buffer. @@ -84,7 +84,7 @@ whal_Error whal_Uart_Send(whal_Uart *uartDev, const uint8_t *data, size_t dataSz * @retval WHAL_SUCCESS Buffer was filled or receive started. * @retval WHAL_EINVAL Null pointer or driver failed to receive. */ -whal_Error whal_Uart_Recv(whal_Uart *uartDev, uint8_t *data, size_t dataSz); +whal_Error whal_Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); #endif #endif /* WHAL_UART_H */