Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
haoJin750TFT
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
时昊
haoJin750TFT
Commits
6d59e9d9
Commit
6d59e9d9
authored
Dec 30, 2024
by
张金硕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
feat:按照一部代码填加串口rx的DMA功能
parent
6ddf8a84
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
146 additions
and
7 deletions
+146
-7
HaoJin750TFT.sct
...ject/Cmsemicon/BAT32A279/MDK_ARM/Objects/HaoJin750TFT.sct
+1
-1
AMT630H.c
Firmware/Source/Component/AMT630H/AMT630H.c
+71
-1
AMT630H.h
Firmware/Source/Component/AMT630H/AMT630H.h
+10
-2
GraphicsFunc.c
Firmware/Source/Component/AMT630H/GraphicsFunc.c
+13
-1
Components.h
Firmware/Source/Component/Components.h
+14
-0
PowerManag_user.c
Firmware/Source/Component/PowerManagement/PowerManag_user.c
+32
-0
RTE_UART.c
...are/Source/Device/Cmsemicon/BAT32A279/RTE/UART/RTE_UART.c
+1
-1
Sys_Task_List.c
Firmware/Source/System/Sys_Task_List.c
+4
-1
No files found.
Firmware/Project/Cmsemicon/BAT32A279/MDK_ARM/Objects/HaoJin750TFT.sct
View file @
6d59e9d9
...
...
@@ -9,7 +9,7 @@ LR_IROM1 0x0000C400 0x00073C00 { ; load region size_region
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000
0
00 0x0000FF00 { ; RW data
RW_IRAM1 0x20000
4
00 0x0000FF00 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x2000FF00 0x00000100 { ; RW data
...
...
Firmware/Source/Component/AMT630H/AMT630H.c
View file @
6d59e9d9
#include "AMT630H.h"
#include <stdint.h>
#include "UartProtocol.h"
#include "Components.h"
#include "PicBin.h"
#include "GpioUser.h"
__align
(
4
)
/* 四字节对齐 */
...
...
@@ -198,6 +197,76 @@ void Delay_Time_Ctrl(unsigned long Tms)
Delay_Time_Set
=
0
;
}
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
uint8_t
UartRevBuff
[
MCU_RX_630_UART_BUF_SIZE
]
=
{
0
};
uint8_t
UartRevBuff1
[
MCU_RX_630_UART_BUF_SIZE
]
=
{
0
};
uint32_t
UartRevPos
=
0
;
uint32_t
UartLastCnt
=
0
;
uint32_t
UartRevCnts
=
0
;
uint32_t
rx_flag
=
0
;
uint32_t
textError
=
0
;
uint8_t
err_type
=
0
;
uint32_t
EnterErrorCnts
=
0
;
uint32_t
AddressError
=
0
;
uint32_t
textLastAddressError
=
0x40041512
;
void
mwAmt630hUartDMA_RecvData
(
void
)
{
uint32_t
rxCnt
=
0
;
uint32_t
tmpCnt
=
0
;
uint8_t
overFlowFlag
=
0
;
// accumulate receive Counts
rxCnt
=
DMAVEC
->
CTRL
[
USE_DMA_AREA
].
DMRLD
-
DMAVEC
->
CTRL
[
USE_DMA_AREA
].
DMACT
;
if
(
rxCnt
>
MCU_RX_630_UART_BUF_SIZE
)
{
rxCnt
=
UartLastCnt
;
}
if
(
rxCnt
!=
UartLastCnt
)
{
rx_flag
=
1
;
if
(
rxCnt
>
UartLastCnt
)
{
tmpCnt
=
rxCnt
-
UartLastCnt
;
}
else
{
tmpCnt
=
MCU_RX_630_UART_BUF_SIZE
-
UartLastCnt
;
overFlowFlag
=
1
;
}
UartLastCnt
=
rxCnt
;
}
if
(
rx_flag
==
1
)
{
if
(
overFlowFlag
==
0
)
{
memcpy
(
&
UartRevBuff
[
UartRevCnts
],
&
UartRevBuff1
[
UartRevCnts
],
tmpCnt
);
UartRevCnts
+=
tmpCnt
;
if
(
UartRevCnts
>=
MCU_RX_630_UART_BUF_SIZE
)
{
UartRevCnts
=
0
;
}
}
else
{
memcpy
(
&
UartRevBuff
[
UartRevCnts
],
&
UartRevBuff1
[
UartRevCnts
],
tmpCnt
);
UartRevCnts
=
0
;
memcpy
(
&
UartRevBuff
[
UartRevCnts
],
&
UartRevBuff1
[
UartRevCnts
],
rxCnt
);
overFlowFlag
=
0
;
UartRevCnts
+=
rxCnt
;
}
rx_flag
=
0
;
}
}
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
uint8_t
UartRevBuff
[
0x1000
]
=
{
0
};
uint32_t
UartRevCnts
=
0
;
void
Amt630hUartRecvData
(
uint16_t
u16UARTData
)
...
...
@@ -208,6 +277,7 @@ void Amt630hUartRecvData(uint16_t u16UARTData)
UartRevCnts
=
0
;
}
}
#endif
void
AMT630H_RstCtrl
(
void
)
{
RTE_GPIO_Set_Level
(
VCC_33_EN_MCU
,
0
);
//630
...
...
Firmware/Source/Component/AMT630H/AMT630H.h
View file @
6d59e9d9
#ifndef AMT_630H_H
#define AMT_630H_H
#include <stdint.h>
#include "Components.h"
typedef
enum
{
EM_FLASH_CHECK_RESULT_NO_ACT
=
0
,
...
...
@@ -27,9 +27,17 @@ typedef struct __attribute__((aligned(4)))
(((AMT630H_ANIMATION_TIME) / AMT630H_ANIMATION_PIC_NUM) - 5))
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
void
Amt630hUartRecvData
(
uint16_t
u16UARTData
);
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
extern
uint8_t
UartRevBuff1
[
MCU_RX_630_UART_BUF_SIZE
];
extern
void
mwAmt630hUartDMA_RecvData
(
void
);
#endif
void
AMT630H_Timer
(
unsigned
char
Tms
);
void
Delay_Time_Ctrl
(
unsigned
long
Tms
);
void
Amt630hUartRecvData
(
uint16_t
u16UARTData
);
void
AMT630H_Animation_PlayProc
(
uint16_t
PicIndex
);
void
AMT630H_RstCtrl
(
void
);
void
Amt630hInit
(
void
);
...
...
Firmware/Source/Component/AMT630H/GraphicsFunc.c
View file @
6d59e9d9
...
...
@@ -5,14 +5,26 @@
#include "UDS_ISO14229_Services.h"
#include "flash.h"
#include "Device\Cmsemicon\BAT32A279\RTE\UART\RTE_UART.h"
#include "Components.h"
#define NULL 0
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
extern
uint8_t
UartRevBuff
[
0x1000
];
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
extern
uint8_t
UartRevBuff
[
MCU_RX_630_UART_BUF_SIZE
];
#endif
extern
uint32_t
UartRevCnts
;
uint8_t
*
GetUartRecvData
(
uint32_t
*
UartRecvBufLen
,
uint32_t
*
UartRecvPos
)
{
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
*
UartRecvBufLen
=
0x1000
;
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
*
UartRecvBufLen
=
MCU_RX_630_UART_BUF_SIZE
;
#endif
*
UartRecvPos
=
UartRevCnts
;
return
UartRevBuff
;
}
...
...
Firmware/Source/Component/Components.h
View file @
6d59e9d9
#ifndef COMPONENTS_H__
#define COMPONENTS_H__
/* mcu receive 630 data mode */
#define MCU_RX_630_MODE_UART_INTERRUPT 0
#define MCU_RX_630_MODE_UART_DMA 1
#define MCU_RX_630_MODE MCU_RX_630_MODE_UART_DMA
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
#define MCU_RX_630_UART_BUF_SIZE 0x800
#define UART_USE_DMA 1
#define USE_DMA_AREA 4
#endif
#include "Simulated_IIC_master\Simulated_IIC_master.h"
#include "System_Monitor\System_Monitor.h"
#include "Key\Key_user.h"
...
...
Firmware/Source/Component/PowerManagement/PowerManag_user.c
View file @
6d59e9d9
...
...
@@ -2,6 +2,7 @@
#include "Components.h"
#include "FaultCode.h"
#include "System_Monitor\System_Monitor_User.h"
#include "dma.h"
RTC_Information_st_t
g_stRTCInformation
;
...
...
@@ -46,9 +47,34 @@ static void Power_KL30_Init(void)
loc_config
.
u32UARTChEn
=
1U
;
loc_config
.
u32UARTbps
=
500000U
;
loc_config
.
pfnUARTConfirmCallBack
=
NULL
;
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
loc_config
.
pfnUARTReadMsgCallBack
=
Amt630hUartRecvData
;
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
loc_config
.
pfnUARTReadMsgCallBack
=
NULL
;
#endif
UART_DeInit
(
UART2
);
//50us
RTE_UART_Init
(
UART_CH2
,
&
loc_config
);
//68.35ms
DMA_InitTypeDef
DMA_InitTypeDef_Struct
;
DMA_InitTypeDef_Struct
.
DMA_Vector
=
DMA_VECTOR_SR2
;
//指定串口2为启动源
DMA_InitTypeDef_Struct
.
DMA_CtrlId
=
4
;
//指定启动源在DMA控制数据区的ID
DMA_InitTypeDef_Struct
.
DMA_SrcAddr
=
(
uint32_t
)
&
SCI1
->
SCI
.
RXD2
/*0x40041512*/
;
//传送源地址
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_SrcInc
=
0
;
//传送源地址不自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“1”(传送源为重复区)时,SAMOD位的设置无效。
DMA_InitTypeDef_Struct
.
DMA_DstInc
=
0
;
//传送目标地址自增,DMACR寄存器,MODE位为“1”(重复模式)并且RPTSEL位为“0”(传送目标为重复区)时,SAMOD位的设置无效。
DMA_InitTypeDef_Struct
.
DMA_DataSize
=
DMA_DataSize_Byte
;
//传送数据长度为8位
DMA_InitTypeDef_Struct
.
DMA_Mode
=
DMA_Mode_Repeat
;
//重复模式
DMA_InitTypeDef_Struct
.
DMA_RepeatAreaAddr
=
DMA_RepeatAreaAddr_Dst
;
//DMACR寄存器,RPTSEL位为“0”(传送目标为重复区)
DMA_InitTypeDef_Struct
.
DMA_RepeatInt
=
DMA_RepeatInt_Disable
;
//禁止发生中断
DMA_InitTypeDef_Struct
.
DMA_ChainTrans
=
DMA_ChainTrans_None
;
//禁止链传送
DMA_Init
(
&
DMA_InitTypeDef_Struct
);
DMA_Start
(
DMA_VECTOR_SR2
);
Common_DataInit
();
//50us
Analog_Signal_Conv_Init
();
//150us
Sys_KL30_Init
();
//275.55ms
...
...
@@ -110,7 +136,13 @@ static void Power_Wakeup_Init(void)
loc_config
.
u32UARTChEn
=
1U
;
loc_config
.
u32UARTbps
=
115200U
;
loc_config
.
pfnUARTConfirmCallBack
=
NULL
;
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_INTERRUPT)
loc_config
.
pfnUARTReadMsgCallBack
=
Amt630hUartRecvData
;
#endif
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
loc_config
.
pfnUARTReadMsgCallBack
=
NULL
;
#endif
UART_DeInit
(
UART2
);
RTE_UART_Init
(
UART_CH2
,
&
loc_config
);
/* 配置串口,630H上电发送0x0D,但是底板没回复 */
Amt630hInit
();
...
...
Firmware/Source/Device/Cmsemicon/BAT32A279/RTE/UART/RTE_UART.c
View file @
6d59e9d9
...
...
@@ -201,7 +201,7 @@ uint32_t RTE_UART_Init(UART_Channel_en_t enUARTCh, UART_Channel_Config_st_t *pen
stUARTCh2Cfg
.
pfnUARTReadMsgCallBack
=
penUARTCfg
->
pfnUARTReadMsgCallBack
;
ISR_Register
(
ST2_IRQn
,
UART_CH2_TX_ISR
);
//串口2发送中断服务路径注册
ISR_Register
(
SR2_IRQn
,
UART_CH2_RX_ISR
);
//串口2接收中断服务路径注册
//
ISR_Register(SR2_IRQn, UART_CH2_RX_ISR); //串口2接收中断服务路径注册
ret
=
UART_Init
(
UART2
,
&
stUART_InitStruct
);
break
;
...
...
Firmware/Source/System/Sys_Task_List.c
View file @
6d59e9d9
...
...
@@ -12,6 +12,9 @@ void Sys_Pseudo_Real_Time_Tasks(void)
Power_Management_Service
();
DoCAN_Communication_Service
();
UDS_Server_Application_Service
();
#if (MCU_RX_630_MODE == MCU_RX_630_MODE_UART_DMA)
mwAmt630hUartDMA_RecvData
();
#endif
}
void
Sys_2ms_Tasks
(
void
)
...
...
@@ -20,7 +23,7 @@ void Sys_2ms_Tasks(void)
Sys_Status_Update_Service
();
Analog_Signal_Conv_Service
();
AMT630H_Main
();
Check_MCU_Info_in_630H
();
//
Check_MCU_Info_in_630H();
DoCAN_Timer_Update
(
2000u
);
//Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 2000u);无外发
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment