开的定时器打印,不重启了?

This commit is contained in:
stark1898y 2025-06-03 13:00:57 +08:00
parent 0784704e1a
commit 8ed4f9abb2
12 changed files with 163 additions and 41 deletions

View File

@ -53,7 +53,7 @@ void BSP_NoNeeedReplyCMd(void)
// How often to perform periodic event
// TODO:这里长点功耗低
#define SBP_PERIODIC_EVT_PERIOD (1600 * 60 * 3) // (160 = 100ms)
#define SBP_PERIODIC_EVT_PERIOD (1600 * 60 * 1) // (160 = 100ms)
// How often to perform read rssi event
#define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms)

View File

@ -265,6 +265,7 @@ int main(void)
GAPRole_PeripheralInit();
Peripheral_Init();
for (uint8_t i = 0; i < 10; i++)
{
if (TMOS_GetSystemClock() > 0)
@ -325,6 +326,8 @@ int main(void)
IWDG_Init(IWDG_TIMEOUT_MS);
// BSP_TMR0_Init();
// logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick());
// DelayMs(1000);
// logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick());

View File

@ -21,10 +21,12 @@
#define RB_WR_PROTECT 0x40000000 // RO, write protect
#define RB_IWDG_EN 0x80000000 // RO, watch-dog enable
#define IWDG_TIMEOUT_MS (10000)
#define IWDG_FEED_MS (3000)
#define IWDG_TIMEOUT_MS (5000)
#define IWDG_FEED_MS (2500)
#define IWIG_FEED_EVENT (0x01 << 0)
#define IWIG_FEED_EVENT (0x01 << 0)
#define TMR0_START_EVENT (0x01 << 1)
#define TMR0_END_EVENT (0x01 << 2)
void IWDG_Init(uint16_t ms);

View File

@ -17,7 +17,7 @@ uint32_t CH5XX_GetTimeStamp(uint16_t *tick);
uint32_t BSP_Get_Tick(void);
void BSP_TMR0_Init();

View File

@ -29,6 +29,11 @@ uint16_t min_number = 0;
uint16_t max_number = 0;
double voltage = 0;
// 读adc的 一般要看有没有中断调用,如果有中断调用, 就存在风险,否则就没啥风险
// 通用的做是, 可以先复现, 看下复现时候的电流, 根据电流来判断大概运行的位置,
// 比如卡死时候电流为mA级别的, 可能就就是代码卡到某个函数里面了
// , 这时候可以加入一个高优先级的定时器, 定时送PC指针,当卡死时候, 看下PC指针, 就能看到卡到什么地方了,
// https://www.cnblogs.com/iot-fan/p/14304854.html
__HIGH_CODE
uint8_t BSP_ReadVbat(void)

View File

@ -409,10 +409,10 @@ int BSP_ReadTempHumi(float *humi, float *temp)
int ret;
GXHTC3C_Wakeup();
DelayMs(1);
DelayMs(2);
GXHTC3C_GetStart();
DelayMs(3);
DelayMs(4);
float _humi, _temp;
ret = GXHTC3C_GetTempHumi(&_humi, &_temp);
if (ret == 0)

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 16:13:41
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-21 13:11:02
* @LastEditTime : 2025-06-03 12:08:25
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_iwdg.c
* @Description :
*
@ -14,6 +14,8 @@
#include "log.h"
#include "bsp_tim.h"
#include "SLEEP.h"
// https://www.cnblogs.com/debugdabiaoge/p/17580033.html
// https://www.cnblogs.com/risc5-ble/p/17853714.html
@ -39,9 +41,27 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
// uint8_t* a = tmos_msg_allocate(1);
uint32_t tmos_memory_getlen(void);
logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen());
BSP_TMR0_Init();
BSP_BlockSleep();
// tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
return (events ^ IWIG_FEED_EVENT);
}
if (events & TMR0_START_EVENT)
{
BSP_TMR0_Init();
BSP_BlockSleep();
tmos_start_task(task_id, TMR0_END_EVENT, MS1_TO_SYSTEM_TIME(20));
return (events ^ TMR0_START_EVENT);
}
if (events & TMR0_END_EVENT)
{
BSP_RequestSleep();
tmos_start_task(IWDGTaskId, TMR0_START_EVENT, MS1_TO_SYSTEM_TIME(1000));
return (events ^ TMR0_END_EVENT);
}
return 0;
}
@ -82,6 +102,7 @@ void IWDG_Init(uint16_t ms)
IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent);
// tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT);
tmos_start_reload_task(IWDGTaskId, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
// tmos_start_task(IWDGTaskId, TMR0_START_EVENT, MS1_TO_SYSTEM_TIME(1000));
}
// #define RB_RESET_FLAG 0x07 // RO: recent reset flag

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:01:15
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-16 18:21:05
* @LastEditTime : 2025-06-03 12:45:41
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_tim.c
* @Description :
*
@ -10,6 +10,20 @@
*/
#include "bsp_tim.h"
#include "bsp_uart.h"
#include "log.h"
#include "SLEEP.h"
// https://www.cnblogs.com/debugdabiaoge/p/17580033.html
// https://www.cnblogs.com/risc5-ble/p/17853714.html
#undef LOG_ENABLE
#define LOG_ENABLE 1
#undef LOG_TAG
#define LOG_TAG "tim"
// tick_1ms_cnt在SysTick_Handler()中1ms +1
volatile uint32_t tick_1ms_cnt = 0;
@ -86,6 +100,99 @@ uint32_t BSP_Get_Tick(void)
// logDebug("seconds = %d.%d", seconds, tick_1sec * 1000 / 32768);
}
/* 定时器0设定100ms定时器进行IO口闪灯 PB15-LED */
void BSP_TMR0_Init()
{
TMR0_TimerInit(FREQ_SYS / 1000 * 20); // 设置定时时间
// TMR0_TimerInit(FREQ_SYS); // 设置定时时间
TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); // 开启中断
PFIC_EnableIRQ(TMR0_IRQn);
}
/*********************************************************************
* @fn TMR0_IRQHandler
*
* @brief TMR0中断函数
*
* @return none
*/
__INTERRUPT
__HIGH_CODE
void TMR0_IRQHandler(void) // TMR0 定时中断
{
if(TMR0_GetITFlag(TMR0_3_IT_CYC_END))
{
TMR0_ClearITFlag(TMR0_3_IT_CYC_END); // 清除中断标志
BSP_RequestSleep();
PFIC_DisableIRQ(TMR0_IRQn);
#if 0
uint32_t v_mepc, v_mcause, v_mtval;
logDebug("hardfault\n");
v_mepc = __get_MEPC();
v_mcause = __get_MCAUSE();
v_mtval = __get_MTVAL();
logDebug("mepc:%08x\n", v_mepc);
logDebug("mcause:%08x\n", v_mcause);
logDebug("mtval:%08x\n", v_mtval);
FLASH_ROM_SW_RESET();
sys_safe_access_enable();
R16_INT32K_TUNE = 0xFFFF;
sys_safe_access_disable();
sys_safe_access_enable();
R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET;
sys_safe_access_disable();
#endif
// struct __MEMORY_CTL
// {
// struct __MEMORY_CTL *pNext;
// uint16_t len;
// uint16_t used;
// };
// typedef struct __MEMORY_CTL MemoryCtl;
// extern MemoryCtl *MemCtlStart;
// extern MemoryCtl *MemCtlEnd;
// MemoryCtl *MemHead;
// MemHead = MemCtlStart;
// while (MemHead != MemCtlEnd)
// {
// logDebug("|%8x,%8x,%8d.....\n", MemHead->used, (uint32_t)MemHead,
// (uint32_t)(MemHead->pNext) - (uint32_t)MemHead - sizeof(struct __MEMORY_CTL));
// MemHead = MemHead->pNext;
// }
// logDebug("\n");
uint32_t v_mepc, v_mcause, v_mtval;
v_mepc = __get_MEPC();
v_mcause = __get_MCAUSE();
v_mtval = __get_MTVAL();
logDebug("00000000000000000");
logDebug("mepc:%08x", v_mepc);
logDebug("mcause:%08x", v_mcause);
logDebug("mtval:%08x", v_mtval);
logDebug("1111111111111111");
#if 0
FLASH_ROM_SW_RESET();
sys_safe_access_enable();
R16_INT32K_TUNE = 0xFFFF;
sys_safe_access_disable();
sys_safe_access_enable();
R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET;
sys_safe_access_disable();
#endif
// while (1);
}
}
// SysTick中断函数
__INTERRUPT
__HIGH_CODE

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:01:15
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-30 16:53:07
* @LastEditTime : 2025-06-03 10:43:05
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
* @Description :
*
@ -474,6 +474,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
boost_en_flag = 0;
return (events ^ VAVLE_CLOSE_END_EVT);
}
#if 0
// 开始测量电磁铁电感
if (events & VAVLE_DECT_SWITCH_START_EVT)
{
@ -507,7 +508,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
return (events ^ VAVLE_DECT_SWITCH_CALIB_EVT);
}
#endif
if (events & VAVLE_LOW_VBAT_ALARM_EVT)
{
logDebug("VAVLE_LOW_VBAT_ALARM_EVT");

View File

@ -142,32 +142,17 @@ uint32_t CH58x_LowPower(uint32_t time)
__nop();
}
#endif
BSP_KEY_EnterLowpower();
// LOW POWER-sleep模式
if (!RTCTigFlag)
{
if (block_boost_flag == false)
{
BOOST_EN;
}
else
{
BOOST_OFF_DEINIT;
}
if (true == block_sleep_flag)
{
// logDebug("block_sleep");
return 0;
}
BSP_KEY_EnterLowpower();
LowPower_Sleep(RB_PWR_RAM32K | RB_PWR_RAM96K | RB_PWR_EXTEND);
R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR);
RTC_SetTignTime(time);
sys_safe_access_enable();
R8_HFCK_PWR_CTRL |= RB_CLK_XT32M_KEEP;
sys_safe_access_disable();
if(!RTCTigFlag)
{
LowPower_Halt();
@ -175,9 +160,6 @@ uint32_t CH58x_LowPower(uint32_t time)
R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR);
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
// i = RTC_GetCycle32k();
// while (i == RTC_GetCycle32k());
return 0;
}
#endif

View File

@ -6,7 +6,7 @@
* Description :
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
@ -125,24 +125,24 @@ PWMX_SPI1_IRQHandler:
TMR3_IRQHandler:
UART2_IRQHandler:
UART3_IRQHandler:
WDOG_BAT_IRQHandler:
WDOG_BAT_IRQHandler:
NFC_IRQHandler:
USB2_DEVICE_IRQHandler:
USB2_HOST_IRQHandler:
LED_IRQHandler:
1:
1:
j 1b
.section .handle_reset,"ax",@progbits
.weak handle_reset
.align 1
handle_reset:
.option push
.option norelax
.option push
.option norelax
la gp, __global_pointer$
.option pop
.option pop
1:
la sp, _eusrstack
la sp, _eusrstack
/* Load highcode_init code section from flash to RAM */
2:
@ -210,7 +210,7 @@ __highcode_init:
csrw 0x804, t0
li t0, 0x1
csrw 0xbc1, t0
li t0, 0x88
csrw mstatus, t0
la t0, _vector_base
@ -221,5 +221,5 @@ __highcode_init:
la t0, main
csrw mepc, t0
mret

View File

@ -129,7 +129,8 @@ void SetSysClock(SYS_CLKTypeDef sc)
*
* @return none
*/
__attribute__((section(".highcode_init"))) void highcode_init(void)
__attribute__((section(".highcode_init")))
void highcode_init(void)
{
R32_SAFE_MODE_CTRL |= RB_XROM_312M_SEL;
R8_SAFE_MODE_CTRL &= ~RB_SAFE_AUTO_EN;