hw_spi.h 2.36 KB
#ifndef _HW_SPI_H
#define _HW_SPI_H


/*********************************/
// for special spi interface
#define SPI_SPECIAL_INTERFACE

#define SPI_W_BUSY_PIN        GPIO0_22_INDEX
#define SPI_R_IRQ_PIN         GPIO0_24_INDEX

#define SPI_WRITE_BYSY        app_gpio_input_level_read(SPI_W_BUSY_PIN)
#define SPI_READ_IRQ          app_gpio_input_level_read(SPI_R_IRQ_PIN)


#define SPI_CS_AUTO			0
#define SPI_CS_MANUAL		1

#define SPI_MASTER			0
#define SPI_SLAVE			1

#define SPI_MODE_0			0
#define SPI_MODE_1			1
#define SPI_MODE_2			2
#define SPI_MODE_3			3

#define SPI_CS0				0
#define SPI_CS1				1
#define SPI_CS2				2
#define SPI_CS3				3

#define SPI_WORD_8BITS			7
#define SPI_WORD_9BITS			8
#define SPI_WORD_10BITS			9
#define SPI_WORD_11BITS			10
#define SPI_WORD_12BITS			11
#define SPI_WORD_13BITS			12
#define SPI_WORD_14BITS			13
#define SPI_WORD_15BITS			14
#define SPI_WORD_16BITS			15

#define SPI_CS_DELAY_HALF_CLK	0
#define SPI_CS_DELAY_1_CLK		1
#define SPI_CS_DELAY_2_CLK		2
#define SPI_CS_DELAY_3_CLK		3
#define SPI_CS_DELAY_4_CLK		4
#define SPI_CS_DELAY_5_CLK		5
#define SPI_CS_DELAY_6_CLK		6
#define SPI_CS_DELAY_7_CLK		7
#define set_spi_cs_delay(a)		bSPI_DELAY = a

//BUS CLK
#define SPI_CLK_DIV_2			0
#define SPI_CLK_DIV_4			1
#define SPI_CLK_DIV_8			2
#define SPI_CLK_DIV_16			3
#define SPI_CLK_DIV_32			4
#define SPI_CLK_DIV_64			5
#define SPI_CLK_DIV_128			6
#define SPI_CLK_DIV_256			7
#define SPI_CLK_DIV_512			8
#define SPI_CLK_DIV_1024		9
#define SPI_CLK_DIV_2048		10
#define SPI_CLK_DIV_4096		11

#define SPI_CLK_DEFAULT         SPI_CLK_DIV_256


void Spi_Init(void);

void Spi_Mode_Set(U8 mode);
void Spi_Cs_Active_Set(U8 con);
void Spi_Clk_Freq_Set(U8 div);
void Spi_Bits_Set(U8 bits);

void Spi_Test(void);
void Spi_Pin_Test(void);

void Spi_Write_Byte(U8 data);
void Spi_Write_2Bytes(U16 data);
void Spi_Write_3Bytes(U32 data);
void Spi_Write_4Bytes(U32 data);
void Spi_Bits_Set(U8 bits);
void Spi_Write_Bits(U16 data);

void Spi_Write_Byte_1(U8 data, U8 cs_con);

void Spi_Write(U8 *buf, U32 bytes_count);
void Spi_Read(U8 *buf, U32 bytes_count);
void Spi_Write_1(U8 *buf, U32 bytes_count, U8 cs_con);
void Spi_Read_1(U8 *buf, U32 bytes_count, U8 cs_con);

void Spi_Page_Write(U8 addr, U8 *buf, U32 bytes_count);
void Spi_Page_Read(U8 addr, U8 *buf, U32 bytes_count);

void Spi_Write_Byte_Continue(U8 data, U8 cs_con);
U8 Spi_Read_Byte_Contine(U8 cs_con);

#endif //_HW_SPI_H