mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-04-28 23:39:55 +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