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

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 // How often to perform periodic event
// TODO:这里长点功耗低 // 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 // How often to perform read rssi event
#define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms) #define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms)

View File

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

View File

@ -21,10 +21,12 @@
#define RB_WR_PROTECT 0x40000000 // RO, write protect #define RB_WR_PROTECT 0x40000000 // RO, write protect
#define RB_IWDG_EN 0x80000000 // RO, watch-dog enable #define RB_IWDG_EN 0x80000000 // RO, watch-dog enable
#define IWDG_TIMEOUT_MS (10000) #define IWDG_TIMEOUT_MS (5000)
#define IWDG_FEED_MS (3000) #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); 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); 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; uint16_t max_number = 0;
double voltage = 0; double voltage = 0;
// 读adc的 一般要看有没有中断调用,如果有中断调用, 就存在风险,否则就没啥风险
// 通用的做是, 可以先复现, 看下复现时候的电流, 根据电流来判断大概运行的位置,
// 比如卡死时候电流为mA级别的, 可能就就是代码卡到某个函数里面了
// , 这时候可以加入一个高优先级的定时器, 定时送PC指针,当卡死时候, 看下PC指针, 就能看到卡到什么地方了,
// https://www.cnblogs.com/iot-fan/p/14304854.html // https://www.cnblogs.com/iot-fan/p/14304854.html
__HIGH_CODE __HIGH_CODE
uint8_t BSP_ReadVbat(void) uint8_t BSP_ReadVbat(void)

View File

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

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 16:13:41 * @Date : 2024-12-15 16:13:41
* @LastEditors : stark1898y 1658608470@qq.com * @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 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_iwdg.c
* @Description : * @Description :
* *
@ -14,6 +14,8 @@
#include "log.h" #include "log.h"
#include "bsp_tim.h" #include "bsp_tim.h"
#include "SLEEP.h"
// https://www.cnblogs.com/debugdabiaoge/p/17580033.html // https://www.cnblogs.com/debugdabiaoge/p/17580033.html
// https://www.cnblogs.com/risc5-ble/p/17853714.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); // uint8_t* a = tmos_msg_allocate(1);
uint32_t tmos_memory_getlen(void); uint32_t tmos_memory_getlen(void);
logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen()); 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)); // tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
return (events ^ IWIG_FEED_EVENT); 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; return 0;
} }
@ -82,6 +102,7 @@ void IWDG_Init(uint16_t ms)
IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent); IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent);
// tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT); // tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT);
tmos_start_reload_task(IWDGTaskId, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS)); 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 // #define RB_RESET_FLAG 0x07 // RO: recent reset flag

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:01:15 * @Date : 2024-12-15 15:01:15
* @LastEditors : stark1898y 1658608470@qq.com * @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 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_tim.c
* @Description : * @Description :
* *
@ -10,6 +10,20 @@
*/ */
#include "bsp_tim.h" #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 // tick_1ms_cnt在SysTick_Handler()中1ms +1
volatile uint32_t tick_1ms_cnt = 0; 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); // 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中断函数 // SysTick中断函数
__INTERRUPT __INTERRUPT
__HIGH_CODE __HIGH_CODE

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:01:15 * @Date : 2024-12-15 15:01:15
* @LastEditors : stark1898y 1658608470@qq.com * @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 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
* @Description : * @Description :
* *
@ -474,6 +474,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
boost_en_flag = 0; boost_en_flag = 0;
return (events ^ VAVLE_CLOSE_END_EVT); return (events ^ VAVLE_CLOSE_END_EVT);
} }
#if 0
// 开始测量电磁铁电感 // 开始测量电磁铁电感
if (events & VAVLE_DECT_SWITCH_START_EVT) 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); return (events ^ VAVLE_DECT_SWITCH_CALIB_EVT);
} }
#endif
if (events & VAVLE_LOW_VBAT_ALARM_EVT) if (events & VAVLE_LOW_VBAT_ALARM_EVT)
{ {
logDebug("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(); __nop();
} }
#endif #endif
BSP_KEY_EnterLowpower();
// LOW POWER-sleep模式 // LOW POWER-sleep模式
if (!RTCTigFlag) 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); LowPower_Sleep(RB_PWR_RAM32K | RB_PWR_RAM96K | RB_PWR_EXTEND);
R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR); R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR);
RTC_SetTignTime(time); RTC_SetTignTime(time);
sys_safe_access_enable(); sys_safe_access_enable();
R8_HFCK_PWR_CTRL |= RB_CLK_XT32M_KEEP; R8_HFCK_PWR_CTRL |= RB_CLK_XT32M_KEEP;
sys_safe_access_disable(); sys_safe_access_disable();
if(!RTCTigFlag) if(!RTCTigFlag)
{ {
LowPower_Halt(); 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); R8_RTC_FLAG_CTRL = (RB_RTC_TMR_CLR | RB_RTC_TRIG_CLR);
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流) HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
// i = RTC_GetCycle32k();
// while (i == RTC_GetCycle32k());
return 0; return 0;
} }
#endif #endif

View File

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

View File

@ -129,7 +129,8 @@ void SetSysClock(SYS_CLKTypeDef sc)
* *
* @return none * @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; R32_SAFE_MODE_CTRL |= RB_XROM_312M_SEL;
R8_SAFE_MODE_CTRL &= ~RB_SAFE_AUTO_EN; R8_SAFE_MODE_CTRL &= ~RB_SAFE_AUTO_EN;