diff --git a/EPD/EPD_service.c b/EPD/EPD_service.c index 5111468..9921f70 100644 --- a/EPD/EPD_service.c +++ b/EPD/EPD_service.c @@ -18,6 +18,7 @@ #include "nrf_pwr_mgmt.h" #include "app_scheduler.h" #include "EPD_service.h" +#include "main.h" #include "nrf_log.h" #if defined(S112) @@ -31,11 +32,6 @@ #define EPD_CFG_DEFAULT {0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x03, 0x09, 0x03} #endif -// defined in main.c -extern uint32_t timestamp(void); -extern void set_timestamp(uint32_t timestamp); -extern void sleep_mode_enter(void); - static void epd_gui_update(void * p_event_data, uint16_t event_size) { epd_gui_update_event_t *event = (epd_gui_update_event_t *)p_event_data; @@ -54,6 +50,8 @@ static void epd_gui_update(void * p_event_data, uint16_t event_size) DrawGUI(&data, epd->drv->write_image, p_epd->display_mode); epd->drv->refresh(); EPD_GPIO_Uninit(); + + app_feed_wdt(); } /**@brief Function for handling the @ref BLE_GAP_EVT_CONNECTED event from the S110 SoftDevice. diff --git a/Keil/EPD-nRF51.uvprojx b/Keil/EPD-nRF51.uvprojx index 2665f8a..4a72667 100644 --- a/Keil/EPD-nRF51.uvprojx +++ b/Keil/EPD-nRF51.uvprojx @@ -340,7 +340,7 @@ --locale=english BLE_STACK_SUPPORT_REQD NRF51822 NRF_SD_BLE_API_VERSION=2 S130 NRF51 SOFTDEVICE_PRESENT NRF_DFU_SETTINGS_VERSION=1 SWI_DISABLE0 __HEAP_SIZE=4096 __STACK_SIZE=1200 - ..\EPD;..\GUI;..\SDK\12.3.0_d7731ad;..\SDK\12.3.0_d7731ad\components\toolchain;..\SDK\12.3.0_d7731ad\components\toolchain\cmsis\include;..\SDK\12.3.0_d7731ad\components\drivers_nrf\clock;..\SDK\12.3.0_d7731ad\components\drivers_nrf\common;..\SDK\12.3.0_d7731ad\components\drivers_nrf\delay;..\SDK\12.3.0_d7731ad\components\drivers_nrf\gpiote;..\SDK\12.3.0_d7731ad\components\drivers_nrf\hal;..\SDK\12.3.0_d7731ad\components\drivers_nrf\spi_master;..\SDK\12.3.0_d7731ad\components\drivers_nrf\twi_master;..\SDK\12.3.0_d7731ad\components\drivers_nrf\wdt;..\SDK\12.3.0_d7731ad\external\segger_rtt;..\SDK\12.3.0_d7731ad\components\libraries\bootloader\dfu;..\SDK\12.3.0_d7731ad\components\libraries\crc32;..\SDK\12.3.0_d7731ad\components\libraries\fds;..\SDK\12.3.0_d7731ad\components\libraries\fstorage;..\SDK\12.3.0_d7731ad\components\libraries\experimental_section_vars;..\SDK\12.3.0_d7731ad\components\libraries\log;..\SDK\12.3.0_d7731ad\components\libraries\log\src;..\SDK\12.3.0_d7731ad\components\libraries\pwr_mgmt;..\SDK\12.3.0_d7731ad\components\libraries\scheduler;..\SDK\12.3.0_d7731ad\components\libraries\trace;..\SDK\12.3.0_d7731ad\components\libraries\timer;..\SDK\12.3.0_d7731ad\components\libraries\util;..\SDK\12.3.0_d7731ad\components\ble\common;..\SDK\12.3.0_d7731ad\components\ble\ble_advertising;..\SDK\12.3.0_d7731ad\components\ble\ble_services\ble_dfu;..\SDK\12.3.0_d7731ad\components\softdevice\common\softdevice_handler;..\SDK\12.3.0_d7731ad\components\softdevice\s130\headers;..\SDK\12.3.0_d7731ad\components\softdevice\s130\headers\nrf51 + ..\;..\EPD;..\GUI;..\SDK\12.3.0_d7731ad;..\SDK\12.3.0_d7731ad\components\toolchain;..\SDK\12.3.0_d7731ad\components\toolchain\cmsis\include;..\SDK\12.3.0_d7731ad\components\drivers_nrf\clock;..\SDK\12.3.0_d7731ad\components\drivers_nrf\common;..\SDK\12.3.0_d7731ad\components\drivers_nrf\delay;..\SDK\12.3.0_d7731ad\components\drivers_nrf\gpiote;..\SDK\12.3.0_d7731ad\components\drivers_nrf\hal;..\SDK\12.3.0_d7731ad\components\drivers_nrf\spi_master;..\SDK\12.3.0_d7731ad\components\drivers_nrf\twi_master;..\SDK\12.3.0_d7731ad\components\drivers_nrf\wdt;..\SDK\12.3.0_d7731ad\external\segger_rtt;..\SDK\12.3.0_d7731ad\components\libraries\bootloader\dfu;..\SDK\12.3.0_d7731ad\components\libraries\crc32;..\SDK\12.3.0_d7731ad\components\libraries\fds;..\SDK\12.3.0_d7731ad\components\libraries\fstorage;..\SDK\12.3.0_d7731ad\components\libraries\experimental_section_vars;..\SDK\12.3.0_d7731ad\components\libraries\log;..\SDK\12.3.0_d7731ad\components\libraries\log\src;..\SDK\12.3.0_d7731ad\components\libraries\pwr_mgmt;..\SDK\12.3.0_d7731ad\components\libraries\scheduler;..\SDK\12.3.0_d7731ad\components\libraries\trace;..\SDK\12.3.0_d7731ad\components\libraries\timer;..\SDK\12.3.0_d7731ad\components\libraries\util;..\SDK\12.3.0_d7731ad\components\ble\common;..\SDK\12.3.0_d7731ad\components\ble\ble_advertising;..\SDK\12.3.0_d7731ad\components\ble\ble_services\ble_dfu;..\SDK\12.3.0_d7731ad\components\softdevice\common\softdevice_handler;..\SDK\12.3.0_d7731ad\components\softdevice\s130\headers;..\SDK\12.3.0_d7731ad\components\softdevice\s130\headers\nrf51 diff --git a/Keil/EPD-nRF52.uvprojx b/Keil/EPD-nRF52.uvprojx index 91ac70b..8ecaa6c 100644 --- a/Keil/EPD-nRF52.uvprojx +++ b/Keil/EPD-nRF52.uvprojx @@ -340,7 +340,7 @@ --locale=english --reduce_paths APP_TIMER_V2 APP_TIMER_V2_RTC1_ENABLED CONFIG_GPIO_AS_PINRESET DEVELOP_IN_NRF52840 FLOAT_ABI_SOFT NRF52811_XXAA NRFX_COREDEP_DELAY_US_LOOP_CYCLES=3 NRF_DFU_SVCI_ENABLED NRF_DFU_TRANSPORT_BLE=1 NRF_SD_BLE_API_VERSION=7 S112 SOFTDEVICE_PRESENT __HEAP_SIZE=8192 __STACK_SIZE=2048 - ..\EPD;..\GUI;..\SDK\17.1.0_ddde560;..\SDK\17.1.0_ddde560\components\ble\common;..\SDK\17.1.0_ddde560\components\ble\ble_advertising;..\SDK\17.1.0_ddde560\components\ble\nrf_ble_gatt;..\SDK\17.1.0_ddde560\components\ble\ble_services\ble_dfu;..\SDK\17.1.0_ddde560\components\libraries\atomic;..\SDK\17.1.0_ddde560\components\libraries\atomic_fifo;..\SDK\17.1.0_ddde560\components\libraries\atomic_flags;..\SDK\17.1.0_ddde560\components\libraries\balloc;..\SDK\17.1.0_ddde560\components\libraries\bootloader;..\SDK\17.1.0_ddde560\components\libraries\bootloader\ble_dfu;..\SDK\17.1.0_ddde560\components\libraries\bootloader\dfu;..\SDK\17.1.0_ddde560\components\libraries\delay;..\SDK\17.1.0_ddde560\components\libraries\fstorage;..\SDK\17.1.0_ddde560\components\libraries\fds;..\SDK\17.1.0_ddde560\components\libraries\experimental_section_vars;..\SDK\17.1.0_ddde560\components\libraries\log;..\SDK\17.1.0_ddde560\components\libraries\log\src;..\SDK\17.1.0_ddde560\components\libraries\memobj;..\SDK\17.1.0_ddde560\components\libraries\mutex;..\SDK\17.1.0_ddde560\components\libraries\pwr_mgmt;..\SDK\17.1.0_ddde560\components\libraries\ringbuf;..\SDK\17.1.0_ddde560\components\libraries\sortlist;..\SDK\17.1.0_ddde560\components\libraries\scheduler;..\SDK\17.1.0_ddde560\components\libraries\strerror;..\SDK\17.1.0_ddde560\components\libraries\svc;..\SDK\17.1.0_ddde560\components\libraries\timer;..\SDK\17.1.0_ddde560\components\libraries\util;..\SDK\17.1.0_ddde560\components\softdevice\common;..\SDK\17.1.0_ddde560\components\softdevice\s112\headers;..\SDK\17.1.0_ddde560\components\softdevice\s112\headers\nrf52;..\SDK\17.1.0_ddde560\components\toolchain\cmsis\include;..\SDK\17.1.0_ddde560\external\fprintf;..\SDK\17.1.0_ddde560\external\segger_rtt;..\SDK\17.1.0_ddde560\integration\nrfx;..\SDK\17.1.0_ddde560\integration\nrfx\legacy;..\SDK\17.1.0_ddde560\modules\nrfx;..\SDK\17.1.0_ddde560\modules\nrfx\mdk;..\SDK\17.1.0_ddde560\modules\nrfx\drivers\include;..\SDK\17.1.0_ddde560\modules\nrfx\hal + ..\;..\EPD;..\GUI;..\SDK\17.1.0_ddde560;..\SDK\17.1.0_ddde560\components\ble\common;..\SDK\17.1.0_ddde560\components\ble\ble_advertising;..\SDK\17.1.0_ddde560\components\ble\nrf_ble_gatt;..\SDK\17.1.0_ddde560\components\ble\ble_services\ble_dfu;..\SDK\17.1.0_ddde560\components\libraries\atomic;..\SDK\17.1.0_ddde560\components\libraries\atomic_fifo;..\SDK\17.1.0_ddde560\components\libraries\atomic_flags;..\SDK\17.1.0_ddde560\components\libraries\balloc;..\SDK\17.1.0_ddde560\components\libraries\bootloader;..\SDK\17.1.0_ddde560\components\libraries\bootloader\ble_dfu;..\SDK\17.1.0_ddde560\components\libraries\bootloader\dfu;..\SDK\17.1.0_ddde560\components\libraries\delay;..\SDK\17.1.0_ddde560\components\libraries\fstorage;..\SDK\17.1.0_ddde560\components\libraries\fds;..\SDK\17.1.0_ddde560\components\libraries\experimental_section_vars;..\SDK\17.1.0_ddde560\components\libraries\log;..\SDK\17.1.0_ddde560\components\libraries\log\src;..\SDK\17.1.0_ddde560\components\libraries\memobj;..\SDK\17.1.0_ddde560\components\libraries\mutex;..\SDK\17.1.0_ddde560\components\libraries\pwr_mgmt;..\SDK\17.1.0_ddde560\components\libraries\ringbuf;..\SDK\17.1.0_ddde560\components\libraries\sortlist;..\SDK\17.1.0_ddde560\components\libraries\scheduler;..\SDK\17.1.0_ddde560\components\libraries\strerror;..\SDK\17.1.0_ddde560\components\libraries\svc;..\SDK\17.1.0_ddde560\components\libraries\timer;..\SDK\17.1.0_ddde560\components\libraries\util;..\SDK\17.1.0_ddde560\components\softdevice\common;..\SDK\17.1.0_ddde560\components\softdevice\s112\headers;..\SDK\17.1.0_ddde560\components\softdevice\s112\headers\nrf52;..\SDK\17.1.0_ddde560\components\toolchain\cmsis\include;..\SDK\17.1.0_ddde560\external\fprintf;..\SDK\17.1.0_ddde560\external\segger_rtt;..\SDK\17.1.0_ddde560\integration\nrfx;..\SDK\17.1.0_ddde560\integration\nrfx\legacy;..\SDK\17.1.0_ddde560\modules\nrfx;..\SDK\17.1.0_ddde560\modules\nrfx\mdk;..\SDK\17.1.0_ddde560\modules\nrfx\drivers\include;..\SDK\17.1.0_ddde560\modules\nrfx\hal diff --git a/Makefile.nRF51 b/Makefile.nRF51 index edc1510..bbff0a3 100644 --- a/Makefile.nRF51 +++ b/Makefile.nRF51 @@ -85,7 +85,8 @@ INC_FOLDERS += \ $(SDK_ROOT)/external/segger_rtt \ $(SDK_ROOT) \ $(PROJ_DIR)/EPD \ - $(PROJ_DIR)/GUI + $(PROJ_DIR)/GUI \ + $(PROJ_DIR) # Libraries common to all targets LIB_FILES += \ diff --git a/Makefile.nRF52 b/Makefile.nRF52 index db5d8c9..9c9b94c 100644 --- a/Makefile.nRF52 +++ b/Makefile.nRF52 @@ -119,7 +119,8 @@ INC_FOLDERS += \ $(SDK_ROOT)/modules/nrfx/hal \ $(SDK_ROOT) \ $(PROJ_DIR)/EPD \ - $(PROJ_DIR)/GUI + $(PROJ_DIR)/GUI \ + $(PROJ_DIR) # Libraries common to all targets LIB_FILES += \ diff --git a/main.c b/main.c index 910bd19..c11df14 100644 --- a/main.c +++ b/main.c @@ -39,6 +39,7 @@ #include "nrf_drv_wdt.h" #include "nrf_pwr_mgmt.h" #include "EPD_service.h" +#include "main.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" @@ -115,6 +116,30 @@ void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name) app_error_handler(DEAD_BEEF, line_num, p_file_name); } +// return current timestamp +uint32_t timestamp(void) +{ + return m_timestamp; +} + +// set the timestamp +void set_timestamp(uint32_t timestamp) +{ + app_timer_stop(m_clock_timer_id); + m_timestamp = timestamp; + app_timer_start(m_clock_timer_id, CLOCK_TIMER_INTERVAL, NULL); +} + +// reload the wdt channel +void app_feed_wdt(void) +{ + if (m_timestamp - m_wdt_last_feed_time >= 30) { + NRF_LOG_DEBUG("Feed WDT\n"); + nrf_drv_wdt_channel_feed(m_wdt_channel_id); + m_wdt_last_feed_time = m_timestamp; + } +} + #if defined(S112) static void buttonless_dfu_sdh_state_observer(nrf_sdh_state_evt_t state, void * p_context) { @@ -674,19 +699,6 @@ static void advertising_init(void) #endif } -// return current timestamp -uint32_t timestamp(void) -{ - return m_timestamp; -} - -void set_timestamp(uint32_t timestamp) -{ - app_timer_stop(m_clock_timer_id); - m_timestamp = timestamp; - app_timer_start(m_clock_timer_id, CLOCK_TIMER_INTERVAL, NULL); -} - /**@brief Function for initializing the nrf log module. */ static void log_init(void) @@ -714,11 +726,7 @@ static void power_management_init(void) */ static void idle_state_handle(void) { - if (m_timestamp - m_wdt_last_feed_time >= 30) { - NRF_LOG_DEBUG("Feed WDT\n"); - nrf_drv_wdt_channel_feed(m_wdt_channel_id); - m_wdt_last_feed_time = m_timestamp; - } + app_feed_wdt(); if (NRF_LOG_PROCESS() == false) nrf_pwr_mgmt_run(); @@ -730,6 +738,8 @@ static void idle_state_handle(void) void wdt_event_handler(void) { //NOTE: The max amount of time we can spend in WDT interrupt is two cycles of 32768[Hz] clock - after that, reset occurs + NRF_LOG_ERROR("WDT Rest!\r\n"); + NRF_LOG_FINAL_FLUSH(); } /**@brief Function for application main entry. @@ -738,6 +748,11 @@ int main(void) { log_init(); + if (nrf_power_resetreas_get() & NRF_POWER_RESETREAS_DOG_MASK) { + NRF_LOG_DEBUG("!!!reset from WDT!!!\n"); + nrf_power_resetreas_clear(NRF_POWER_RESETREAS_DOG_MASK); + } + NRF_LOG_DEBUG("init..\n"); // Configure WDT. diff --git a/main.h b/main.h new file mode 100644 index 0000000..b1536ec --- /dev/null +++ b/main.h @@ -0,0 +1,6 @@ +#include + +uint32_t timestamp(void); +void set_timestamp(uint32_t timestamp); +void sleep_mode_enter(void); +void app_feed_wdt(void);