From 2bea1ae46a9c5d6cf37dfd70638b468841d14faa Mon Sep 17 00:00:00 2001 From: Thomas Klaehn Date: Thu, 12 Mar 2020 15:30:53 +0100 Subject: [PATCH] wip --- Makefile | 4 +- Makefile.nrf52 | 18 ++++-- include/sdk_config.h | 113 ++++++++++++++++++++++++++++++++++ src/application/button/main.c | 73 +++++++++++++--------- 4 files changed, 172 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 3356194..db35f4a 100644 --- a/Makefile +++ b/Makefile @@ -59,11 +59,11 @@ $(TARGET_HEX): $(TARGET) $(THIS_MAKEFILE) $(OBJCOPY) -O ihex $(TARGET) $(TARGET_HEX) ln -sf $(shell pwd)/$@ $(shell pwd)/bin/firmware.hex -$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c +$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c $(THIS_MAKEFILE) @mkdir -p $(dir $@) $(CPP) -MM -MF $@ -MP -MT $(patsubst %.d,%.o,$@) $(C_FLAGS) $(CPP_FLAGS) $(patsubst $(OBJ_DIR)/%.d,$(SRC_DIR)/%.c,$@) -$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(THIS_MAKEFILE) @mkdir -p $(dir $@) $(CC) -c $(CPP_FLAGS) $(C_FLAGS) $< -o $@ diff --git a/Makefile.nrf52 b/Makefile.nrf52 index b107883..564d074 100644 --- a/Makefile.nrf52 +++ b/Makefile.nrf52 @@ -14,10 +14,12 @@ INCLUDES += $(NRF_PATH)modules/nrfx/hal/ INCLUDES += $(NRF_PATH)components/libraries/bsp/ INCLUDES += $(NRF_PATH)components/libraries/log/ INCLUDES += $(NRF_PATH)modules/nrfx/ +INCLUDES += $(NRF_PATH)modules/nrfx/drivers/include/ INCLUDES += $(NRF_PATH)components/libraries/experimental_section_vars/ INCLUDES += $(NRF_PATH)components/softdevice/s132/headers/ INCLUDES += $(NRF_PATH)components/libraries/delay/ INCLUDES += $(NRF_PATH)integration/nrfx/ +INCLUDES += $(NRF_PATH)integration/nrfx/legacy/ INCLUDES += $(NRF_PATH)components/libraries/atomic/ INCLUDES += $(NRF_PATH)components/boards/ INCLUDES += $(NRF_PATH)components/libraries/memobj/ @@ -27,6 +29,10 @@ INCLUDES += $(NRF_PATH)components/libraries/log/src/ NRF_C_SRCS += $(NRF_PATH)components/boards/boards.c NRF_C_SRCS += $(NRF_PATH)modules/nrfx/mdk/system_nrf52.c +NRF_C_SRCS += $(NRF_PATH)modules/nrfx/drivers/src/nrfx_gpiote.c +NRF_C_SRCS += $(NRF_PATH)components/libraries/util/app_error.c +NRF_C_SRCS += $(NRF_PATH)components/libraries/util/app_error_weak.c + NRF_C_OBJS = $(patsubst $(NRF_PATH)%,$(OBJ_DIR)/%,$(patsubst %.c,%.o,$(NRF_C_SRCS))) NRF_A_SRCS = $(NRF_PATH)modules/nrfx/mdk/gcc_startup_nrf52.S @@ -78,15 +84,15 @@ LD_FLAGS += --specs=nano.specs .PHONY: package flash flash_softdevice erase -package: $(TARGET_HEX) $(THIS_MAKEFILE) +package: $(TARGET_HEX) nrfutil pkg generate --hw-version 52 --application-version 1 --application $(TARGET_HEX) --sd-req 0xCB --sd-id 0xCB --key-file keys/private.key $(TARGET_PACKAGE) -flash: $(TARGET_HEX) $(THIS_MAKEFILE) +flash: $(TARGET_HEX) @echo Flashing: $(TARGET_HEX) nrfjprog -f nrf52 --program $(TARGET_HEX) --sectorerase nrfjprog -f nrf52 --reset -flash_softdevice: +flash_softdevice: $(THIS_MAKEFILE) @echo Flashing: $(NRF_PATH)/components/softdevice/s132/hex/s132_nrf52_7.0.1_softdevice.hex nrfjprog -f nrf52 --program $(NRF_PATH)/components/softdevice/s132/hex/s132_nrf52_7.0.1_softdevice.hex --sectorerase nrfjprog -f nrf52 --reset @@ -94,15 +100,15 @@ flash_softdevice: erase: nrfjprog -f nrf52 --eraseall -$(OBJ_DIR)/%.d: $(NRF_PATH)/%.S +$(OBJ_DIR)/%.d: $(NRF_PATH)/%.S $(THIS_MAKEFILE) @mkdir -p $(dir $@) $(CPP) -MM -MF $@ -MP -MT $(patsubst %.d,%.o,$@) $(C_FLAGS) $(CPP_FLAGS) $(patsubst $(OBJ_DIR)/%.d,$(NRF_PATH)/%.S,$@) -$(OBJ_DIR)/%.o: $(NRF_PATH)/%.c +$(OBJ_DIR)/%.o: $(NRF_PATH)/%.c $(THIS_MAKEFILE) @mkdir -p $(dir $@) $(CC) -std=c99 -MP -MD -c -o $@ $< $(C_FLAGS) $(CPP_FLAGS) -$(OBJ_DIR)/%.o: $(NRF_PATH)/%.S +$(OBJ_DIR)/%.o: $(NRF_PATH)/%.S $(THIS_MAKEFILE) @mkdir -p $(dir $@) $(CC) -c $(ASMFLAGS) $< -o $@ diff --git a/include/sdk_config.h b/include/sdk_config.h index 7035a20..acc37ea 100644 --- a/include/sdk_config.h +++ b/include/sdk_config.h @@ -46,6 +46,119 @@ #ifdef USE_APP_CONFIG #include "app_config.h" #endif +// nRF_Drivers + +//========================================================== +// GPIOTE_ENABLED - nrf_drv_gpiote - GPIOTE peripheral driver - legacy layer +//========================================================== +#ifndef GPIOTE_ENABLED +#define GPIOTE_ENABLED 1 +#endif +// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +#ifndef GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS +#define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 1 +#endif + +// GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef GPIOTE_CONFIG_IRQ_PRIORITY +#define GPIOTE_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// NRFX_GPIOTE_ENABLED - nrfx_gpiote - GPIOTE peripheral driver +//========================================================== +#ifndef NRFX_GPIOTE_ENABLED +#define NRFX_GPIOTE_ENABLED 1 +#endif +// NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +#ifndef NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS +#define NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 1 +#endif + +// NRFX_GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_GPIOTE_CONFIG_IRQ_PRIORITY +#define NRFX_GPIOTE_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_GPIOTE_CONFIG_LOG_ENABLED +#define NRFX_GPIOTE_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_GPIOTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_GPIOTE_CONFIG_LOG_LEVEL +#define NRFX_GPIOTE_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_GPIOTE_CONFIG_INFO_COLOR +#define NRFX_GPIOTE_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_GPIOTE_CONFIG_DEBUG_COLOR +#define NRFX_GPIOTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// +//========================================================== + // nRF_Libraries //========================================================== diff --git a/src/application/button/main.c b/src/application/button/main.c index e3b73d8..c9c8bb2 100644 --- a/src/application/button/main.c +++ b/src/application/button/main.c @@ -1,34 +1,51 @@ #include -#include +#include "nrf.h" +#include "nrf_drv_gpiote.h" +#include "app_error.h" +#include "boards.h" -#include "board.h" -#include "driver.h" +#ifdef BSP_BUTTON_0 + #define PIN_IN BSP_BUTTON_0 +#endif +#ifndef PIN_IN + #error "Please indicate input pin" +#endif + +#ifdef BSP_LED_0 + #define PIN_OUT BSP_LED_0 +#endif +#ifndef PIN_OUT + #error "Please indicate output pin" +#endif + +void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action) +{ + nrf_drv_gpiote_out_toggle(PIN_OUT); +} + +static void gpio_init(void) +{ + ret_code_t err_code; + + err_code = nrf_drv_gpiote_init(); + APP_ERROR_CHECK(err_code); + + nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(false); + + err_code = nrf_drv_gpiote_out_init(PIN_OUT, &out_config); + APP_ERROR_CHECK(err_code); + + nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(true); + in_config.pull = NRF_GPIO_PIN_PULLUP; + + err_code = nrf_drv_gpiote_in_init(PIN_IN, &in_config, in_pin_handler); + APP_ERROR_CHECK(err_code); + + nrf_drv_gpiote_in_event_enable(PIN_IN, true); +} int main(void) { - // bsp_board_init(BSP_INIT_LEDS); - drv_open(&led_1); - drv_open(&led_2); - drv_open(&led_3); - drv_open(&led_4); - - drv_open(&button_1); - drv_open(&button_2); - drv_open(&button_3); - drv_open(&button_4); - - while(true) { - char x; - drv_read(&button_1, &x, 1); - drv_write(&led_1, &x, 1); - - drv_read(&button_2, &x, 1); - drv_write(&led_2, &x, 1); - - drv_read(&button_3, &x, 1); - drv_write(&led_3, &x, 1); - - drv_read(&button_4, &x, 1); - drv_write(&led_4, &x, 1); - } + gpio_init(); + while(true) {} }