2024-11-14 09:47:21 +08:00
|
|
|
|
#include "bsp_wf5803.h"
|
|
|
|
|
#include "CONFIG.h"
|
|
|
|
|
|
|
|
|
|
static uint8_t Peripheral_TaskID = 0xff;
|
|
|
|
|
|
|
|
|
|
void SPICs_Start(void)
|
|
|
|
|
{
|
|
|
|
|
GPIOA_ResetBits(GPIO_Pin_6);
|
|
|
|
|
}
|
|
|
|
|
void SPICs_Stop(void)
|
|
|
|
|
{
|
|
|
|
|
GPIOA_SetBits(GPIO_Pin_6);
|
|
|
|
|
}
|
|
|
|
|
uint8_t WF5803_SendByte(uint8_t data)
|
|
|
|
|
{
|
|
|
|
|
R8_SPI1_BUFFER = data;
|
|
|
|
|
while (!(R8_SPI1_INT_FLAG & RB_SPI_FREE))
|
|
|
|
|
;
|
|
|
|
|
return (R8_SPI1_BUFFER);
|
|
|
|
|
}
|
|
|
|
|
void WF5803_WriteReg(uint8_t Address, uint8_t value)
|
|
|
|
|
{
|
|
|
|
|
SPICs_Start();
|
|
|
|
|
WF5803_SendByte(0x00);
|
|
|
|
|
WF5803_SendByte(Address);
|
|
|
|
|
WF5803_SendByte(value);
|
|
|
|
|
SPICs_Stop();
|
|
|
|
|
}
|
|
|
|
|
uint8_t WF5803_ReadReg(uint8_t addr)
|
|
|
|
|
{
|
|
|
|
|
uint8_t value;
|
|
|
|
|
SPICs_Start();
|
|
|
|
|
WF5803_SendByte(0x80);
|
|
|
|
|
WF5803_SendByte(addr);
|
|
|
|
|
value = WF5803_SendByte(0xFF);
|
|
|
|
|
SPICs_Stop();
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
void WF5803_Init(void)
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* CSB: PA6
|
|
|
|
|
* SCL: PA0
|
|
|
|
|
* SDA: PA1
|
|
|
|
|
* SDO: PA2
|
|
|
|
|
*/
|
|
|
|
|
// spi<70><69>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ģʽ0
|
|
|
|
|
GPIOA_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6 | GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
|
|
|
|
|
GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_Floating);
|
|
|
|
|
SPI1_MasterDefInit();
|
|
|
|
|
|
|
|
|
|
SPICs_Stop();
|
|
|
|
|
WF5803_WriteReg(0x00, 0x81); // <20><><EFBFBD><EFBFBD>spiΪ<69><CEAA><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long reading = 0;
|
|
|
|
|
float press = 0;
|
|
|
|
|
float temp = 0;
|
|
|
|
|
float fDat = 0;
|
|
|
|
|
float press_air = 101.0f;
|
|
|
|
|
int a = 1;
|
|
|
|
|
uint8_t RawData[5];
|
|
|
|
|
|
|
|
|
|
uint8_t *GetSensorData(void)
|
|
|
|
|
{
|
|
|
|
|
memset(RawData, 0, sizeof(uint8_t) * 5);
|
|
|
|
|
WF5803_WriteReg(0x30, 0x0a);
|
|
|
|
|
DelayMs(50);
|
|
|
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|
|
|
|
RawData[0] = WF5803_ReadReg(0x06);
|
|
|
|
|
RawData[1] = WF5803_ReadReg(0x07);
|
|
|
|
|
RawData[2] = WF5803_ReadReg(0x08);
|
|
|
|
|
// <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
RawData[3] = WF5803_ReadReg(0x09);
|
|
|
|
|
RawData[4] = WF5803_ReadReg(0x0a);
|
|
|
|
|
|
|
|
|
|
// for(int i=0; i<5; i++)
|
|
|
|
|
// {
|
|
|
|
|
// PRINT("RawData[%d] = %x\r\n", i,RawData[i]);
|
|
|
|
|
// }
|
|
|
|
|
return RawData;
|
|
|
|
|
}
|
|
|
|
|
void SensorData_Process(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t *p1 = GetSensorData();
|
|
|
|
|
reading = p1[0];
|
|
|
|
|
reading = reading << 8;
|
|
|
|
|
reading |= p1[1];
|
|
|
|
|
reading = reading << 8;
|
|
|
|
|
reading |= p1[2];
|
|
|
|
|
if (reading >= 8388608)
|
|
|
|
|
{
|
|
|
|
|
fDat = (int32_t)(reading - 16777216) / 8388608.0f;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fDat = reading / 8388608.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
press = fDat * 125 + 17.5; // WF5803_1BAR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>10m<30><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4AB>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// if (a) {press_air = press ; a = 0;}
|
|
|
|
|
// press = press_air > press ? press_air : press;
|
|
|
|
|
//
|
|
|
|
|
// int deep_100 = (int)(100*((press - press_air)/0.098f));
|
|
|
|
|
// //printf("P=%d.%d pa\r\n",(int)press,((int)(press*10000.0f)%10000));`
|
|
|
|
|
// printf("D=%d.%d cm\r\n",deep_100/100,deep_100%100);
|
|
|
|
|
|
|
|
|
|
reading = p1[3];
|
|
|
|
|
reading = reading << 8;
|
|
|
|
|
reading |= p1[4];
|
|
|
|
|
if (reading > 32768)
|
|
|
|
|
{
|
|
|
|
|
temp = (reading - 65844) / 256.0f;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
temp = (reading - 308) / 256.0f;
|
|
|
|
|
}
|
|
|
|
|
// PRINT("--s-1--\r\n");
|
|
|
|
|
PRINT("P=%d.%d pa\r\n", (int)(press * 1000), ((int)(press * 10000000.0f) % 10000));
|
|
|
|
|
// PRINT("T=%d.%d \r\n", (int)temp, ((int)(temp * 100.0f) % 100));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events)
|
|
|
|
|
{
|
|
|
|
|
if (events & WF5803_EVT)
|
|
|
|
|
{
|
|
|
|
|
SensorData_Process();
|
2024-11-14 09:48:51 +08:00
|
|
|
|
tmos_start_task(Peripheral_TaskID, WF5803_EVT, MS1_TO_SYSTEM_TIME(100));
|
2024-11-14 09:47:21 +08:00
|
|
|
|
return (events ^ WF5803_EVT);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BSPWF5803_Init(void)
|
|
|
|
|
{
|
|
|
|
|
WF5803_Init();
|
|
|
|
|
Peripheral_TaskID = TMOS_ProcessEventRegister(wf5803_ProcessEvent);
|
|
|
|
|
tmos_set_event(Peripheral_TaskID, WF5803_EVT);
|
|
|
|
|
}
|