mirror of
				https://github.com/goldenfishs/MRobot.git
				synced 2025-10-30 22:55:44 +08:00 
			
		
		
		
	添加bsp_spi
This commit is contained in:
		
							parent
							
								
									8167fd91ca
								
							
						
					
					
						commit
						05b2c1387d
					
				
							
								
								
									
										106
									
								
								User/bsp/spi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								User/bsp/spi.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | ||||
| /* Includes ----------------------------------------------------------------- */ | ||||
| #include "bsp\spi.h" | ||||
| 
 | ||||
| /* Private define ----------------------------------------------------------- */ | ||||
| /* Private macro ------------------------------------------------------------ */ | ||||
| /* Private typedef ---------------------------------------------------------- */ | ||||
| /* Private variables -------------------------------------------------------- */ | ||||
| static void (*SPI_Callback[BSP_SPI_NUM][BSP_SPI_CB_NUM])(void); | ||||
| 
 | ||||
| /* Private function  -------------------------------------------------------- */ | ||||
| static BSP_SPI_t SPI_Get(SPI_HandleTypeDef *hspi) { | ||||
|   if (hspi->Instance == SPI1) | ||||
|     return BSP_SPI_OLED; | ||||
|   /*
 | ||||
|   else if (hspi->Instance == SPIX) | ||||
|                   return BSP_SPI_XXX; | ||||
|   */ | ||||
|   else | ||||
|     return BSP_SPI_ERR; | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[bsp_spi][BSP_SPI_TX_CPLT_CB]) { | ||||
|       SPI_Callback[bsp_spi][BSP_SPI_TX_CPLT_CB](); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_RX_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_RX_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_RX_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_RX_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_HALF_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_HALF_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_RX_HALF_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_RX_HALF_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_RX_HALF_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_TX_RX_HALF_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_ERROR_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_ERROR_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) { | ||||
|   BSP_SPI_t bsp_spi = SPI_Get(hspi); | ||||
|   if (bsp_spi != BSP_SPI_ERR) { | ||||
|     if (SPI_Callback[SPI_Get(hspi)][BSP_SPI_ABORT_CPLT_CB]) | ||||
|       SPI_Callback[SPI_Get(hspi)][BSP_SPI_ABORT_CPLT_CB](); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /* Exported functions ------------------------------------------------------- */ | ||||
| SPI_HandleTypeDef *BSP_SPI_GetHandle(BSP_SPI_t spi) { | ||||
|   switch (spi) { | ||||
|     case BSP_SPI_OLED: | ||||
|       return &hspi1; | ||||
|     /*
 | ||||
|     case BSP_SPI_XXX: | ||||
|             return &hspiX; | ||||
|     */ | ||||
|     default: | ||||
|       return NULL; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| int8_t BSP_SPI_RegisterCallback(BSP_SPI_t spi, BSP_SPI_Callback_t type, | ||||
|                                 void (*callback)(void)) { | ||||
|   if (callback == NULL) return BSP_ERR_NULL; | ||||
|   SPI_Callback[spi][type] = callback; | ||||
|   return BSP_OK; | ||||
| } | ||||
							
								
								
									
										46
									
								
								User/bsp/spi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								User/bsp/spi.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| /* Includes ----------------------------------------------------------------- */ | ||||
| #include <spi.h> | ||||
| 
 | ||||
| #include "bsp/bsp.h" | ||||
| 
 | ||||
| /* Exported constants ------------------------------------------------------- */ | ||||
| /* Exported macro ----------------------------------------------------------- */ | ||||
| /* Exported types ----------------------------------------------------------- */ | ||||
| 
 | ||||
| /* 要添加使用SPI的新设备,需要先在此添加对应的枚举值 */ | ||||
| 
 | ||||
| /* SPI实体枚举,与设备对应 */ | ||||
| typedef enum { | ||||
|   BSP_SPI_OLED, | ||||
|   /* BSP_SPI_XXX,*/ | ||||
|   BSP_SPI_NUM, | ||||
|   BSP_SPI_ERR, | ||||
| } BSP_SPI_t; | ||||
| 
 | ||||
| /* SPI支持的中断回调函数类型,具体参考HAL中定义 */ | ||||
| typedef enum { | ||||
|   BSP_SPI_TX_CPLT_CB, | ||||
|   BSP_SPI_RX_CPLT_CB, | ||||
|   BSP_SPI_TX_RX_CPLT_CB, | ||||
|   BSP_SPI_TX_HALF_CPLT_CB, | ||||
|   BSP_SPI_RX_HALF_CPLT_CB, | ||||
|   BSP_SPI_TX_RX_HALF_CPLT_CB, | ||||
|   BSP_SPI_ERROR_CB, | ||||
|   BSP_SPI_ABORT_CPLT_CB, | ||||
|   BSP_SPI_CB_NUM, | ||||
| } BSP_SPI_Callback_t; | ||||
| 
 | ||||
| /* Exported functions prototypes -------------------------------------------- */ | ||||
| SPI_HandleTypeDef *BSP_SPI_GetHandle(BSP_SPI_t spi); | ||||
| int8_t BSP_SPI_RegisterCallback(BSP_SPI_t spi, BSP_SPI_Callback_t type, | ||||
|                                 void (*callback)(void)); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 RB
						RB