| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- #include <Myproject.h>
- /**
- @function GPIO_Init
- @brief IO初始化
- @date 2025-11-01
- */
- void GPIO_Init(void)
- {
- // LED上拉 低电平点亮
- SetBit(P0_OE, P03);
- SetBit(P0_PU, P03);
- GP03 = 1;
- // 主电源继电器驱动 高使能
- SetBit(P5_OE, P51);
- SetBit(P5_PU, P51);
- GP51 = 0;
- // 预驱复位控制 低复位
- SetBit(P0_OE, P04);
- SetBit(P0_PU, P04);
- GP04 = 0;
- }
- /**
- @function PreDriver_Falut_Init
- @brief 预驱故障中断
- @date 2025-10-31
- */
- void PreDriver_Falut_Init(void)
- {
- // 关闭输出 配置上拉
- ClrBit(P0_OE, PIN2);
- SetBit(P0_PU, PIN2);
- // 中断源配置为P02
- SetReg(LVSR, EXT0CFG0 | EXT0CFG1 | EXT0CFG2, EXT0CFG1);
- // 清除中断标志位
- IF0 = 0;
- // 配置为下降沿触发
- IT01 = 0;
- IT00 = 1;
- // 中断触发时自动关闭MOE
- SetBit(EVT_FILT, INT0_MOE_EN);
- // 不滤波
- ClrBit(EVT_FILT, EFDIV0 | EFDIV1);
- // 配置中断优先级为最高
- SetBit(IP0, PX00 | PX01);
- // 外部中断0使能
- EX0 = 1;
- }
- LED_Control_t ledControl = { LED_STATE_OFF, 0, 0 };
- /**
- @function LED_State_Display
- @brief 指示运行与故障代码
- @param[in] Xn0: [输入/出] 故障代码
- @date 2025-05-30
- */
- void LED_State_Display(uint8_t Xn0)
- {
- switch (ledControl.LedState)
- {
- // 关闭状态
- case LED_STATE_OFF:
-
- // 存在故障 切入故障状态 清零计数
- if (Xn0)
- {
- ledControl.LedState = LED_STATE_BLINK_FAULT;
- ledControl.PauseDelayCnt = 0;
- ledControl.BlinkCnt = 0;
- }
- // 开启状态且无故障 切入开启状态并打开LED
- else if (isCtrlPowOn)
- {
- ledControl.LedState = LED_STATE_ON;
- LED_ON;
- }
-
- break;
-
- // 开启状态
- case LED_STATE_ON:
-
- // 故障或停止时 关闭LED并切回关闭状态
- if (!isCtrlPowOn || Xn0)
- {
- ledControl.LedState = LED_STATE_OFF;
- LED_OFF;
- }
-
- break;
-
- // 故障指示状态
- case LED_STATE_BLINK_FAULT:
- ledControl.PauseDelayCnt ++;
-
- // 延时等待
- if (ledControl.PauseDelayCnt >= 500)
- {
- ledControl.PauseDelayCnt = 0;
- LED_TOGGLE;
-
- // 灭灯时计数
- if (LED_OFF_STATE)
- {
- ledControl.BlinkCnt ++;
-
- // 完成一个周期的闪烁 切换到延时等待模式
- if (ledControl.BlinkCnt >= Xn0)
- { ledControl.LedState = LED_STATE_POST_FAULT_DELAY; }
- }
- }
-
- // 故障清除后 立刻回到熄灭状态
- if (!Xn0)
- {
- LED_OFF;
- ledControl.LedState = LED_STATE_OFF;
- }
-
- break;
-
- // 延迟等待
- case LED_STATE_POST_FAULT_DELAY:
- ledControl.PauseDelayCnt ++;
-
- // 延时满足或故障清除回到关闭状态
- if ((ledControl.PauseDelayCnt >= 1000) || (!Xn0))
- { ledControl.LedState = LED_STATE_OFF; }
-
- break;
- }
- }
- volatile Power_Control_t powerControl ={DELAY_POWER_ON,0};
- /**
- * @function Power_In_Control
- * @brief 上电控制与预驱复位控制
- * @date 2025-11-01
- */
- void Power_In_Control(void)
- {
- switch (powerControl.PowerSate)
- {
- case DELAY_POWER_ON:
- {
- powerControl.PowerInCnt ++;
-
- if (powerControl.PowerInCnt > 5000)
- {
- // 继电器上电
- MAIN_RELAY = 1;
- powerControl.PowerInCnt = 0;
- powerControl.PowerSate = DELAY_FREE_RST;
- }
-
- break;
- }
-
- case DELAY_FREE_RST:
- {
- powerControl.PowerInCnt ++;
-
- if (powerControl.PowerInCnt > 1000)
- {
- powerControl.PowerInCnt = 0;
- powerControl.PowerSate = POWER_RUN;
- }
-
- break;
- }
-
- case POWER_RUN:
- {
- if (mcFaultSource == FaultNoSource)
- { PRE_DRIVER_RST = 1; }
- }
- }
- }
- /*Value--定时时间,单位ms,最小定时时间8ms,最大定时1800ms*/
- void WatchDogConfig(uint32 value, uint8 Status)
- {
- SetReg(CCFG1, WDT_EN, (Status ? WDT_EN : 0x00));
- WDT_ARR = ((uint16)(65532 - value * 32768 / 1000) >> 8);
- ClrBit(WDT_CR, WDTF);
- SetBit(WDT_CR, WDTRF);
- }
|