diff --git a/epicardium/ble/ble.c b/epicardium/ble/ble.c index 51c01d34e8c7fa20a2028d48aaca58464f877355..a7f10ea50aa207903bf09dce56e91e117afddd59 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; }