// SPI接口驱动(GPIO模拟)
// 杭州秒寻科技有限公司
// 周涛
// 2023-09-30
// 4线制，模式0
// 注意：在使用读写接口前，请先根据项目具体使用GPIO管脚替换头文件中的12个宏

#ifndef DRIVERSPIGPIO_H
#define DRIVERSPIGPIO_H

#include "sysdef.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"

//定义芯片复位端口和管脚
#define DRIVER_SYNCTX_SPIGPIO_RESET_CLK RCC_AHB1Periph_GPIOD // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_RESET_PORT GPIOD               // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_RESET_PIN GPIO_Pin_15          // 注意：需要根据项目修改

////12个宏定义，需要根据项目具体使用的GPIO管脚修改
// CS管脚定义
#define DRIVER_SYNCTX_SPIGPIO_CS_CLK RCC_AHB1Periph_GPIOE // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_CS_PORT GPIOE               // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_CS_PIN GPIO_Pin_4           // 注意：需要根据项目修改
// SCK管脚定义
#define DRIVER_SYNCTX_SPIGPIO_SCK_CLK RCC_AHB1Periph_GPIOE // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_SCK_PORT GPIOE               // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_SCK_PIN GPIO_Pin_2           // 注意：需要根据项目修改
// MOSI管脚定义
#define DRIVER_SYNCTX_SPIGPIO_MOSI_CLK RCC_AHB1Periph_GPIOE // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_MOSI_PORT GPIOE               // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_MOSI_PIN GPIO_Pin_6           // 注意：需要根据项目修改
// MISO管脚定义
#define DRIVER_SYNCTX_SPIGPIO_MISO_CLK RCC_AHB1Periph_GPIOE // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_MISO_PORT GPIOE               // 注意：需要根据项目修改
#define DRIVER_SYNCTX_SPIGPIO_MISO_PIN GPIO_Pin_5           // 注意：需要根据项目修改

// 供外部使用的接口
void driver_synctx_spi_init();
void driver_synctx_spi_reset();
void driver_synctx_spi_spi_start();
void driver_synctx_spi_spi_stop();
uint8 driver_synctx_spi_exchange_byte(uint8 byData);

// 内部使用接口
void driver_synctx_spi_wr_cs(uint8 byBitValue);
void driver_synctx_spi_wr_sck(uint8 byBitValue);
void driver_synctx_spi_wr_mosi(uint8 byBitValue);
uint8 driver_synctx_spi_rd_miso();

#endif
