270 lines
8.9 KiB
C
270 lines
8.9 KiB
C
/*
|
||
* File: hc32_gp30_driver.h
|
||
* Author: Administrator
|
||
*
|
||
* Created on 2020-7-10
|
||
*/
|
||
|
||
|
||
#ifndef UWater_GP22_DRIVER_H
|
||
#define UWater_GP22_DRIVER_H
|
||
|
||
#include "sys_config.h"
|
||
#include "ddl.h"
|
||
#include "type.h"
|
||
|
||
|
||
/*************************宏定义****************************/
|
||
|
||
#define DLY_SWITCH 1//DLY自动调节开关,屏蔽此代码即关闭自动调节
|
||
#define GP30_LOAD_EER_CNT 300 // GP30初始化命令发送后,查询是否完成的次数
|
||
#define GP30_LOAD_FAIL_CNT 3 // GP30FWD下载不进去的错误次数
|
||
//#define GP22_CLK_CAL 2400
|
||
|
||
#define GP22_OVERTIME 110000 //GP22超时定时器用 定时110ms
|
||
#define GP22_RESET_TIME 1000
|
||
#define GP22_IO_DELAY_TIME 1000
|
||
#define SAMPLE_OK 1
|
||
#define SAMPLE_ERR 2
|
||
|
||
#define SAMPLE_8HZ 1
|
||
#define SAMPLE_16HZ 2
|
||
|
||
//#define SAMPLE_BUBBLE 4
|
||
#define SAMPLE_ING 4
|
||
#define ERR_SHORT 1
|
||
#define ERR_BROKEN 2
|
||
#define ERR_NO_WATER 4
|
||
#define ERR_GP22_ERR 8
|
||
#define ERR_REVERSE 16
|
||
//主状态机
|
||
#define GP22_S0 0
|
||
#define GP22_S1 1
|
||
#define GP22_S2 2
|
||
#define GP22_S3 3
|
||
#define GP22_S4 4
|
||
#define GP22_S5 5
|
||
#define GP22_S6 6
|
||
#define GP22_S7 7
|
||
#define GP22_S8 8
|
||
#define GP22_S9 9
|
||
#define GP22_S10 10
|
||
#define GP22_S11 11
|
||
#define GP22_S12 12
|
||
#define GP22_S13 13
|
||
#define GP22_S14 14
|
||
#define GP22_S15 15
|
||
#define GP22_S16 16
|
||
#define GP22_S17 17
|
||
#define GP22_S18 18
|
||
#define GP22_S19 19
|
||
#define GP22_S20 20
|
||
#define GP22_S21 21
|
||
#define GP22_S22 22
|
||
#define GP22_S23 23
|
||
#define GP22_S24 24
|
||
#define GP22_S25 25
|
||
#define GP22_S26 26
|
||
#define GP22_S27 27
|
||
#define GP22_S28 28
|
||
#define GP22_S29 29
|
||
#define GP22_S30 30
|
||
#define GP22_S31 31
|
||
#define GP22_S32 32
|
||
#define GP22_S33 33
|
||
#define GP22_S34 34
|
||
#define GP22_S35 35
|
||
|
||
//SPI通信中断状态机
|
||
#define SPI_ISR_S0 0
|
||
#define SPI_ISR_S1 1
|
||
#define SPI_ISR_S2 2
|
||
#define SPI_ISR_S3 3
|
||
|
||
#define GP30_FIRST_FLAG 0x11
|
||
#define GP30_DRIVER_SYSTEM_PARM_ADDR 0x900
|
||
#define GP30_FIRSTPOWER_ADDR 0x932
|
||
#define AS6031_FWC_BLOCK_LENGTH 128 //每个块的长度
|
||
|
||
//GP22使用的SPI口,将要开启的SPI置1,在GP22驱动中只能有一个SPI口置1,谨慎设置,SPI使用要与原理对应。
|
||
//时钟源
|
||
#define GP22_SPI_FCLK STM32_SYSCLK
|
||
//时钟分频
|
||
#define GP22_SPI_BR_2 ((uint32_t)0x00u)
|
||
#define GP22_SPI_BR_4 ((uint32_t)0x01u)
|
||
#define GP22_SPI_BR_8 ((uint32_t)0x02u)
|
||
#define GP22_SPI_BR_16 ((uint32_t)0x03u)
|
||
#define GP22_SPI_BR_32 ((uint32_t)0x80u)
|
||
#define GP22_SPI_BR_64 ((uint32_t)0x81u)
|
||
#define GP22_SPI_BR_128 ((uint32_t)0x82u)
|
||
//SPI时钟频率
|
||
#define GP22_SPI_BR_USE GP22_SPI_BR_8
|
||
|
||
//时钟极性
|
||
#define GP22_SPI_POLARITY_LOW (0u)
|
||
#define GP22_SPI_POLARITY_HIGH (0x8u)
|
||
// SPI Clock Phase
|
||
#define GP22_SPI_PHASE_1EDGE (0u)
|
||
#define GP22_SPI_PHASE_2EDGE (0x4u)
|
||
|
||
// X32K OUT
|
||
#define GP22_X32K_GPIO (GpioPortB)
|
||
#define GP22_X32K_PIN (GpioPin3)
|
||
#define GP22_X32K_AF (GpioAf6)
|
||
|
||
#define GP22_GPIO_AF_NULL (GpioAf0)
|
||
// SPI IO配置、优先级、时钟
|
||
#define GP22_SPI (M0P_SPI1)
|
||
#define GP22_SPI_CLK (SysctrlPeripheralSpi1)
|
||
#define GP22_SPI_RESET (ResetMskSpi1)
|
||
|
||
//#define GP22_RSTN_PORT (GpioPortA)
|
||
//#define GP22_RSTN_PIN (GpioPin3)
|
||
|
||
#define GP22_INT_GPIO (GpioPortD)
|
||
#define GP22_INT_PIN (GpioPin2)
|
||
#define GP22_INT_GPIO_MODE (GpioIrqFalling)
|
||
#define GP22_INT_IRQ (PORTD_F_IRQn)
|
||
#define GP22_INT_IRQLevel (IrqLevel3)
|
||
|
||
#define GP22_SSN_PORT (GpioPortD)
|
||
#define GP22_SSN_PIN (GpioPin0)
|
||
#define GP22_SSN_AF (GpioAf2)
|
||
|
||
#define GP22_SCK_GPIO (GpioPortD)
|
||
#define GP22_SCK_PIN (GpioPin1)
|
||
#define GP22_SCK_AF (GpioAf2)
|
||
|
||
#define GP22_SO_GPIO (GpioPortD)
|
||
#define GP22_SO_PIN (GpioPin3)
|
||
#define GP22_SO_AF (GpioAf2)
|
||
|
||
#define GP22_SI_GPIO (GpioPortD)
|
||
#define GP22_SI_PIN (GpioPin4)
|
||
#define GP22_SI_AF (GpioAf2)
|
||
|
||
#define GP22_PRIORITY (IrqLevel3)
|
||
/***********引脚控制*************/
|
||
/***********引脚控制*************/
|
||
//#define GP22_RSTN_ENABLE Gpio_WriteOutputIO(GP22_RSTN_PORT, GP22_RSTN_PIN, GPIO_PIN_RESET)
|
||
//#define GP22_RSTN_DISABLE Gpio_WriteOutputIO(GP22_RSTN_PORT, GP22_RSTN_PIN, GPIO_PIN_SET)
|
||
#define GP22_SSN_ENABLE Spi_SetCS(GP22_SPI, FALSE);
|
||
#define GP22_SSN_DISABLE Spi_SetCS(GP22_SPI, TRUE);
|
||
|
||
#pragma pack(1)
|
||
typedef union
|
||
{
|
||
struct
|
||
{
|
||
u8 flow_up_time[4];
|
||
u8 flow_down_time[4];
|
||
}flow; //GP22
|
||
u32 gp22[2];
|
||
} DATA_GP22;
|
||
|
||
typedef union
|
||
{
|
||
uint8_t value[4];
|
||
uint32_t data;
|
||
} U8TOU32;
|
||
typedef union
|
||
{
|
||
uint8_t value[8];
|
||
uint64_t data;
|
||
} U8TOU64;
|
||
|
||
typedef union
|
||
{
|
||
uint8_t value[2];
|
||
uint16_t time;
|
||
} U8TOU16;
|
||
|
||
/* SPI Configuration Structure definition
|
||
*/
|
||
typedef struct
|
||
{
|
||
uint32_t CLKPolarity; /*!< Specifies the serial clock steady state.
|
||
This parameter can be a value of @ref SPI_Clock_Polarity */
|
||
|
||
uint32_t CLKPhase; /*!< Specifies the clock active edge for the bit capture.
|
||
This parameter can be a value of @ref SPI_Clock_Phase */
|
||
|
||
uint32_t NSS; /*!< Specifies whether the NSS signal is managed by
|
||
hardware (NSS pin) or by software using the SSI bit.
|
||
This parameter can be a value of @ref SPI_Slave_Select_management */
|
||
|
||
uint32_t BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
|
||
used to configure the transmit and receive SCK clock.
|
||
This parameter can be a value of @ref SPI_BaudRate_Prescaler
|
||
@note The communication clock is derived from the master
|
||
clock. The slave clock does not need to be set. */
|
||
} SPI_InitTypeStruct;
|
||
|
||
/**
|
||
* @brief SPI handle Structure definition
|
||
*/
|
||
typedef struct _GP22_SPI_STRUCT
|
||
{
|
||
M0P_SPI_TypeDef *Instance; /* SPI registers base address */
|
||
|
||
SPI_InitTypeStruct Init; /* SPI communication parameters */
|
||
|
||
uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */
|
||
|
||
uint16_t TxXferSize; /* SPI Tx Transfer size */
|
||
|
||
uint16_t TxXferCount; /* SPI Tx Transfer Counter */
|
||
|
||
uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */
|
||
|
||
uint16_t RxXferSize; /* SPI Rx Transfer size */
|
||
|
||
uint16_t RxXferCount; /* SPI Rx Transfer Counter */
|
||
|
||
uint32_t CRCSize; /* SPI CRC size used for the transfer */
|
||
|
||
void (*RxISR)(struct _GP22_SPI_STRUCT *hspi); /* function pointer on Rx IRQ handler */
|
||
|
||
void (*TxISR)(struct _GP22_SPI_STRUCT *hspi); /* function pointer on Tx IRQ handler */
|
||
|
||
uint32_t ErrorCode; /* SPI Error code */
|
||
|
||
}GP22_SPI_STRUCT;
|
||
|
||
|
||
void Gp22Init(void);
|
||
void Gp22ErrInit(void);
|
||
u8 Gp22IfIdle(void);
|
||
//uint8_t Gp22StartTask(uint8_t task);
|
||
uint8_t Gp22CheckErrMsg(void);
|
||
void Gp22ClearErrMsg(u8 clear_bit);
|
||
uint8_t Gp22CheckSampleMsg(void);
|
||
void Gp22ClearSampleMsg(void);
|
||
void Gp30Sleep(void);
|
||
void Gp22DateBuf(u32 **date_buf);
|
||
void Gp22TypeBuf(u32 **type_buf);
|
||
void Gp22_TOF_AM_Buf(u32 **TOF_AM_buf);//反算固件用于获取单程时间和振幅
|
||
void Gp22DOWN_AM_Buf(u32 **down_AM_buf);
|
||
void Gp22UP_AM_Buf(u32 **up_AM_buf);//常规固件用于获取UP振幅值
|
||
void Gp22SetSampleRateMsg (u8 rate);
|
||
u8 Gp22CheckSampleRateMsg(void);
|
||
void Gp22ClearSampleRateMsg(void);
|
||
void Gp22SetBufferLength (u8 lenth);
|
||
void Gp22SetmaxDIFTOF (u32 maxDIFTOF);
|
||
void Gp22SetminDIFTOF (u32 minDIFTOF);
|
||
void Gp22SetmaxTOF (u32 maxTOF);
|
||
void Gp22SetminAMP (u32 minAMP);
|
||
uint32_t Gp22TimeDiffer(uint8_t time);
|
||
uint8_t Gp22IfSleep(void);
|
||
void Gp22PreSleep(void);
|
||
void Gp22WakeSleep(void);
|
||
void Gp22MachineDriver(void);
|
||
//uint8_t Gp22CheckMeasureMsg(void);
|
||
//void Gp22ClearMeasureMsg(void);
|
||
//u32 Gp22CheckStillTimeApp(void);
|
||
//void Gp22GainConfig(u32 cfg);
|
||
//void InsertSort(float r[],u8 n);
|
||
u8 GP22_Check_IntMsg(void);
|
||
|
||
#endif /* UWater_GP22_DRIVER_H */
|