From 1eeff59c4a5c29bb134db3e916f16c3591672f9e Mon Sep 17 00:00:00 2001 From: stark1898y <1658608470@qq.com> Date: Tue, 19 Nov 2024 17:45:09 +0800 Subject: [PATCH] =?UTF-8?q?VCC=E5=B8=B8=E4=BE=9B=E7=94=B5=EF=BC=8CSPI?= =?UTF-8?q?=E7=AE=A1=E8=84=9A=20=E4=B8=8D=E6=B5=8B=E6=B0=94=E5=8E=8B?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E4=BD=8E=E5=8A=9F=E8=80=97=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E4=B8=8A=E6=8B=89=EF=BC=8C=E9=9D=99=E6=80=81=E5=8A=9F?= =?UTF-8?q?=E8=80=97=E6=9C=80=E4=BD=8E=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/bsp_wf5803.c | 201 ++++++++++++++++++++++++++++++++------- APP/include/bsp_wf5803.h | 14 +-- HAL/SLEEP.c | 14 ++- 3 files changed, 188 insertions(+), 41 deletions(-) diff --git a/APP/bsp_wf5803.c b/APP/bsp_wf5803.c index 3c96f8c..0dd4e3d 100644 --- a/APP/bsp_wf5803.c +++ b/APP/bsp_wf5803.c @@ -1,21 +1,30 @@ #include "bsp_wf5803.h" #include "CONFIG.h" -static uint8_t Peripheral_TaskID = 0xff; +static tmosTaskID wf5803_task_id = INVALID_TASK_ID; + +#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17) +#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17) + +#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17) +#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17) + +#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17) +#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17) + +uint8_t volatile vcc4_state = 0; -#define WF5803_CSB1_HIGH() GPIOB_SetBits(GPIO_Pin_17) -#define WF5803_CSB1_LOW() GPIOB_ResetBits(GPIO_Pin_17) void SPICs_Start(void) { // GPIOA_ResetBits(GPIO_Pin_6); - WF5803_CSB1_LOW(); + WF5803_CSB4_LOW(); } void SPICs_Stop(void) { // GPIOA_SetBits(GPIO_Pin_6); - WF5803_CSB1_HIGH(); + WF5803_CSB4_HIGH(); } uint8_t WF5803_SendByte(uint8_t data) @@ -63,33 +72,50 @@ void WF5803_Init(void) // SDA: MOSI // SDO: MISO #if 1 - // CSB1: PA3 + // VCC1: PA2 + // GPIOA_SetBits(GPIO_Pin_2); + // GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeOut_PP_20mA); + // GPIOA_SetBits(GPIO_Pin_2); - GPIOA_SetBits(GPIO_Pin_3); - GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA); - GPIOA_SetBits(GPIO_Pin_3); + // // CSB1: PA3 + // GPIOA_SetBits(GPIO_Pin_3); + // GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA); + // GPIOA_SetBits(GPIO_Pin_3); + + // // VCC2: PB8 + // GPIOB_SetBits(GPIO_Pin_8); + // GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA); + // GPIOB_SetBits(GPIO_Pin_8); // CSB2: PB9 - GPIOB_ResetBits(GPIO_Pin_9); + GPIOB_SetBits(GPIO_Pin_9); GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); - GPIOB_ResetBits(GPIO_Pin_9); + GPIOB_SetBits(GPIO_Pin_9); - // WF5803_CSB1_HIGH(); + // // VCC3: PB3 + // GPIOB_SetBits(GPIO_Pin_3); + // GPIOB_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA); + // GPIOB_SetBits(GPIO_Pin_3); // CSB3: PB4 - GPIOB_ResetBits(GPIO_Pin_4); + GPIOB_SetBits(GPIO_Pin_4); GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); - GPIOB_ResetBits(GPIO_Pin_9); + GPIOB_SetBits(GPIO_Pin_4); + + // // VCC4: PB16 + // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PU); + // // GPIOB_SetBits(GPIO_Pin_17); + // mDelayuS(5); + + // CSB4: PB17 GPIOB_SetBits(GPIO_Pin_17); GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeOut_PP_5mA); - // WF5803_CSB1_HIGH(); - - // PRINT("WF5803_CSB1_HIGH()\r\n"); + GPIOB_SetBits(GPIO_Pin_17); // spi初始化,模式0 - GPIOA_ModeCfg(GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA); + GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA); GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU); #endif // PRINT("GPIOA_ModeCfg ok\r\n"); @@ -105,16 +131,96 @@ void WF5803_Init(void) // PRINT("SPI_Init ok\r\n"); } + + void WF5803_DeInit(void) { - // GPIOA_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6, GPIO_ModeIN_PD); + // SPI + // if (vcc4_state == 1) + // { + // GPIOA_ResetBits(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); + // GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU); + + // // CSB4: PB11 + // GPIOB_ResetBits(GPIO_Pin_17); + // GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeIN_PU); + // } +// else + if (vcc4_state == 0) + { + GPIOA_ResetBits(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); + GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU); + GPIOB_ResetBits(GPIO_Pin_17); + GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeIN_PU); + } + + // // VCC1: PA2 + // GPIOA_ResetBits(GPIO_Pin_2); // GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PD); - // GPIOA_ResetBits(GPIO_Pin_4); - // GPIOA_ResetBits(GPIO_Pin_5); - // GPIOA_ResetBits(GPIO_Pin_12); + // CSB1: PA3 + // GPIOA_ResetBits(GPIO_Pin_3); + // GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PD); - // GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12, GPIO_ModeIN_PD); + // GPIOA_SetBits(GPIO_Pin_3); + // GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PU); + + // // VCC2: PB8 + // GPIOB_ResetBits(GPIO_Pin_8); + // GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PD); + + // // CSB2: PB9 + GPIOB_ResetBits(GPIO_Pin_9); + GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PD); + // GPIOB_SetBits(GPIO_Pin_9); + // GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PU); + + // // VCC3: PB3 + // GPIOB_ResetBits(GPIO_Pin_3); + // GPIOB_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PD); + + // CSB3: PB4 + GPIOB_ResetBits(GPIO_Pin_4); + GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PD); + // GPIOB_SetBits(GPIO_Pin_4); + // GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PU); + + // if (vcc4_state == 1) + // { + // // VCC4: PB16 + // // GPIOB_SetBits(GPIO_Pin_16); + // // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeOut_PP_5mA); + // // GPIOB_SetBits(GPIO_Pin_16); + // } + // else + // { + // // VCC4: PB16 + // GPIOB_ResetBits(GPIO_Pin_16); + // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PD); + // PRINT("vcc4_state = 0\r\n"); + // } + + + + // LED + GPIOA_ResetBits(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12); + GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12, GPIO_ModeIN_PD); + + // KEY + GPIOA_ResetBits(GPIO_Pin_7); + GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU); + + // motor + GPIOB_ResetBits(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2); + GPIOB_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_ModeIN_PD); + + // COIL_ADC + GPIOA_ResetBits(GPIO_Pin_6); + GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PD); + + // ADC_CTRL,ADC_VBAT + GPIOA_ResetBits(GPIO_Pin_0 | GPIO_Pin_1); + GPIOA_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1, GPIO_ModeIN_PD); } long reading = 0; @@ -197,16 +303,40 @@ void SensorData_Process(void) PRINT("T=%d.%d \r\n", (int)temp, ((int)(temp * 100.0f) % 100)); } -uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events) +// __HIGH_CODE +// __attribute__((noinline)) +uint16_t WF5803_ProcessEvent(uint8_t task_id, uint16_t events) { - if (events & WF5803_EVT_START) + if (events & WF5803_EVT_VCC) + { + if (vcc4_state == 0) + { + vcc4_state = 1; + // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PU); + + // mDelaymS(20); + // GPIOB_SetBits(GPIO_Pin_16); + // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeOut_PP_5mA); + // GPIOB_SetBits(GPIO_Pin_16); + + PRINT("WF5803_EVT_VCC\r\n"); + } + tmos_start_task(wf5803_task_id, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(20)); + + return (events ^ WF5803_EVT_VCC); + } + else if (events & WF5803_EVT_START) { // SensorData_Process(); // WF5803_WriteReg(0x30, 0x0a); + vcc4_state = 1; + + WF5803_Init(); + WF5803_WriteReg(0x30, 0x0A); - tmos_start_task(Peripheral_TaskID, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50)); + tmos_start_task(wf5803_task_id, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(5)); return (events ^ WF5803_EVT_START); } else if (events & WF5803_EVT_READ) @@ -214,7 +344,13 @@ uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events) SensorData_Process(); // WF5803_WriteReg(0x30, 0x0a); - tmos_start_task(Peripheral_TaskID, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(800)); + tmos_start_task(wf5803_task_id, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(800)); + + // GPIOB_ResetBits(GPIO_Pin_16); + // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PD); + // PRINT("vcc4_state = 0\r\n"); + + vcc4_state = 0; return (events ^ WF5803_EVT_READ); } return 0; @@ -222,10 +358,9 @@ uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events) void BSPWF5803_Init(void) { - WF5803_Init(); - Peripheral_TaskID = TMOS_ProcessEventRegister(wf5803_ProcessEvent); - // WF5803_WriteReg(0x30, 0x2B); - tmos_set_event(Peripheral_TaskID, WF5803_EVT_START); - // tmos_start_task(Peripheral_TaskID, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50)); - // PRINT("WF5803_Init\r\n"); + // WF5803_Init(); + wf5803_task_id = TMOS_ProcessEventRegister(WF5803_ProcessEvent); + + tmos_set_event(wf5803_task_id, WF5803_EVT_START); + // tmos_start_task(wf5803_task_id, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50)); } diff --git a/APP/include/bsp_wf5803.h b/APP/include/bsp_wf5803.h index 518cca8..3390b43 100644 --- a/APP/include/bsp_wf5803.h +++ b/APP/include/bsp_wf5803.h @@ -3,17 +3,17 @@ #include "CH58x_common.h" -#define WF5803_EVT_START 0x0010 -#define WF5803_EVT_READ 0x0100 +#define WF5803_EVT_START (0x0001 << 0) +#define WF5803_EVT_READ (0x0001 << 1) +#define WF5803_EVT_VCC (0x0001 << 2) void WF5803_Init(void); -void WF5803_WriteReg(uint8_t Address, uint8_t value); -uint8_t WF5803_ReadReg(uint8_t addr); -uint8_t *GetSensorData(void); -void SensorData_Process(void); +// void WF5803_WriteReg(uint8_t Address, uint8_t value); +// uint8_t WF5803_ReadReg(uint8_t addr); +// uint8_t *GetSensorData(void); +// void SensorData_Process(void); void BSPWF5803_Init(void); void WF5803_DeInit(void); - #endif diff --git a/HAL/SLEEP.c b/HAL/SLEEP.c index dbd5016..8914266 100644 --- a/HAL/SLEEP.c +++ b/HAL/SLEEP.c @@ -58,6 +58,9 @@ uint32_t CH58x_LowPower(uint32_t time) RTC_SetTignTime(time_tign); SYS_RecoverIrq(irq_status); + + + #if(DEBUG == Debug_UART0) // 使用其他串口输出打印信息需要修改这行代码 while((R8_UART0_LSR & RB_LSR_TX_ALL_EMP) == 0) { @@ -67,12 +70,21 @@ uint32_t CH58x_LowPower(uint32_t time) // LOW POWER-sleep模式 if(!RTCTigFlag) { + // extern uint8_t volatile vcc4_state; + // if (vcc4_state == 0) + // { + // WF5803_DeInit(); + // } + WF5803_DeInit(); LowPower_Sleep(RB_PWR_RAM32K | RB_PWR_RAM96K | RB_PWR_EXTEND |RB_XT_PRE_EN ); HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流) - WF5803_Init(); + // if (vcc4_state) + // { + // WF5803_Init(); + // } return 0; } #endif