#ifndef _SPI_H
#define _SPI_H


#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>  //printf

#include "sys.h"
#include "utilities.h"

#define   DEV_CE_CLK                 RCC_AHBPeriph_GPIOA
#define   DEV_CE_PIN                 GPIO_Pin_8                   /* PA.8 */
#define   DEV_CE_GPIO_PORT          GPIOA                        /* GPIOA */
#define   DEV_CE_HIGH                GPIO_HIGH(DEV_CE_GPIO_PORT,DEV_CE_PIN )
#define   DEV_CE_LOW                 GPIO_LOW(DEV_CE_GPIO_PORT,DEV_CE_PIN )


#define   DEV_WAKEUP_CLK             RCC_AHBPeriph_GPIOA
#define   DEV_WAKEUP_PIN             GPIO_Pin_11                  /* PA.11 */
#define   DEV_WAKEUP_GPIO_PORT      GPIOA                        /* GPIOA */
#define   DEV_WAKEUP_PinSource       GPIO_PinSource11



#define DEV_SPI                      SPI2
#define SPI_CLK                      RCC_APB1Periph_SPI2

#define SPI_SCK_PIN                  GPIO_Pin_13                 /* PB.13 */
#define SPI_SCK_GPIO_PORT            GPIOB                       /* GPIOB */
#define SPI_SCK_GPIO_CLK             RCC_AHBPeriph_GPIOB
#define SPI_SCK_SOURCE               GPIO_PinSource13
#define SPI_SCK_AF                   GPIO_AF_0


#define SPI_MISO_PIN                 GPIO_Pin_14                 /* PB.14 */
#define SPI_MISO_GPIO_PORT           GPIOB                       /* GPIOB */
#define SPI_MISO_GPIO_CLK            RCC_AHBPeriph_GPIOB
#define SPI_MISO_SOURCE              GPIO_PinSource14
#define SPI_MISO_AF                  GPIO_AF_0


#define SPI_MOSI_PIN                 GPIO_Pin_15                  /* PB.15 */
#define SPI_MOSI_GPIO_PORT           GPIOB                        /* GPIOB */
#define SPI_MOSI_GPIO_CLK            RCC_AHBPeriph_GPIOB
#define SPI_MOSI_SOURCE              GPIO_PinSource15
#define SPI_MOSI_AF                  GPIO_AF_0

#define SPI_CS_PIN                   GPIO_Pin_12                  /* PB.12 */  //用作普通IO口
#define SPI_CS_GPIO_PORT             GPIOB                        /* GPIOB */


#define SPI_CS_HIGH                  GPIO_HIGH(SPI_CS_GPIO_PORT,SPI_CS_PIN )
#define SPI_CS_LOW                   GPIO_LOW(SPI_CS_GPIO_PORT,SPI_CS_PIN )


#define   DEV_IRQ2_CLK               RCC_AHBPeriph_GPIOB
#define   DEV_IRQ2_PIN               GPIO_Pin_0                   /* PB.0 */  //用作IRQ中断管脚
#define   DEV_IRQ2_GPIO_PORT         GPIOB                        /* GPIOB */
#define   DEV_EXTI_Line_2            EXTI_Line0
#define   DEV_EXTI_PinSource_2       EXTI_PinSource0
#define   DEV_EXTI_PortSource_2      EXTI_PortSourceGPIOB
#define   DEV_IRQn_2                 EXTI0_1_IRQn

#define   DEV_IRQ1_CLK               RCC_AHBPeriph_GPIOC
#define   DEV_IRQ1_PIN               GPIO_Pin_1                   /* PC.1 */
#define   DEV_IRQ1_GPIO_PORT        GPIOC                        /* GPIOC */
#define   DEV_EXTI_Line_1            EXTI_Line1
#define   DEV_EXTI_PinSource_1       EXTI_PinSource1
#define   DEV_EXTI_PortSource_1      EXTI_PortSourceGPIOC
#define   DEV_IRQn_1                 EXTI0_1_IRQn


