Commit dfe01c73 authored by 张金硕's avatar 张金硕

feat:新增休眠唤醒启停DMA功能

parent 6d59e9d9
...@@ -56,16 +56,16 @@ static void Power_KL30_Init(void) ...@@ -56,16 +56,16 @@ static void Power_KL30_Init(void)
#endif #endif
UART_DeInit(UART2); //50us UART_DeInit(UART2); //50us
RTE_UART_Init(UART_CH2, &loc_config); //68.35ms RTE_UART_Init(UART_CH2, &loc_config); //68.35ms
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
DMA_InitTypeDef DMA_InitTypeDef_Struct; DMA_InitTypeDef DMA_InitTypeDef_Struct;
DMA_InitTypeDef_Struct.DMA_Vector = DMA_VECTOR_SR2;//指定串口2为启动源 DMA_InitTypeDef_Struct.DMA_Vector = DMA_VECTOR_SR2;//指定串口2为启动源
DMA_InitTypeDef_Struct.DMA_CtrlId = 4;//指定启动源在DMA控制数据区的ID DMA_InitTypeDef_Struct.DMA_CtrlId = 4;//指定启动源在DMA控制数据区的ID
DMA_InitTypeDef_Struct.DMA_SrcAddr =(uint32_t)&SCI1->SCI.RXD2 /*0x40041512*/;//传送源地址 DMA_InitTypeDef_Struct.DMA_SrcAddr =(uint32_t)&SCI1->SCI.RXD2 /*0x40041512*/;//传送源地址
DMA_InitTypeDef_Struct.DMA_DstAddr = (uint32_t)UartRevBuff1;//传送目标地址 DMA_InitTypeDef_Struct.DMA_DstAddr = (uint32_t)UartRevBuff1;//传送目标地址
DMA_InitTypeDef_Struct.DMA_BufferSize = MCU_RX_630_UART_BUF_SIZE;//0x800的buffer,也是DMA重复循环一轮传输数据的次数 DMA_InitTypeDef_Struct.DMA_BufferSize = MCU_RX_630_UART_BUF_SIZE;//0x800的buffer,也是DMA重复循环一轮传输数据的次数
DMA_InitTypeDef_Struct.DMA_SrcInc = 0;//传送源地址不自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“1”(传送源为重复区)时,SAMOD位的设置无效。 DMA_InitTypeDef_Struct.DMA_SrcInc = 0;//传送源地址不自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“1”(传送源为重复区)时,SAMOD位的设置无效。
DMA_InitTypeDef_Struct.DMA_DstInc = 0;//传送目标地址自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“0”(传送目标为重复区)时,SAMOD位的设置无效。 DMA_InitTypeDef_Struct.DMA_DstInc = 0;//传送目标地址自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“0”(传送目标为重复区)时,DAMOD位的设置无效。
DMA_InitTypeDef_Struct.DMA_DataSize = DMA_DataSize_Byte;//传送数据长度为8位 DMA_InitTypeDef_Struct.DMA_DataSize = DMA_DataSize_Byte;//传送数据长度为8位
DMA_InitTypeDef_Struct.DMA_Mode = DMA_Mode_Repeat;//重复模式 DMA_InitTypeDef_Struct.DMA_Mode = DMA_Mode_Repeat;//重复模式
DMA_InitTypeDef_Struct.DMA_RepeatAreaAddr = DMA_RepeatAreaAddr_Dst;//DMACR寄存器,RPTSEL位为“0”(传送目标为重复区) DMA_InitTypeDef_Struct.DMA_RepeatAreaAddr = DMA_RepeatAreaAddr_Dst;//DMACR寄存器,RPTSEL位为“0”(传送目标为重复区)
...@@ -74,6 +74,7 @@ static void Power_KL30_Init(void) ...@@ -74,6 +74,7 @@ static void Power_KL30_Init(void)
DMA_Init(&DMA_InitTypeDef_Struct); DMA_Init(&DMA_InitTypeDef_Struct);
DMA_Start(DMA_VECTOR_SR2); DMA_Start(DMA_VECTOR_SR2);
#endif
Common_DataInit(); //50us Common_DataInit(); //50us
Analog_Signal_Conv_Init(); //150us Analog_Signal_Conv_Init(); //150us
...@@ -134,7 +135,7 @@ static void Power_Wakeup_Init(void) ...@@ -134,7 +135,7 @@ static void Power_Wakeup_Init(void)
BackLight_WakeUp_Init(); BackLight_WakeUp_Init();
RTE_UART_Sleep_Init(UART_CH2); RTE_UART_Sleep_Init(UART_CH2);
loc_config.u32UARTChEn = 1U; loc_config.u32UARTChEn = 1U;
loc_config.u32UARTbps = 115200U; loc_config.u32UARTbps = 500000U;
loc_config.pfnUARTConfirmCallBack = NULL; loc_config.pfnUARTConfirmCallBack = NULL;
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT) #if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData; loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData;
...@@ -145,6 +146,9 @@ static void Power_Wakeup_Init(void) ...@@ -145,6 +146,9 @@ static void Power_Wakeup_Init(void)
#endif #endif
UART_DeInit(UART2); UART_DeInit(UART2);
RTE_UART_Init(UART_CH2, &loc_config); /* 配置串口,630H上电发送0x0D,但是底板没回复 */ RTE_UART_Init(UART_CH2, &loc_config); /* 配置串口,630H上电发送0x0D,但是底板没回复 */
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
DMA_Start(DMA_VECTOR_SR2);
#endif
Amt630hInit(); Amt630hInit();
Telltales_Init(); Telltales_Init();
Key_KL30_Init_EXample(); Key_KL30_Init_EXample();
...@@ -204,6 +208,9 @@ static void Power_Sleep_Init(void) ...@@ -204,6 +208,9 @@ static void Power_Sleep_Init(void)
Gpio_Init(Gpio_Sleep_Init); Gpio_Init(Gpio_Sleep_Init);
Analog_Signal_Conv_Stop(); Analog_Signal_Conv_Stop();
RTE_UART_Sleep_Init(UART_CH2); RTE_UART_Sleep_Init(UART_CH2);
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
DMA_Stop(DMA_VECTOR_SR2);
#endif
CGC_HSI_CFG_AS_FCLK(); /* 配置时钟生成控制器(cgc)以将内部高速振荡器(HSI)作为CPU系统时钟(FCLK)以及可能的其他硬件电路的时钟源。 */ CGC_HSI_CFG_AS_FCLK(); /* 配置时钟生成控制器(cgc)以将内部高速振荡器(HSI)作为CPU系统时钟(FCLK)以及可能的其他硬件电路的时钟源。 */
//SystemCoreClockUpdate(); /* 更新时钟频率,暂时用不上,先注释 */ //SystemCoreClockUpdate(); /* 更新时钟频率,暂时用不上,先注释 */
RTE_DEEPSLEEP_Enable(); RTE_DEEPSLEEP_Enable();
......
...@@ -201,7 +201,9 @@ uint32_t RTE_UART_Init(UART_Channel_en_t enUARTCh, UART_Channel_Config_st_t *pen ...@@ -201,7 +201,9 @@ uint32_t RTE_UART_Init(UART_Channel_en_t enUARTCh, UART_Channel_Config_st_t *pen
stUARTCh2Cfg.pfnUARTReadMsgCallBack = penUARTCfg->pfnUARTReadMsgCallBack; stUARTCh2Cfg.pfnUARTReadMsgCallBack = penUARTCfg->pfnUARTReadMsgCallBack;
ISR_Register(ST2_IRQn, UART_CH2_TX_ISR); //串口2发送中断服务路径注册 ISR_Register(ST2_IRQn, UART_CH2_TX_ISR); //串口2发送中断服务路径注册
// ISR_Register(SR2_IRQn, UART_CH2_RX_ISR); //串口2接收中断服务路径注册 #if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
ISR_Register(SR2_IRQn, UART_CH2_RX_ISR); //串口2接收中断服务路径注册
#endif
ret = UART_Init(UART2, &stUART_InitStruct); ret = UART_Init(UART2, &stUART_InitStruct);
break; break;
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "stdint.h" #include "stdint.h"
#include "uart.h" #include "uart.h"
#include "Components.h"
/***************************************************************/ /***************************************************************/
/***************************************************************/ /***************************************************************/
......
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