暂存
This commit is contained in:
47
App/main.c
47
App/main.c
@@ -7,6 +7,7 @@
|
||||
#include "system.h"
|
||||
#include "../Drivers/rf.h"
|
||||
#include "../Drivers/lcd.h"
|
||||
#include "../Drivers/timer.h"
|
||||
|
||||
/* =========================================================================
|
||||
* 系统全局变量定义
|
||||
@@ -193,9 +194,46 @@ void Debug_ProcessCommand(char cmd)
|
||||
}
|
||||
}
|
||||
|
||||
// ====== 调试用最小化启动开关 ======
|
||||
// 置 1 时 main() 只做点亮屏幕这一件事,RF/自检/数据库/事件框架/Timer1 全部跳过,
|
||||
// 用于定位"开机反复重启"问题的范围。定位完成后改回 0,恢复正常启动流程。
|
||||
#define DEBUG_MINIMAL_BOOT 1
|
||||
|
||||
/* =========================================================================
|
||||
* 主函数 (入口)
|
||||
* ========================================================================= */
|
||||
#if DEBUG_MINIMAL_BOOT
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// ====== STC32G 特殊功能寄存器内核基础初始化 ======
|
||||
WTST = 0; // 设置程序 Flash 访问等待时间为 0 (最高速运行)
|
||||
EAXFR = 1; // 允许访问扩展特殊功能寄存器 (XSFR)
|
||||
CKCON = 0; // 外部总线时钟设定为最快
|
||||
WDT_CONTR = 0x00; // 关闭看门狗定时器
|
||||
|
||||
// ====== 步骤 A:加回 RF_Init() 与 Timer1_Init(),先不打开 RF 接收 ======
|
||||
GPIO_Init(); // 配置各个引脚的推挽输出/准双向模式及内部上拉 (锁存 PWR_HOLD=1)
|
||||
RGB_Send(0, 0, 0, 0, 0, 0); // 上电第一时间强制发送 0 码关闭灯条,熄灭上电暂态引起的随机白光
|
||||
RF_Init(); // 加回来:Timer0 常驻自由运行 + P3.6 常态双边沿中断 + 上拉,此时芯片仍 SHUT=1 关闭
|
||||
Delay_ms(500); // 软启动延时,等待供电电容稳定
|
||||
LCD_Init(); // 初始化 LHS114TC-IF03 (ST7789V) 屏幕控制寄存器序列并开启背光
|
||||
Uart1_Init(); // 初始化串口 1 波特率 115200 供调试日志
|
||||
Uart_SendString("Wristband System Initialized! (DEBUG_MINIMAL_BOOT=1, step A: RF_Init+Timer1_Init)\r\n");
|
||||
|
||||
Timer1_Init(); // 全局中断 EA=1 从这里开始生效,Timer0 溢出中断与 P3.6 边沿中断真正开始工作
|
||||
// 注意:已恢复到步骤 A,不调用 RF_SetMode(1),RF 芯片保持关闭状态
|
||||
|
||||
LCD_ShowStringCentered(100, "STEP A OK", COLOR_WHITE, COLOR_BLACK);
|
||||
LCD_ShowStringCentered(130, "RF_Init+Timer1", COLOR_GRAY, COLOR_BLACK);
|
||||
|
||||
while (1) {
|
||||
Delay_ms(1);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void main(void)
|
||||
{
|
||||
char cmd;
|
||||
@@ -268,6 +306,8 @@ void main(void)
|
||||
}
|
||||
}
|
||||
|
||||
#endif // DEBUG_MINIMAL_BOOT
|
||||
|
||||
// 唤醒源事件标志,由对应的外部中断 ISR 写入
|
||||
volatile u8 p0_wakeup_flag = 0; // P0 端口按键唤醒标志
|
||||
volatile u8 p2_wakeup_flag = 0; // P2 端口按键唤醒标志
|
||||
@@ -304,12 +344,15 @@ void Port2_Isr(void) interrupt 15
|
||||
|
||||
/**
|
||||
* @brief Port3 端口掉电中断服务函数 (由 isr_jump.asm 引导定位至此)
|
||||
* @details 负责处理 P3.6 (新射频数据脚) 在休眠模式下的物理跳变唤醒。
|
||||
* @details P3.6 (RF_RX_DATA) 双边沿中断现在改为常态开启 (见 RF_Init()),身兼两职:
|
||||
* 1. 休眠期间作为唤醒源,记录 p3_wakeup_flag 供 Wakeup_Restore() 判定唤醒来源;
|
||||
* 2. 正常运行期间驱动 RF_HandleEdgeInterrupt() 增量解码 EV1527 信号。
|
||||
* 不再像旧版那样在首次触发后自行关闭 P3INTE,否则第 2 项功能会在第一次边沿后失效。
|
||||
*/
|
||||
void Port3_Isr(void) interrupt 16
|
||||
{
|
||||
EAXFR = 1; // 使能访问扩展寄存器
|
||||
p3_wakeup_flag = P3INTF | 0x01;// 读取并备份 P3 中断标志寄存器值 (0x01作安全掩码)
|
||||
P3INTF = 0x00; // 清除 P3 端口中断悬挂标志位
|
||||
P3INTE = 0x00; // 立即关闭 P3 中断通道,防止反复重入
|
||||
RF_HandleEdgeInterrupt(); // 驱动 EV1527 边沿增量解码状态机
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user