* FuriHal: add bus abstraction and port some subsystem to it * Make PVS happy, cleanup code * Update API symbols for f18 * F18: backport bus changes from f7 * Revert to STOP2 sleep mode * Fix downgrading the firmware via updater * Port iButton TIM1 to furi_hal_bus * Port Infrared TIM1 and TIM2 to furi_hal_bus * Just enable the timer bus * Port furi_hal_pwm to bus API * Fix include statement * Port furi_hal_rfid to bus API * Port furi_hal_subghz and others to bus API * Remove unneeded include * Improve furi_hal_infrared defines * Reset LPTIM1 via furi_hal_bus API * Crash when trying to enable an already enabled peripheral * Better defines * Improved checks * Lots of macro wrappers * Copy spi changes for f18 * Fix crashes in LFRFID system * Fix crashes in NFC system * Improve comments * Create FuriHalBus.md * Update FuriHalBus.md * Fix crash when launching updater * Documentation: couple small fixes in FuriHalBus * FuriHal: fix copypaste in furi_hal_rfid_tim_reset * FuriHal: reset radio core related peripherals on restart * FuriHalBus: is enabled routine and bug fix for uart * RFID HAL: accomodate furi hal bus Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com> Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com> Co-authored-by: SG <who.just.the.doctor@gmail.com>
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#include "stm32wbxx.h"
 | 
						|
#include "stdbool.h"
 | 
						|
 | 
						|
typedef enum {
 | 
						|
    FuriHalBusAHB1_GRP1,
 | 
						|
    FuriHalBusDMA1,
 | 
						|
    FuriHalBusDMA2,
 | 
						|
    FuriHalBusDMAMUX1,
 | 
						|
    FuriHalBusCRC,
 | 
						|
    FuriHalBusTSC,
 | 
						|
 | 
						|
    FuriHalBusAHB2_GRP1,
 | 
						|
    FuriHalBusGPIOA,
 | 
						|
    FuriHalBusGPIOB,
 | 
						|
    FuriHalBusGPIOC,
 | 
						|
    FuriHalBusGPIOD,
 | 
						|
    FuriHalBusGPIOE,
 | 
						|
    FuriHalBusGPIOH,
 | 
						|
#if defined(ADC_SUPPORT_5_MSPS)
 | 
						|
    FuriHalBusADC,
 | 
						|
#endif
 | 
						|
    FuriHalBusAES1,
 | 
						|
 | 
						|
    FuriHalBusAHB3_GRP1,
 | 
						|
    FuriHalBusQUADSPI,
 | 
						|
    FuriHalBusPKA,
 | 
						|
    FuriHalBusAES2,
 | 
						|
    FuriHalBusRNG,
 | 
						|
    FuriHalBusHSEM,
 | 
						|
    FuriHalBusIPCC,
 | 
						|
    FuriHalBusFLASH,
 | 
						|
 | 
						|
    FuriHalBusAPB1_GRP1,
 | 
						|
    FuriHalBusTIM2,
 | 
						|
    FuriHalBusLCD,
 | 
						|
    FuriHalBusSPI2,
 | 
						|
    FuriHalBusI2C1,
 | 
						|
    FuriHalBusI2C3,
 | 
						|
    FuriHalBusCRS,
 | 
						|
    FuriHalBusUSB,
 | 
						|
    FuriHalBusLPTIM1,
 | 
						|
 | 
						|
    FuriHalBusAPB1_GRP2,
 | 
						|
    FuriHalBusLPUART1,
 | 
						|
    FuriHalBusLPTIM2,
 | 
						|
 | 
						|
    FuriHalBusAPB2_GRP1,
 | 
						|
#if defined(ADC_SUPPORT_2_5_MSPS)
 | 
						|
    FuriHalBusADC,
 | 
						|
#endif
 | 
						|
    FuriHalBusTIM1,
 | 
						|
    FuriHalBusSPI1,
 | 
						|
    FuriHalBusUSART1,
 | 
						|
    FuriHalBusTIM16,
 | 
						|
    FuriHalBusTIM17,
 | 
						|
    FuriHalBusSAI1,
 | 
						|
 | 
						|
    FuriHalBusAPB3_GRP1,
 | 
						|
    FuriHalBusRF,
 | 
						|
 | 
						|
    FuriHalBusMAX,
 | 
						|
} FuriHalBus;
 | 
						|
 | 
						|
/** Early initialization */
 | 
						|
void furi_hal_bus_init_early();
 | 
						|
 | 
						|
/** Early de-initialization */
 | 
						|
void furi_hal_bus_deinit_early();
 | 
						|
 | 
						|
/**
 | 
						|
 * Enable a peripheral by turning the clocking on and deasserting the reset.
 | 
						|
 * @param [in] bus Peripheral to be enabled.
 | 
						|
 * @warning Peripheral must be in disabled state in order to be enabled.
 | 
						|
 */
 | 
						|
void furi_hal_bus_enable(FuriHalBus bus);
 | 
						|
 | 
						|
/**
 | 
						|
 * Reset a peripheral by sequentially asserting and deasserting the reset.
 | 
						|
 * @param [in] bus Peripheral to be reset.
 | 
						|
 * @warning Peripheral must be in enabled state in order to be reset.
 | 
						|
 */
 | 
						|
void furi_hal_bus_reset(FuriHalBus bus);
 | 
						|
 | 
						|
/**
 | 
						|
 * Disable a peripheral by turning the clocking off and asserting the reset.
 | 
						|
 * @param [in] bus Peripheral to be disabled.
 | 
						|
 * @warning Peripheral must be in enabled state in order to be disabled.
 | 
						|
 */
 | 
						|
void furi_hal_bus_disable(FuriHalBus bus);
 | 
						|
 | 
						|
/** Check if peripheral is enabled
 | 
						|
 *
 | 
						|
 * @warning    FuriHalBusAPB3_GRP1 is a special group of shared peripherals, for
 | 
						|
 *             core1 its clock is always on and the only status we can report is
 | 
						|
 *             peripheral reset status. Check code and Reference Manual for
 | 
						|
 *             details.
 | 
						|
 *
 | 
						|
 * @param[in]  bus   The peripheral to check
 | 
						|
 *
 | 
						|
 * @return     true if enabled or always enabled, false otherwise
 | 
						|
 */
 | 
						|
bool furi_hal_bus_is_enabled(FuriHalBus bus);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 |