* Copyright (c) 2021-2022 Bestechnic (Shanghai) Co., Ltd. All rights reserved.
*
* This file is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
#ifndef __SPI_BES_H__
#define __SPI_BES_H__
#include "hal_spi.h"
#include "hal_gpio.h"
#include "hal_iomux.h"
#ifdef CHIP_BEST2003
#include "hal_iomux_best2003.h"
#endif
#include "osal_mutex.h"
#include "osal_sem.h"
#ifdef __cplusplus
extern "C" {
#endif
enum SPI_WORK_MODE {
SPI_WORK_MODE_0,
SPI_WORK_MODE_2,
SPI_WORK_MODE_1,
SPI_WORK_MODE_3,
};
enum SPI_TRANSFER_MODE {
SPI_TRANSFER_DMA,
SPI_TRANSFER_NORMAL,
};
struct SpiResource {
uint32_t num;
uint32_t speed;
enum SPI_TRANSFER_MODE transmode;
enum SPI_WORK_MODE mode;
uint32_t dataSize;
uint32_t csNum;
uint32_t spiCsSoft;
uint32_t spiClkPin;
uint32_t spiMosiPin;
uint32_t spiMisoPin;
uint32_t spiCsPin;
};
struct SPI_CTX_OBJ_T {
enum HAL_IOMUX_PIN_T spiPinCS0;
enum HAL_IOMUX_FUNCTION_T spiFunDI0;
enum HAL_IOMUX_FUNCTION_T spiFunCLK;
enum HAL_IOMUX_FUNCTION_T spiFunCS0;
enum HAL_IOMUX_FUNCTION_T spiFunDIO;
struct OsalSem sem;
struct OsalMutex mutex;
int (*SpiOpen)(const struct HAL_SPI_CFG_T *cfg);
int (*SpiDmaSend)(const void *data, uint32_t len, HAL_SPI_DMA_HANDLER_T handler);
int (*SpiDmaRecv)(const void *cmd, void *data, uint32_t len, HAL_SPI_DMA_HANDLER_T handler);
int (*SpiSend)(const void *data, uint32_t len);
int (*SpiRecv)(const void *cmd, void *data, uint32_t len);
void (*SpiDmaIrq)(int error);
int (*SpiClose)(uint32_t cs);
};
struct SpiDevice {
uint32_t spiId;
struct SpiResource resource;
struct HAL_SPI_CFG_T spiDevCfg;
};
#ifdef __cplusplus
}
#endif
#endif