This is an automated email from the ASF dual-hosted git repository. wes3 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 24398ce000466f9de64563d5817ac75e8d89bec1 Author: Will San Filippo <william.sanfili...@juul.com> AuthorDate: Wed Jan 26 13:45:30 2022 -0800 hal: Modify hal_system_restart Two changes to the code: clear ICPR register (to clear any pending interrupts) and also leave global interrupts enabled when calling hal_system_start. The idea behind this change is that the cortex-M has global interrupts enabled on reset and that this should be the state when the system is restarted. --- hw/mcu/dialog/da1469x/src/hal_system_start.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/hw/mcu/dialog/da1469x/src/hal_system_start.c b/hw/mcu/dialog/da1469x/src/hal_system_start.c index 2445f9c..1937a7d 100644 --- a/hw/mcu/dialog/da1469x/src/hal_system_start.c +++ b/hw/mcu/dialog/da1469x/src/hal_system_start.c @@ -62,19 +62,24 @@ hal_system_start(void *img_start) void hal_system_restart(void *img_start) { - uint32_t primask __attribute__((unused)); int i; /* - * Disable interrupts, and leave them disabled. - * They get re-enabled when system starts coming back again. + * NOTE: on reset, PRIMASK should have global interrupts enabled so + * the code disables interrupts, clears the interrupt enable bits, + * clears any pending interrupts, then enables global interrupts + * so processor looks like state it would be in if it reset. */ - __HAL_DISABLE_INTERRUPTS(primask); - + __disable_irq(); for (i = 0; i < sizeof(NVIC->ICER) / sizeof(NVIC->ICER[0]); i++) { NVIC->ICER[i] = 0xffffffff; } + for (i = 0; i < sizeof(NVIC->ICPR) / sizeof(NVIC->ICPR[0]); i++) { + NVIC->ICPR[i] = 0xffffffff; + } + __enable_irq(); + hal_system_start(img_start); }