123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "hal_low_power.h"
- #include "hc32_ll_pwc.h"
- #include "hc32_ll.h"
- #include "FreeRTOS.h"
- #include "task.h"
- /**
- * @brief Whether ready to entry stop mode.
- * @param None
- * @retval int32_t:
- * @note Ensure DMA stops transmit and no flash erase/program operation.
- */
- int32_t stop_is_ready(void)
- {
- int32_t i32Ret = LL_OK;
- uint8_t tmp1;
- uint8_t tmp2;
- uint8_t tmp3;
- tmp1 = (uint8_t)((READ_REG32(CM_EFM->FSR) & EFM_FSR_RDY) == EFM_FSR_RDY);
- tmp2 = (uint8_t)((READ_REG32(CM_DMA1->CHSTAT) & DMA_CHSTAT_DMAACT) == 0x00U);
- tmp3 = (uint8_t)((READ_REG32(CM_DMA2->CHSTAT) & DMA_CHSTAT_DMAACT) == 0x00U);
- if (0U == (tmp1 & tmp2 & tmp3)) {
- i32Ret = LL_ERR_NOT_RDY;
- }
- return i32Ret;
- }
- /**
- * @brief MCU behavior config for stop mode.
- * @param None
- * @retval None
- */
- void sleep_config(void)
- {
- stc_pwc_stop_mode_config_t stcStopConfig;
- (void)PWC_STOP_StructInit(&stcStopConfig);
- stcStopConfig.u16ExBusHold = PWC_STOP_EXBUS_HIZ;
- stcStopConfig.u16Clock = PWC_STOP_CLK_KEEP;
- stcStopConfig.u16FlashWait = PWC_STOP_FLASH_WAIT_ON;
- (void)PWC_STOP_Config(&stcStopConfig);
- /* Wake-up source config (EXINT Ch.6 here) */
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH0, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH1, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH8, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH9, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH10, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH11, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH12, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH13, ENABLE);//唤醒脚配置
- INTC_WakeupSrcCmd(INTC_STOP_WKUP_EXTINT_CH14, ENABLE);//唤醒脚配置
- }
-
- void test_task3(void *pvParameters)
- {
- uint8_t u8Count;
- vTaskDelay(3000);
- static uint16_t cnt = 0;
- while(1)
- {
- if (LL_OK == stop_is_ready())
- {
- u8Count = 10U;
- vTaskDelay(5000);
- GPIO_TogglePins(GPIO_PORT_A, GPIO_PIN_02);
- SysTick_Suspend();
- PWC_STOP_Enter(PWC_STOP_WFI);
- }
- cnt++;
- printf("cnt=%d\n",cnt);
- SysTick_Resume();
- vTaskDelay(5000);
- }
- }
-
- //进入休眠的时候不允许有flash读写,DMA等操作
|