#define   DEV_TXON_CLK               RCC_AHBPeriph_GPIOC
#define   DEV_TXON_PIN               GPIO_Pin_8                   /* PC.8 */  //
#define   DEV_TXON_GPIO_PORT        GPIOC                        /* GPIOC */
#define   DEV_TXON_HIGH              GPIO_HIGH(DEV_TXON_GPIO_PORT,DEV_TXON_PIN )
#define   DEV_TXON_LOW               GPIO_LOW(DEV_TXON_GPIO_PORT,DEV_TXON_PIN )


#define   DEV_RXON_CLK               RCC_AHBPeriph_GPIOC
#define   DEV_RXON_PIN               GPIO_Pin_7                   /* PB.7 */  //
#define   DEV_RXON_GPIO_PORT        GPIOC                        /* GPIOC */
#define   DEV_RXON_HIGH              GPIO_HIGH(DEV_RXON_GPIO_PORT,DEV_RXON_PIN )
#define   DEV_RXON_LOW               GPIO_LOW(DEV_RXON_GPIO_PORT,DEV_RXON_PIN )


#define   DEV_DIO_CLK               RCC_AHBPeriph_GPIOC
#define   DEV_DIO_CLK_PIN               GPIO_Pin_0                   /* PC.0 */  //
#define   DEV_DIO_CLK_GPIO_PORT        GPIOC                        /* GPIOC */



#define   DEV_MFOUT_CLK               RCC_AHBPeriph_GPIOC                            //测试用PWM输出
#define   DEV_MFOUT_PIN               GPIO_Pin_2
#define   DEV_MFOUT_GPIO_PORT      GPIOC

#ifdef HW_V0
#define   DEV_MFIN_CLK               RCC_AHBPeriph_GPIOC                            //测试用PWM输出
#define   DEV_MFIN_PIN               GPIO_Pin_4
#define   DEV_MFIN_GPIO_PORT        GPIOC
#else
#define   DEV_MFIN_CLK               RCC_AHBPeriph_GPIOA                            //测试用PWM输出
#define   DEV_MFIN_PIN               GPIO_Pin_11
#define   DEV_MFIN_GPIO_PORT      GPIOA
#endif
#define   DEV_MFIN_HIGH              GPIO_HIGH(DEV_MFIN_GPIO_PORT,DEV_MFIN_PIN )
#define   DEV_MFIN_LOW               GPIO_LOW(DEV_MFIN_GPIO_PORT,DEV_MFIN_PIN )



/* TRX_EN */
#define   DEV_TRX_PIN               GPIO_Pin_4
#define   DEV_TRX_GPIO_PORT        GPIOC
#define   DEV_TRX_EN              GPIO_HIGH(DEV_TRX_GPIO_PORT,DEV_TRX_PIN )
#define   DEV_TRX_DIS               GPIO_LOW(DEV_TRX_GPIO_PORT,DEV_TRX_PIN )

/* WKUP_EN */

#define   DEV_WKUP_PIN               GPIO_Pin_5
#define   DEV_WKUP_GPIO_PORT        GPIOC
#define   DEV_WKUP_EN              GPIO_HIGH(DEV_WKUP_GPIO_PORT,DEV_WKUP_PIN )
#define   DEV_WKUP_DIS              GPIO_LOW(DEV_WKUP_GPIO_PORT,DEV_WKUP_PIN )





extern  void SPI_Test(u8 sr,u32 cnt);
extern  void PWM_Init(void);
extern  void DEV_Gen14K(u16 pwm_cnt,u16 pwm_en);
extern void DEV_SPI_Init(void);
extern void INT_EXTI_Config(void);
extern void TIM17_Configuration(void);
extern void DEV_CE_Config(void);
extern void DEV_WriteSR(u8 sr,u8 value);
extern u8    DEV_ReadSR(u8 sr);
extern void DEV_SPI_Write(u8 WriteAddr,u8* pBuffer,u32 NumByteToRead);
extern void DEV_SPI_Read(u8 ReadAddr,u8* pBuffer,u32 NumByteToRead);
extern void PIN_MUX_Config(u8 IOMUX);
extern void EXTIO_IRQEN(u8 irq_en);

void _ASSERT_SPI_CLK_LOW(void);
void _RELEASE_SPI_CLK_LOW(void);
#ifdef __cplusplus
}
#endif
#endif
