From 5805e10f74104e3de60470c38d6643d2bdb00fe0 Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sat, 9 Jul 2016 23:57:48 +0200 Subject: NRF52832 implementation --- demos/NRF52/Classic/Makefile | 251 +++++++++++++++++++++++++++++++++++++++++++ demos/NRF52/Classic/main.c | 104 ++++++++++++++++++ 2 files changed, 355 insertions(+) create mode 100644 demos/NRF52/Classic/Makefile create mode 100644 demos/NRF52/Classic/main.c (limited to 'demos') diff --git a/demos/NRF52/Classic/Makefile b/demos/NRF52/Classic/Makefile new file mode 100644 index 0000000..c509079 --- /dev/null +++ b/demos/NRF52/Classic/Makefile @@ -0,0 +1,251 @@ +############################################################################## +# Build global options +# NOTE: Can be overridden externally. +# + +PLATFORM=NRF5/NRF52832 +BOARD=NRF52-DK + +# Compiler options here. +ifeq ($(USE_OPT),) + USE_OPT = -Os -ggdb -fomit-frame-pointer -falign-functions=16 -std=c11 +endif + +# C specific options here (added to USE_OPT). +ifeq ($(USE_COPT),) + USE_COPT = +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti +endif + +# Enable this if you want the linker to remove unused code and data +ifeq ($(USE_LINK_GC),) + USE_LINK_GC = yes +endif + +# Linker extra options here. +ifeq ($(USE_LDOPT),) + USE_LDOPT = +endif + +# Enable this if you want link time optimizations (LTO) +ifeq ($(USE_LTO),) + USE_LTO = yes +endif + +# If enabled, this option allows to compile the application in THUMB mode. +ifeq ($(USE_THUMB),) + USE_THUMB = yes +endif + +# Enable this if you want to see the full log while compiling. +ifeq ($(USE_VERBOSE_COMPILE),) + USE_VERBOSE_COMPILE = no +endif + +# If enabled, this option makes the build process faster by not compiling +# modules not used in the current configuration. +ifeq ($(USE_SMART_BUILD),) + USE_SMART_BUILD = yes +endif + +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + +# Stack size to be allocated to the Cortex-M process stack. This stack is +# the stack used by the main() thread. +ifeq ($(USE_PROCESS_STACKSIZE),) + USE_PROCESS_STACKSIZE = 0x400 +endif + +# Stack size to the allocated to the Cortex-M main/exceptions stack. This +# stack is used for processing interrupts and exceptions. +ifeq ($(USE_EXCEPTIONS_STACKSIZE),) + USE_EXCEPTIONS_STACKSIZE = 0x400 +endif + +# Enables the use of FPU on Cortex-M4 (no, softfp, hard). +ifeq ($(USE_FPU),) + USE_FPU = no +endif + +# +# Architecture or project specific options +############################################################################## + +############################################################################## +# Project, sources and paths +# + +# Define project name here +PROJECT = ch + +# Imported source files and paths +NRF51SDK = /home/sdalu/nRF51-SDK +CHIBIOS = /home/sdalu/ChibiOS/ChibiOS +CHIBIOS_CONTRIB = /home/sdalu/ChibiOS/ChibiOS-Contrib +# Startup files. +include $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_nrf52.mk +# HAL-OSAL files (optional). +include $(CHIBIOS)/os/hal/hal.mk +include $(CHIBIOS_CONTRIB)/os/hal/hal.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/$(PLATFORM)/platform.mk +include $(CHIBIOS_CONTRIB)/os/hal/boards/$(BOARD)/board.mk +include $(CHIBIOS)/os/hal/osal/rt/osal.mk +# RTOS files (optional). +include $(CHIBIOS)/os/rt/rt.mk +include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk +# Other files (optional). +include $(CHIBIOS)/test/rt/test.mk +include $(CHIBIOS)/os/various/shell/shell.mk + +# Define linker script file here +LDSCRIPT= $(STARTUPLD)/NRF52832.ld + +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(STARTUPSRC) \ + $(KERNSRC) \ + $(PORTSRC) \ + $(OSALSRC) \ + $(HALSRC) \ + $(PLATFORMSRC) \ + $(BOARDSRC) \ + $(TESTSRC) \ + $(SHELLSRC) \ + $(CHIBIOS)/os/hal/lib/streams/memstreams.c \ + $(CHIBIOS)/os/hal/lib/streams/chprintf.c + +CSRC += main.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = + +# C sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACSRC = + +# C++ sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCSRC = + +# C++ sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCPPSRC = + +# List ASM source files here +ASMSRC = +ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM) + + +INCDIR = $(CHIBIOS)/os/license \ + $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ + $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ + $(SHELLINC) \ + $(CHIBIOS)/os/hal/lib/streams $(CHIBIOS)/os/various + + +INCDIR += $(CHIBIOS_CONTRIB)/os/various + +# +# Project, sources and paths +############################################################################## + +############################################################################## +# Compiler settings +# + +MCU = cortex-m4 + +TRGT = arm-none-eabi- +CC = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +# runtime support makes code size explode. +LD = $(TRGT)gcc +#LD = $(TRGT)g++ +CP = $(TRGT)objcopy +AS = $(TRGT)gcc -x assembler-with-cpp +AR = $(TRGT)ar +OD = $(TRGT)objdump +SZ = $(TRGT)size +HEX = $(CP) -O ihex +BIN = $(CP) -O binary +SREC = $(CP) -O srec + +# ARM-specific options here +AOPT = + +# THUMB-specific options here +TOPT = -mthumb -DTHUMB + +# Define C warning options here +CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes -Wno-unused-parameter + +# Define C++ warning options here +CPPWARN = -Wall -Wextra -Wundef + +# +# Compiler settings +############################################################################## + +############################################################################## +# Start of user section +# + +# List all user C define here, like -D_DEBUG=1 +UDEFS = + +# Define ASM defines here +UADEFS = + +# List all user directories here +UINCDIR = + +# List the user directory to look for the libraries here +ULIBDIR = + +# List all user libraries here +ULIBS = + +# +# End of user defines +############################################################################## + +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/ +include $(RULESPATH)/rules.mk + +OHEX = $(BUILDDIR)/$(PROJECT).hex +OELF = $(BUILDDIR)/$(PROJECT).elf +OBIN = $(BUILDDIR)/$(PROJECT).bin + + + +include $(CHIBIOS_CONTRIB)/os/various/jlink.mk +include $(CHIBIOS_CONTRIB)/os/various/gdb.mk + + +pin-reset: jlink-pin-reset +flash: all jlink-flash +debug: gdb-debug +erase-all: jlink-erase-all +debug-server: jlink-debug-server + diff --git a/demos/NRF52/Classic/main.c b/demos/NRF52/Classic/main.c new file mode 100644 index 0000000..c55b973 --- /dev/null +++ b/demos/NRF52/Classic/main.c @@ -0,0 +1,104 @@ +#include +#include + +#include "ch.h" +#include "hal.h" +#include "chprintf.h" +#include "shell.h" +#include "ch_test.h" + +#define LED_EXT 14 + +static THD_WORKING_AREA(shell_wa, 1024); + +static const ShellCommand commands[] = { + {NULL, NULL} +}; + +static const ShellConfig shell_cfg1 = { + (BaseSequentialStream *)&SD1, + commands +}; + +static SerialConfig serial_config = { + .speed = 115200, + .tx_pad = UART_TX, + .rx_pad = UART_RX, +#if NRF51_SERIAL_USE_HWFLOWCTRL == TRUE + .rts_pad = UART_RTS, + .cts_pad = UART_CTS, +#endif +}; + + + +static THD_WORKING_AREA(waThread1, 64); +static THD_FUNCTION(Thread1, arg) { + + (void)arg; + uint8_t led = LED4; + + chRegSetThreadName("blinker"); + + + while (1) { + palSetPad(IOPORT1, led); + chThdSleepMilliseconds(100); + palClearPad(IOPORT1, led); + chThdSleepMilliseconds(100); + } +} + + +#define printf(fmt, ...) \ + chprintf((BaseSequentialStream*)&SD1, fmt, ##__VA_ARGS__) + + + + +/**@brief Function for application main entry. + */ +int main(void) +{ + + halInit(); + chSysInit(); + shellInit(); + + sdStart(&SD1, &serial_config); + + palSetPad(IOPORT1, LED1); + palSetPad(IOPORT1, LED2); + palSetPad(IOPORT1, LED3); + palSetPad(IOPORT1, LED4); + + + + chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO+1, + Thread1, NULL); + + + + chThdCreateStatic(shell_wa, sizeof(shell_wa), NORMALPRIO+1, + shellThread, (void *)&shell_cfg1); + + + + printf(PORT_INFO "\r\n"); + chThdSleep(2); + + + + printf("Priority levels %d\r\n", CORTEX_PRIORITY_LEVELS); + + test_execute((BaseSequentialStream *)&SD1); + + while (true) { + chThdSleepMilliseconds(100); + + } + + + +} + -- cgit v1.2.3