[FL-2383, FL-2384] iButton, Desktop bug fixes (#1062)
* iButton HAL: correct init and emulation sequence * FuriHal: cleanup init/deinit routines for emulation timer * FuriHal: cleanup TIM initialization routines in RFID and SubGhz * iButton: delay in emulate loop * Desktop: fix crash caused by invalid animation manager state, described in FL-2384 Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
		| @@ -49,6 +49,11 @@ void furi_hal_ibutton_emulate_start( | ||||
|     LL_TIM_DeInit(FURI_HAL_IBUTTON_TIMER); | ||||
|     FURI_CRITICAL_EXIT(); | ||||
|  | ||||
|     furi_hal_interrupt_set_timer_isr(FURI_HAL_IBUTTON_TIMER, furi_hal_ibutton_emulate_isr); | ||||
|     NVIC_SetPriority( | ||||
|         FURI_HAL_IBUTTON_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(FURI_HAL_IBUTTON_TIMER_IRQ); | ||||
|  | ||||
|     LL_TIM_SetPrescaler(FURI_HAL_IBUTTON_TIMER, 0); | ||||
|     LL_TIM_SetCounterMode(FURI_HAL_IBUTTON_TIMER, LL_TIM_COUNTERMODE_UP); | ||||
|     LL_TIM_SetAutoReload(FURI_HAL_IBUTTON_TIMER, period); | ||||
| @@ -61,12 +66,6 @@ void furi_hal_ibutton_emulate_start( | ||||
|  | ||||
|     LL_TIM_EnableIT_UPDATE(FURI_HAL_IBUTTON_TIMER); | ||||
|  | ||||
|     furi_hal_interrupt_set_timer_isr(FURI_HAL_IBUTTON_TIMER, furi_hal_ibutton_emulate_isr); | ||||
|  | ||||
|     NVIC_SetPriority( | ||||
|         FURI_HAL_IBUTTON_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(FURI_HAL_IBUTTON_TIMER_IRQ); | ||||
|  | ||||
|     LL_TIM_EnableCounter(FURI_HAL_IBUTTON_TIMER); | ||||
| } | ||||
|  | ||||
| @@ -80,6 +79,11 @@ void furi_hal_ibutton_emulate_stop() { | ||||
|     if(furi_hal_ibutton->state == FuriHalIbuttonStateRunning) { | ||||
|         furi_hal_ibutton->state = FuriHalIbuttonStateIdle; | ||||
|         LL_TIM_DisableCounter(FURI_HAL_IBUTTON_TIMER); | ||||
|  | ||||
|         FURI_CRITICAL_ENTER(); | ||||
|         LL_TIM_DeInit(FURI_HAL_IBUTTON_TIMER); | ||||
|         FURI_CRITICAL_EXIT(); | ||||
|  | ||||
|         furi_hal_interrupt_set_timer_isr(FURI_HAL_IBUTTON_TIMER, NULL); | ||||
|  | ||||
|         furi_hal_ibutton->callback = NULL; | ||||
|   | ||||
| @@ -193,7 +193,6 @@ void furi_hal_rfid_tim_emulate_start(FuriHalRfidEmulateCallback callback, void* | ||||
|     } | ||||
|  | ||||
|     furi_hal_interrupt_set_timer_isr(FURI_HAL_RFID_EMULATE_TIMER, furi_hal_rfid_emulate_isr); | ||||
|  | ||||
|     NVIC_SetPriority( | ||||
|         FURI_HAL_RFID_EMULATE_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(FURI_HAL_RFID_EMULATE_TIMER_IRQ); | ||||
| @@ -204,9 +203,9 @@ void furi_hal_rfid_tim_emulate_start(FuriHalRfidEmulateCallback callback, void* | ||||
| } | ||||
|  | ||||
| void furi_hal_rfid_tim_emulate_stop() { | ||||
|     furi_hal_interrupt_set_timer_isr(FURI_HAL_RFID_EMULATE_TIMER, NULL); | ||||
|     LL_TIM_DisableCounter(FURI_HAL_RFID_EMULATE_TIMER); | ||||
|     LL_TIM_DisableAllOutputs(FURI_HAL_RFID_EMULATE_TIMER); | ||||
|     furi_hal_interrupt_set_timer_isr(FURI_HAL_RFID_EMULATE_TIMER, NULL); | ||||
| } | ||||
|  | ||||
| void furi_hal_rfid_tim_reset() { | ||||
|   | ||||
| @@ -732,10 +732,6 @@ void furi_hal_subghz_start_async_rx(FuriHalSubGhzCaptureCallback callback, void* | ||||
|     LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1); | ||||
|     LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH2); | ||||
|  | ||||
|     // Enable NVIC | ||||
|     NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(TIM2_IRQn); | ||||
|  | ||||
|     // Start timer | ||||
|     LL_TIM_SetCounter(TIM2, 0); | ||||
|     LL_TIM_EnableCounter(TIM2); | ||||
| @@ -919,6 +915,9 @@ bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void* | ||||
|     LL_TIM_DisableMasterSlaveMode(TIM2); | ||||
|  | ||||
|     furi_hal_interrupt_set_timer_isr(TIM2, furi_hal_subghz_async_tx_timer_isr); | ||||
|     NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(TIM2_IRQn); | ||||
|  | ||||
|     LL_TIM_EnableIT_UPDATE(TIM2); | ||||
|     LL_TIM_EnableDMAReq_UPDATE(TIM2); | ||||
|     LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH2); | ||||
| @@ -930,10 +929,6 @@ bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void* | ||||
| #endif | ||||
|     furi_hal_subghz_tx(); | ||||
|  | ||||
|     // Enable NVIC | ||||
|     NVIC_SetPriority(TIM2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); | ||||
|     NVIC_EnableIRQ(TIM2_IRQn); | ||||
|  | ||||
|     LL_TIM_SetCounter(TIM2, 0); | ||||
|     LL_TIM_EnableCounter(TIM2); | ||||
|     return true; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user