aboutsummaryrefslogtreecommitdiffstats
path: root/demos/NRF52
diff options
context:
space:
mode:
authorStephane D'Alu <sdalu@sdalu.com>2016-07-09 23:57:48 +0200
committerStephane D'Alu <sdalu@sdalu.com>2016-07-09 23:57:48 +0200
commit5805e10f74104e3de60470c38d6643d2bdb00fe0 (patch)
tree18339d5cb2a1903d5c03793b18388e14c1740832 /demos/NRF52
parentddebbfc5d2ddcde8337ff5f88359770220df9f58 (diff)
downloadChibiOS-Contrib-5805e10f74104e3de60470c38d6643d2bdb00fe0.tar.gz
ChibiOS-Contrib-5805e10f74104e3de60470c38d6643d2bdb00fe0.tar.bz2
ChibiOS-Contrib-5805e10f74104e3de60470c38d6643d2bdb00fe0.zip
NRF52832 implementation
Diffstat (limited to 'demos/NRF52')
-rw-r--r--demos/NRF52/Classic/Makefile251
-rw-r--r--demos/NRF52/Classic/main.c104
2 files changed, 355 insertions, 0 deletions
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 <stdint.h>
+#include <string.h>
+
+#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);
+
+ }
+
+
+
+}
+