#ifndef __SN32F770_SWSPI_H
#define __SN32F770_SWSPI_H


/*_____ I N C L U D E S ____________________________________________________*/
#include "SWSPI_User.h"

/*_____ D E F I N I T I O N S ______________________________________________*/
#define	BIT_0		(0x01 << 0)
#define	BIT_1		(0x01 << 1)
#define	BIT_2		(0x01 << 2)
#define	BIT_3		(0x01 << 3)
#define	BIT_4		(0x01 << 4)
#define	BIT_5		(0x01 << 5)
#define	BIT_6		(0x01 << 6)
#define	BIT_7		(0x01 << 7)

extern	void 	Mn_SwSPI_Init(void);
extern	void	Mn_SwSPI_NByte (uint32_t wDNum);
extern	void	Mn_SwSPI_NByte_Asm(uint32_t	wDNum);
extern	__asm	void	Fn_SwSPI_Byte_Asm(uint8_t	bTxFIFO, uint8_t *bRxFIFO);


extern	uint8_t bSPI_TxFIFO[SPI_TX_FIFO_LENGTH];
extern	uint8_t bSPI_RxFIFO[SPI_RX_FIFO_LENGTH];




/*_____ M A C R O S ________________________________________________________*/


#if	(__SPI_CS_PORT == 0)
	#define	__SPI_CS_OUTPUT_MODE  		SN_GPIO0->MODE|=(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_H 	 			SN_GPIO0->BSET =(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_L  				SN_GPIO0->BCLR =(0x01<<__SPI_CS_BIT);
#elif	(__SPI_CS_PORT == 1)
	#define	__SPI_CS_OUTPUT_MODE  		SN_GPIO1->MODE|=(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_H 	 			SN_GPIO1->BSET =(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_L  				SN_GPIO1->BCLR =(0x01<<__SPI_CS_BIT);
#else
	#define	__SPI_CS_OUTPUT_MODE  		SN_GPIO2->MODE|=(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_H 	 			SN_GPIO2->BSET =(0x01<<__SPI_CS_BIT);
	#define __SPI_CS_OUTPUT_L  				SN_GPIO2->BCLR =(0x01<<__SPI_CS_BIT);
#endif


#if	(__SPI_SCK_PORT == 0)
	#define	__SPI_SCK_OUTPUT_MODE  		SN_GPIO0->MODE|=(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_H 	 			SN_GPIO0->BSET =(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_L  			SN_GPIO0->BCLR =(0x01<<__SPI_SCK_BIT);
#elif	(__SPI_SCK_PORT == 1)
	#define	__SPI_SCK_OUTPUT_MODE  		SN_GPIO1->MODE|=(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_H 	 			SN_GPIO1->BSET =(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_L  			SN_GPIO1->BCLR =(0x01<<__SPI_SCK_BIT);
#else
	#define	__SPI_SCK_OUTPUT_MODE  		SN_GPIO2->MODE|=(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_H 	 			SN_GPIO2->BSET =(0x01<<__SPI_SCK_BIT);
	#define __SPI_SCK_OUTPUT_L  			SN_GPIO2->BCLR =(0x01<<__SPI_SCK_BIT);
#endif


#if	(__SPI_MOSI_PORT == 0)
	#define	__SPI_MOSI_OUTPUT_MODE  	SN_GPIO0->MODE|=(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_H 	 		SN_GPIO0->BSET =(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_L  			SN_GPIO0->BCLR =(0x01<<__SPI_MOSI_BIT);
#elif	(__SPI_MOSI_PORT == 1)
	#define	__SPI_MOSI_OUTPUT_MODE  	SN_GPIO1->MODE|=(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_H 	 		SN_GPIO1->BSET =(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_L  			SN_GPIO1->BCLR =(0x01<<__SPI_MOSI_BIT);
#else
	#define	__SPI_MOSI_OUTPUT_MODE  	SN_GPIO2->MODE|=(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_H 	 		SN_GPIO2->BSET =(0x01<<__SPI_MOSI_BIT);
	#define __SPI_MOSI_OUTPUT_L  			SN_GPIO2->BCLR =(0x01<<__SPI_MOSI_BIT);
#endif


#if	(__SPI_MISO_PORT == 0)
	#define	__SPI_MISO_INPUT_MODE			SN_GPIO0->MODE&=~(0x01<<__SPI_MISO_BIT);
	#define	__SPI_MISO_DATA						((SN_GPIO0->DATA)&(0x01<<__SPI_MISO_BIT))==(0x01<<__SPI_MISO_BIT)
#elif	(__SPI_MISO_PORT == 1)
	#define	__SPI_MISO_INPUT_MODE			SN_GPIO1->MODE&=~(0x01<<__SPI_MISO_BIT);
	#define	__SPI_MISO_DATA						((SN_GPIO1->DATA)&(0x01<<__SPI_MISO_BIT))==(0x01<<__SPI_MISO_BIT)
#else
	#define	__SPI_MISO_INPUT_MODE			SN_GPIO2->MODE&=~(0x01<<__SPI_MISO_BIT);
	#define	__SPI_MISO_DATA						((SN_GPIO2->DATA)&(0x01<<__SPI_MISO_BIT))==(0x01<<__SPI_MISO_BIT)
#endif

	
/*_____ D E C L A R A T I O N S ____________________________________________*/

#endif	/*__SN32F770_SWSPI_H*/

