HW_Lib/lib/inc/spi/spi.h

120 lines
3.8 KiB
C
Raw Normal View History

2024-05-09 05:56:55 +00:00
//
// Created by lydxh on 2024/4/8.
//
#ifndef HW_LIB_SPI_H
#define HW_LIB_SPI_H
#include <stdint.h>
#define HIGH 1
#define LOW 0
#define NOP() ;
#define DELAY1US() NOP()
/**
* @brief SPI
**/
typedef enum {
Mode0, // 时钟空闲状态为低电平,数据在时钟的下降沿采样
Mode1, // 时钟空闲状态为低电平,数据在时钟的上升沿采样
Mode2, // 时钟空闲状态为高电平,数据在时钟的下降沿采样
Mode3 // 时钟空闲状态为高电平,数据在时钟的上升沿采样
} mode;
/**
* @brief
**/
typedef enum {
LTL, // 小端模式,低字节在低地址
LTB, // 小端模式,低字节在高地址
BTB, // 大端模式,低字节在低地址
BTL // 大端模式,低字节在高地址
} endian;
/**
* @brief SPI
**/
typedef struct {
uint8_t (*MOSI_SET)(uint8_t); // 设置MOSI引脚状态的函数指针
uint8_t (*SCK_SET)(uint8_t); // 设置SCK引脚状态的函数指针
uint8_t (*CS_SET)(uint8_t); // 设置CS引脚状态的函数指针
uint8_t (*MISO)(); // 读取MISO引脚状态的函数指针
mode MODE; // SPI模式
uint8_t CS; // CS引脚编号
endian ENDIAN; // 数据端序
} HW_Dev_Spi;
/**
* @brief SPI
* @param Dev: [] SPI
* @param Write_Date: []
* @return
**/
uint8_t HW_SPI_RW(HW_Dev_Spi Dev, uint8_t Write_Date);
/**
* @brief SPI
* @param Dev: [] SPI
* @param Write_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_WL(HW_Dev_Spi Dev, uint8_t *Write_Date, uint32_t Len);
/**
* @brief SPI
* @param Dev: [] SPI
* @param Read_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_RL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint32_t Len);
/**
* @brief SPI
* @param Dev: [] SPI
* @param Read_Date: []
* @param Write_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_RWL(HW_Dev_Spi Dev, uint8_t *Read_Date, uint8_t *Write_Date, uint32_t Len);
/**
* @brief SPI 16
* @param Dev: [] SPI
* @param Write_Date: []
* @return
**/
uint16_t HW_SPI_RW16(HW_Dev_Spi Dev, uint16_t Write_Date);
/**
* @brief SPI 16
* @param Dev: [] SPI
* @param Read_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_RL16(HW_Dev_Spi Dev, uint16_t *Read_Date, uint32_t Len);
/**
* @brief SPI 16
* @param Dev: [] SPI
* @param Write_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_WL16(HW_Dev_Spi Dev, uint16_t *Write_Date, uint32_t Len);
/**
* @brief SPI 16
* @param Dev: [] SPI
* @param Read_Date: []
* @param Write_Date: []
* @param Len: []
* @return void
**/
void HW_SPI_RWL16(HW_Dev_Spi Dev, uint16_t *Read_Date, uint16_t *Write_Date, uint32_t Len);
#endif //HW_LIB_SPI_H