P1UWaterBase/hardinterface/inc/UWater_gp22_driver.h

270 lines
8.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 */