Commit f9b0a8f2 authored by 王金亮's avatar 王金亮

feat:解决休眠唤醒后,630H不跟底板通信问题

1、唤醒后是未配置串口,也会导致无法通信的问题
2、因为休眠的时候关闭了时钟源,所以导致唤醒后没时钟,串口无法通信,现在在休眠之前配置为HSI,休眠唤醒后配置为PLL
3、更新到厂家新的CGC库
parent 1df233b0
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "Telltales\Telltales_user.h" #include "Telltales\Telltales_user.h"
#include "Telltales\Telltales_Lib.h" #include "Telltales\Telltales_Lib.h"
#include "Application\BlueTooth.h" #include "Application\BlueTooth.h"
#include "cgc.h"
#endif #endif
...@@ -44,6 +44,7 @@ static void Power_KL30_Init(void) ...@@ -44,6 +44,7 @@ static void Power_KL30_Init(void)
loc_config.u32UARTbps = 115200U; loc_config.u32UARTbps = 115200U;
loc_config.pfnUARTConfirmCallBack = NULL; loc_config.pfnUARTConfirmCallBack = NULL;
loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData; loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData;
UART_DeInit(UART2);
RTE_UART_Init(UART_CH2, &loc_config); RTE_UART_Init(UART_CH2, &loc_config);
Common_DataInit(); Common_DataInit();
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
...@@ -76,12 +77,14 @@ static void Power_KL30_Init(void) ...@@ -76,12 +77,14 @@ static void Power_KL30_Init(void)
static void Power_Wakeup_Init(void) static void Power_Wakeup_Init(void)
{ {
UART_Channel_Config_st_t loc_config;
Common_DataInit(); Common_DataInit();
Gpio_Init(Gpio_WakeUp_Init); Gpio_Init(Gpio_WakeUp_Init);
eeprom_StoreInfo_Init(); eeprom_StoreInfo_Init();
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
Data_User_Mileage_WakeupInit(); Data_User_Mileage_WakeupInit();
Sys_WakeUp_Init(); Sys_WakeUp_Init();
RTE_CLOCK_Select_Start(); /* 由于休眠的时候时钟关闭,唤醒的时候打开时钟,才能进行下一步 */
Data_Vehicle_Speed_KL30_Wakeup_Init(); Data_Vehicle_Speed_KL30_Wakeup_Init();
Data_Engine_Speed_KL30_Wakeup_Init(); Data_Engine_Speed_KL30_Wakeup_Init();
LINE_IN_Init(); LINE_IN_Init();
...@@ -89,6 +92,13 @@ static void Power_Wakeup_Init(void) ...@@ -89,6 +92,13 @@ static void Power_Wakeup_Init(void)
Line_In_KL15_ON_Init(); Line_In_KL15_ON_Init();
Fuel_KL30_Init(); Fuel_KL30_Init();
Backlight_KL30_Wakeup_Init(); Backlight_KL30_Wakeup_Init();
RTE_UART_Sleep_Init(UART_CH2);
loc_config.u32UARTChEn = 1U;
loc_config.u32UARTbps = 115200U;
loc_config.pfnUARTConfirmCallBack = NULL;
loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData;
UART_DeInit(UART2);
RTE_UART_Init(UART_CH2, &loc_config); /* 配置串口,630H上电发送0x0D,但是底板没回复 */
Amt630hInit(); Amt630hInit();
TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 20000, 64000000); TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 20000, 64000000);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
...@@ -124,8 +134,6 @@ static void Power_IG_ON_Init(void) ...@@ -124,8 +134,6 @@ static void Power_IG_ON_Init(void)
Fuel_KL15_Init(); Fuel_KL15_Init();
//RTE_GPIO_Set_Level(Blacklight_PWM, 1); //RTE_GPIO_Set_Level(Blacklight_PWM, 1);
FaultCode_Init(); FaultCode_Init();
Amt630hInit();
ResetInitedState();
} }
static void Power_Sleep_Init(void) static void Power_Sleep_Init(void)
...@@ -139,10 +147,11 @@ static void Power_Sleep_Init(void) ...@@ -139,10 +147,11 @@ static void Power_Sleep_Init(void)
Gpio_Init(Gpio_Sleep_Init); Gpio_Init(Gpio_Sleep_Init);
AMT630H_Sleep(); AMT630H_Sleep();
Analog_Signal_Conv_Stop(); Analog_Signal_Conv_Stop();
if (RTE_GPIO_Get_Level(KL15_AD_IN) == 0)/* KL15 */ RTE_UART_Sleep_Init(UART_CH2);
{ CGC_HSI_CFG_AS_FCLK(); /* 配置时钟生成控制器(cgc)以将内部高速振荡器(HSI)作为CPU系统时钟(FCLK)以及可能的其他硬件电路的时钟源。 */
//SystemCoreClockUpdate(); /* 更新时钟频率,暂时用不上,先注释 */
RTE_DEEPSLEEP_Enable(); RTE_DEEPSLEEP_Enable();
} // RTE_CLOCK_Select_Sleep(); /* 这边代码是开启时钟,暂时用不上,先注释 */
} }
static Power_Status_em Power_Stay_ON(void) static Power_Status_em Power_Stay_ON(void)
...@@ -209,6 +218,7 @@ static Power_Status_em Power_Stay_Protect(void) ...@@ -209,6 +218,7 @@ static Power_Status_em Power_Stay_Protect(void)
if ( SYS_OPR_STAT_RUN ) if ( SYS_OPR_STAT_RUN )
{ {
Amt630hInit();
//CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable); //CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
return u8PowerSts; return u8PowerSts;
} }
......
...@@ -68,6 +68,7 @@ void UART_DeInit(SCIAFSelect_TypeDef UARTx) ...@@ -68,6 +68,7 @@ void UART_DeInit(SCIAFSelect_TypeDef UARTx)
CGC_PER0PeriphClockCmd(UARTx >> 10, DISABLE); CGC_PER0PeriphClockCmd(UARTx >> 10, DISABLE);
SCIChannel_Free(UARTx, UART_Mode_Rx | UART_Mode_Tx); SCIChannel_Free(UARTx, UART_Mode_Rx | UART_Mode_Tx);
} }
SCIChannel_Free(UARTx, UART_Mode_Rx | UART_Mode_Tx);
} }
/** /**
......
...@@ -5,5 +5,6 @@ ...@@ -5,5 +5,6 @@
extern void RTE_CLOCK_Select_Start(void); extern void RTE_CLOCK_Select_Start(void);
extern void RTE_CLOCK_Select_Stop(void); extern void RTE_CLOCK_Select_Stop(void);
extern void RTE_CLOCK_Select_Sleep(void);
#endif #endif
...@@ -15,8 +15,8 @@ void RTE_CLOCK_Select_Start(void) ...@@ -15,8 +15,8 @@ void RTE_CLOCK_Select_Start(void)
#ifdef USED_FX_FCLK #ifdef USED_FX_FCLK
CGC_Osc_Setting(OSC_OSCILLATOR,OSC_UNDER_10M,OSC_OSCILLATOR,OSC_NORMAL_POWER); CGC_Osc_Setting(OSC_OSCILLATOR,OSC_UNDER_10M,OSC_OSCILLATOR,OSC_NORMAL_POWER);
CGC_PLL_Setting(PLL_SR_fMX,PLL_DIV_2,PLL_MUL_16); CGC_PLL_Setting(PLL_SR_fMX,PLL_DIV_2,PLL_MUL_16);/* CGC_PLL_Setting 用于配置PLL(相位锁定环)作为系统时钟以及可能的外设硬件电路的时钟源。 */
CGC_PLL_CFG_AS_FCLK(); CGC_PLL_CFG_AS_FCLK(); /* PLL的输出频率配置为CPU系统时钟以及外设硬件电路的时钟源。 */
delay_init(64000000); delay_init(64000000);
SystemCoreClock = 64000000UL; SystemCoreClock = 64000000UL;
#endif #endif
...@@ -40,3 +40,20 @@ uint32_t RTE_CLOCK_Sys_Get(void) ...@@ -40,3 +40,20 @@ uint32_t RTE_CLOCK_Sys_Get(void)
} }
void RTE_CLOCK_Select_Sleep(void)
{
uint8_t u8tempstabset1 = 0U;
uint8_t u8tempstabwait1 = 0U;
u8tempstabset1 = _FF_CGC_OSCSTAB_STA18;
do
{
u8tempstabwait1 = CGC->OSTC;
u8tempstabwait1 &= u8tempstabset1;
}
while (u8tempstabwait1 != u8tempstabset1);
CGC_PLL_Setting(PLL_SR_fMX,PLL_DIV_2,PLL_MUL_16);
CGC_PLL_CFG_AS_FCLK();//SRAM区运行
SystemCoreClock = 64000000UL;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment