79 lines
2.1 KiB
C
79 lines
2.1 KiB
C
|
#ifndef _SPI_INTERFACE_H_
|
|||
|
#define _SPI_INTERFACE_H_
|
|||
|
#include "typedef.h"
|
|||
|
#include "generic/ioctl.h"
|
|||
|
|
|||
|
|
|||
|
/*enum spi_mode {
|
|||
|
SPI_2WIRE_MODE,
|
|||
|
SPI_ODD_MODE,
|
|||
|
SPI_DUAL_MODE,
|
|||
|
SPI_QUAD_MODE,
|
|||
|
};*/
|
|||
|
enum spi_mode {
|
|||
|
SPI_MODE_BIDIR_1BIT, //支持SPIx(x=0,1,2),全双工,di接收,do发送
|
|||
|
SPI_MODE_UNIDIR_1BIT, //支持SPIx(x=0,1,2),半双工,do分时发送/接收
|
|||
|
SPI_MODE_UNIDIR_2BIT, //支持SPIx(x=0),半双工,di & do共2bit分时发送/接收
|
|||
|
SPI_MODE_UNIDIR_4BIT, //支持SPIx(x=0),半双工,di & do & d2 & d3共4bit分时发送/接收
|
|||
|
};
|
|||
|
|
|||
|
enum {
|
|||
|
SPI0,
|
|||
|
SPI1,
|
|||
|
SPI2,
|
|||
|
SPI_MAX_HW_NUM,
|
|||
|
};
|
|||
|
|
|||
|
#define SPI_MAX_IO_GROUP 2
|
|||
|
|
|||
|
struct spi_io {
|
|||
|
u8 cs_pin;
|
|||
|
u8 di_pin;
|
|||
|
u8 do_pin;
|
|||
|
u8 clk_pin;
|
|||
|
u8 d2_pin;
|
|||
|
u8 d3_pin;
|
|||
|
};
|
|||
|
|
|||
|
struct spi_io_mapping {
|
|||
|
u32 num; //可选端口数量
|
|||
|
struct spi_io io[SPI_MAX_IO_GROUP];
|
|||
|
};
|
|||
|
|
|||
|
enum spi_role {
|
|||
|
SPI_ROLE_MASTER,
|
|||
|
SPI_ROLE_SLAVE,
|
|||
|
};
|
|||
|
|
|||
|
struct spi_platform_data {
|
|||
|
u8 port; //端口,可选'A', 'B','C'
|
|||
|
u8 mode; //模式,选项为enum spi_mode中的枚举常量
|
|||
|
u8 role; //角色,选项为enum spi_role中的枚举常量
|
|||
|
u32 clk; //波特率
|
|||
|
};
|
|||
|
|
|||
|
extern const struct spi_platform_data spi0_p_data;
|
|||
|
extern const struct spi_platform_data spi1_p_data;
|
|||
|
extern const struct spi_platform_data spi2_p_data;
|
|||
|
|
|||
|
typedef const int spi_dev;
|
|||
|
|
|||
|
int spi_open(spi_dev spi);
|
|||
|
int spi_dma_recv(spi_dev spi, void *buf, u32 len);
|
|||
|
int spi_dma_send(spi_dev spi, const void *buf, u32 len);
|
|||
|
void spi_dma_set_addr_for_isr(spi_dev spi, void *buf, u32 len, u8 rw);
|
|||
|
void spi_set_ie(spi_dev spi, u8 en);
|
|||
|
u8 spi_get_pending(spi_dev spi);
|
|||
|
void spi_clear_pending(spi_dev spi);
|
|||
|
void spi_set_bit_mode(spi_dev spi, int mode);
|
|||
|
u8 spi_recv_byte(spi_dev spi, int *err);
|
|||
|
u8 spi_recv_byte_for_isr(spi_dev spi);
|
|||
|
int spi_send_byte(spi_dev spi, u8 byte);
|
|||
|
void spi_send_byte_for_isr(spi_dev spi, u8 byte);
|
|||
|
u8 spi_send_recv_byte(spi_dev spi, u8 byte, int *err);
|
|||
|
int spi_set_baud(spi_dev spi, u32 baud);
|
|||
|
u32 spi_get_baud(spi_dev spi);
|
|||
|
void spi_close(spi_dev spi);
|
|||
|
|
|||
|
#endif
|