diff --git a/epicardium/ble/ble.c b/epicardium/ble/ble.c index 5e6fa1cb4427aa8cb89c1e751966dee264e24f3f..a67929924c56649af70dc3bd9f33822d3e179a66 100644 --- a/epicardium/ble/ble.c +++ b/epicardium/ble/ble.c @@ -161,12 +161,17 @@ void WsfTimerNotify(void) //printf("WsfTimerNotify\n"); // TODO: Can we do this without waking up the task? // xTimerChangePeriodFromISR exists - notify(); + NVIC->STIR = RSV11_IRQn; } /*************************************************************************************************/ void wsf_ble_signal_event(void) { //printf("wsf_ble_signal_event\n"); + NVIC->STIR = RSV11_IRQn; +} +/*************************************************************************************************/ +void RSV11_IRQHandler(void) +{ notify(); } /*************************************************************************************************/ @@ -243,6 +248,12 @@ void vBleTask(void *pvParameters) */ vTaskDelay(pdMS_TO_TICKS(500)); + /* We are going to execute FreeRTOS functions from callbacks + * coming from this interrupt. Its priority needs to be + * reduced to allow this. */ + NVIC_SetPriority(RSV11_IRQn, 2); + NVIC_EnableIRQ(RSV11_IRQn); + WsfInit(); taskENTER_CRITICAL(); /* Critical section to prevent a loop in iq_capture2 / meas_freq in @@ -253,12 +264,6 @@ void vBleTask(void *pvParameters) BbBleDrvSetTxPower(0); setAddress(); - /* We are going to execute FreeRTOS functions from callbacks - * coming from these interrupts. Their priority needs to be - * reduced to allow this. */ - NVIC_SetPriority(BTLE_SFD_TO_IRQn, 2); - NVIC_SetPriority(BTLE_TX_DONE_IRQn, 2); - NVIC_SetPriority(BTLE_RX_RCVD_IRQn, 2); AppInit(); BleStart(); AttsDynInit(); diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c index aeb77c3a9f423b7ee54f62b8228b70d575b2ad32..800cb9c65d0334939a319f66af82af895512dd01 100644 --- a/epicardium/modules/hardware.c +++ b/epicardium/modules/hardware.c @@ -194,6 +194,9 @@ int hardware_early_init(void) */ max30001_mutex_init(); + /* Allow user space to trigger interrupts. + * Used for BLE, not sure if needed. */ + SCB->CCR |= SCB_CCR_USERSETMPEND_Msk; return 0; }