搭架构

This commit is contained in:
sunbeam 2024-05-14 16:05:43 +08:00
parent acac69d9a8
commit 9264a68c73
18 changed files with 1077 additions and 611 deletions

View File

@ -14,7 +14,6 @@ btnReadF199={cls="button";text="读取F199";left=149;top=415;right=248;bottom=44
btnReadHw={cls="button";text="读取硬件版本号";left=149;top=381;right=248;bottom=409;z=12};
btnReadSw={cls="button";text="读取软件版本号";left=37;top=382;right=136;bottom=410;z=10};
btnTest={cls="button";text="停止";left=149;top=316;right=248;bottom=344;z=11};
button={cls="button";text="Button";left=248;top=445;right=278;bottom=459;z=26};
cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3};
cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1};
checkbox={cls="checkbox";text="CANFD设备";left=151;top=101;right=248;bottom=120;checked=1;z=21};
@ -256,9 +255,6 @@ mainForm.onClose = function(hwnd,message,wParam,lParam){
}
mainForm.button.oncommand = function(id,event){
DiagReadDID(0xF191);
}
mainForm.show();
return win.loopMessage();

View File

@ -405,17 +405,6 @@ FuncBootSeq = function(){
}
}
case 19 {
if(sendstate == 0){//复位
FuncClearState();
FuncReq11(0x03);
}
else {
var ret = FuncWait(0x11);
nextstate(ret);
}
}
case 20 {
if(sendstate == 0){//等待复位完成
delaycount = 0;
FuncClearState();
@ -428,8 +417,32 @@ FuncBootSeq = function(){
}
}
case 20 {
if(sendstate == 0){//复位
FuncClearState();
FuncReq11(0x03);
}
else {
var ret = FuncWait(0x11);
nextstate(ret);
}
}
case 21 {
if(sendstate == 0){//等待复位完成
delaycount = 0;
FuncClearState();
}
else {
delaycount += 1;
if(delaycount > 200){
nextstate(0);//延时1S
}
}
}
case 22 {
if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话
FuncClearState();
@ -439,7 +452,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 22 {
case 23 {
if(sendstate == 0){
FuncReq28(0x00,0x01);//开启发送
FuncClearState();
@ -449,7 +462,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 23 {
case 24 {
if(sendstate == 0){
FuncReq85(0x01);//开启DTC
FuncClearState();
@ -459,7 +472,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 24 {
case 25 {
if(sendstate == 0){
FuncReq10(true,0x01);//进入默认会话
FuncClearState();

View File

@ -0,0 +1,21 @@
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"E:\\Program Files\\IAR Systems\\Embedded Workbench 9.2\\arm\\inc\\c\\"
],
"defines": [
"MCU_CVM0144FMLH",
"__INT32_T_TYPE__=signed long",
"__UINT32_T_TYPE__=unsigned long",
"__INT8_T_TYPE__=signed char",
"__UINT8_T_TYPE__=unsigned char",
"__INT16_T_TYPE__=signed int",
"__UINT16_T_TYPE__=unsigned int"
]
}
],
"version": 4
}

View File

@ -1,6 +1,19 @@
{
"files.associations": {
"mcu.h": "c",
"segger_rtt.h": "c"
}
"segger_rtt.h": "c",
"apptask.h": "c",
"uds_user.h": "c",
"uds.h": "c",
"stimer.h": "c",
"ycheck.h": "c",
"yvals.h": "c",
"stddef.h": "c",
"stdint.h": "c",
"hwctrl.h": "c",
"cvm014x_features.h": "c",
"clock_drv.h": "c",
"irq_drv.h": "c"
},
"C_Cpp.default.compilerPath": ""
}

View File

@ -359,6 +359,8 @@
<state>$PROJ_DIR$\SDK\platform\devices\CVM014x\drivers</state>
<state>$PROJ_DIR$\src\TLE9461</state>
<state>$PROJ_DIR$\src\RTT</state>
<state>$PROJ_DIR$\SDK\platform\devices\CVM014x\drivers\clock</state>
<state>$PROJ_DIR$\SDK\platform\devices\CVM014x\drivers\cpu\irq</state>
</option>
<option>
<name>CCStdIncCheck</name>
@ -444,19 +446,19 @@
</option>
<option>
<name>CCEncSource</name>
<state>0</state>
<state>2</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
<state>2</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
<state>0</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IccExceptions2</name>
@ -2959,11 +2961,20 @@
<name>$PROJ_DIR$\src\TLE9461\TLE94x1_SPI.h</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\src\appTask.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\extern.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\hwctrl.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\main.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\MotorCtrl.c</name>
</file>
</group>
</project>

View File

@ -3600,11 +3600,20 @@
<name>$PROJ_DIR$\src\TLE9461\TLE94x1_SPI.h</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\src\appTask.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\extern.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\hwctrl.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\main.c</name>
</file>
<file>
<name>$PROJ_DIR$\src\MotorCtrl.c</name>
</file>
</group>
</project>

View File

@ -25,8 +25,8 @@
<MemConfigValue>E:\Program Files\IAR Systems\Embedded Workbench 9.2\arm\config\debugger\CVAChip\CVM0144.ddf</MemConfigValue>
</PlDriver>
<ArmDriver>
<EnableCache>0</EnableCache>
<EnforceMemoryConfiguration>1</EnforceMemoryConfiguration>
<EnableCache>0</EnableCache>
</ArmDriver>
<DebugChecksum>
<Checksum>3190234441</Checksum>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
#include "MotorCtrl.h"
#include "hwctrl.h"
void MotorCtrl_Init(McuType *obj)
{
for (uint8_t i = 0; i < 6; i++)
{
hw_MotorCtrl(obj, i, Motor_ACT_NOACT);
}
}
void MotorCtrl_Maintask(McuType *obj)//10ms task
{
static uint8_t motor_cnt = 0,motor_act=0,run_count=0;
run_count++;
if (run_count > 100)
{
run_count = 0;
}
}

View File

@ -0,0 +1,12 @@
#ifndef __MOTORCTRL_H
#define __MOTORCTRL_H
#include "Mcu.h"
void MotorCtrl_Init(McuType *obj);
void MotorCtrl_Maintask(McuType *obj);
#endif

View File

@ -2477,7 +2477,7 @@ typedef enum
SBC_MODE_SLEEP,
SBC_MODE_STOP,
SBC_MODE_RESET
};
}SBC_MODE_ENUM;
typedef enum
{
@ -2485,13 +2485,13 @@ typedef enum
SBC_VCC2_ON_NORMAL,
SBC_VCC2_ON_NORMAL_STOP,
SBC_VCC2_ON_ALWAYS
};
}SBC_VCC2_ENUM;
typedef enum
{
SBC_VCC1_OV_RST_NOACTION = 0x00U,
SBC_VCC1_OV_RST_RESTART_FAILSAFE
};
}SBC_VCC1_OV_RST_ENUM;
typedef enum
{
@ -2499,7 +2499,7 @@ typedef enum
SBC_VCC1_RT_VRT2,
SBC_VCC1_RT_VRT3,
SBC_VCC1_RT_VRT4
};
}SBC_VCC1_RT_ENUM;
/* -------------------------------- HW_CTRL_0 ----------------------------------- */
@ -2508,25 +2508,25 @@ typedef enum
{
SBC_SOFT_RESET_RST_TRIGGER_SOFTRST = 0x00U,
SBC_SOFT_RESET_RST_NOTRIGGER_SOFTRST
};
}SBC_SOFT_RESET_RST_ENUM;
typedef enum
{
SBC_FO_ON_NOT_ACTIVE = 0x00U,
SBC_FO_ON_ACTIVE
};
}SBC_FO_ON_ENUM;
typedef enum
{
SBC_CP_EN_OFF = 0x00U,
SBC_CP_EN_ON
};
}SBC_CP_EN_ENUM;
typedef enum
{
SBC_CFG1_RESTART_FAILSAFE_2WDFAIL = 0x00U,
SBC_CFG1_RESTART_FAILSAFE_1WDFAIL
};
}SBC_CFG1_RESTART_FAILSAFE_ENUM;
/* -------------------------------- WD_CTRL ------------------------------------- */
@ -2535,25 +2535,25 @@ typedef enum
{
SBC_CHECKSUM_0 = 0x00U,
SBC_CHECKSUM_1
};
}SBC_CHECKSUM_ENUM;
typedef enum
{
SBC_WD_STM_EN_0_ACTIVE_STOPMODE = 0x00U,
SBC_WD_STM_EN_0_NOTACTIVE_STOPMODE
};
}SBC_WD_STM_EN_0_ENUM;
typedef enum
{
SBC_WD_WIN_TIMEOUT_WD = 0x00U,
SBC_WD_WIN_WINDOW_WD
};
}SBC_WD_WIN_ENUM;
typedef enum
{
SBC_WD_EN_WK_BUS_NOSTART_AFTER_CANWAKE = 0x00U,
SBC_WD_EN_WK_BUS_START_LONGOPENWINDOW_CANWAKE
};
}SBC_WD_EN_WK_BUS_ENUM;
typedef enum
{
@ -2565,7 +2565,7 @@ typedef enum
SBC_WD_TIMER_500MS,
SBC_WD_TIMER_1000MS,
SBC_WD_TIMER_10000MS
};
}SBC_WD_TIMER_ENUM;
/* -------------------------------- BUS_CTRL_0 ---------------------------------- */
@ -2579,7 +2579,7 @@ typedef enum
SBC_BUS_CTRL_0_CAN_WAKECAPABLE_SWK,
SBC_BUS_CTRL_0_CAN_RECEIVEONLY_SWK,
SBC_BUS_CTRL_0_CAN_NORMAL_SWK
};
}SBC_BUS_CTRL_0_CAN_ENUM;
/* -------------------------------- WK_CTRL_0 ----------------------------------- */
@ -2588,13 +2588,13 @@ typedef enum
{
WK_CTRL_0_TIMER_WK_EN_WAKEUP_DISABLED = 0x00U,
WK_CTRL_0_TIMER_WK_EN_WAKESOURCE
};
}WK_CTRL_0_TIMER_WK_EN_ENUM;
typedef enum
{
SBC_WD_STM_EN_1_WATCHDOG_STOPMPDE = 0x00U,
SBC_WD_STM_EN_1_NOWATCHDOG_STOPMODE
};
}SBC_WD_STM_EN_1_ENUM;
/* -------------------------------- WK_CTRL_1 ----------------------------------- */
@ -2603,19 +2603,19 @@ typedef enum
{
SBC_INT_GLOBAL_WAKESOURCES_ONLY = 0x00U,
SBC_INT_GLOBAL_ALLINFORMATIONBITS
};
}SBC_INT_GLOBAL_ENUM;
typedef enum
{
SBC_WK_MEAS_WK_AS_WAKEUP = 0x00U,
SBC_WK_MEAS_WK_AS_VOLTAGESENSING
};
}SBC_WK_MEAS_ENUM;
typedef enum
{
SBC_WK_EN_WAKEUP_DISABLED = 0x00U,
SBC_WK_EN_WAKEUP_ENABLED
};
}SBC_WK_EN_ENUM;
/* -------------------------------- WK_PUPD_CTRL -------------------------------- */
@ -2626,7 +2626,7 @@ typedef enum
SBC_GPIO_WK_PUPD_PULLDOWN,
SBC_GPIO_WK_PUPD_PULLUP,
SBC_GPIO_WK_PUPD_AUTOMATIC_PULLING
};
}SBC_GPIO_WK_PUPD_ENUM;
typedef enum
{
@ -2634,7 +2634,7 @@ typedef enum
SBC_WK_PUPD_PULLDOWN,
SBC_WK_PUPD_PULLUP,
SBC_WK_PUPD_AUTOMATIC_PULLING
};
}SBC_WK_PUPD_ENUM;
/* -------------------------------- BUS_CTRL_3 ---------------------------------- */
@ -2643,7 +2643,7 @@ typedef enum
{
SBC_CAN_FLASH_DISABLED = 0x00U,
SBC_CAN_FLASH_ENABLED
};
}SBC_CAN_FLASH_ENUM;
/* -------------------------------- TIMER_CTRL ---------------------------------- */
@ -2657,7 +2657,7 @@ typedef enum
SBC_TIMER_ON_10MS,
SBC_TIMER_ON_20MS,
SBC_TIMER_ON_TIMEROFF_HSX_HIGH
};
}SBC_TIMER_ON_ENUM;
typedef enum
{
@ -2677,7 +2677,7 @@ typedef enum
SBC_TIMER_PER_200S,
SBC_TIMER_PER_500S,
SBC_TIMER_PER_1000S
};
}SBC_TIMER_PER_ENUM;
/* -------------------------------- HW_CTRL_1 ----------------------------------- */
@ -2686,25 +2686,25 @@ typedef enum
{
SBC_RSTN_HYS_DEFAULT = 0x00U,
SBC_RSTN_HYS_HIGHEST_VRT
};
}SBC_RSTN_HYS_ENUM;
typedef enum
{
SBC_TSD2_DEL_NO_WAIT_RELEASE_EXTENSION = 0x00U,
SBC_TSD2_DEL_64S_AFTER_16_TSD2_EVENTS
};
}SBC_TSD2_DEL_ENUM;
typedef enum
{
SBC_RSTN_DEL_TRD1 = 0x00U,
SBC_RSTN_DEL_TRD2
};
}SBC_RSTN_DEL_ENUM;
typedef enum
{
SBC_CFG_LOCK_0_NOTLOCKED = 0x00U,
SBC_CFG_LOCK_0_LOCKED
};
}SBC_CFG_LOCK_0_ENUM;
/* -------------------------------- HW_CTRL_2 ----------------------------------- */
@ -2715,13 +2715,13 @@ typedef enum
SBC_2MHZ_FREQ_2_0_MHZ,
SBC_2MHZ_FREQ_2_2_MHZ,
SBC_2MHZ_FREQ_2_4_MHZ
};
}SBC_2MHZ_FREQ_ENUM;
typedef enum
{
SBC_I_PEAK_TH_LOW = 0x00U,
SBC_I_PEAK_TH_HIGH
};
}SBC_I_PEAK_TH_ENUM;
typedef enum
{
@ -2729,13 +2729,13 @@ typedef enum
SBC_SS_MOD_FR_15_6KHZ,
SBC_SS_MOD_FR_31_2KHZ,
SBC_SS_MOD_FR_62_5KHZ
};
}SBC_SS_MOD_FR_ENUM;
typedef enum
{
SBC_CFG_LOCK_1_NOTLOCKED = 0x00U,
SBC_CFG_LOCK_1_LOCKED
};
}SBC_CFG_LOCK_ENUM;
/* -------------------------------- GPIO_CTRL ----------------------------------- */
@ -2748,7 +2748,7 @@ typedef enum
SBC_GPIO_WAKE_INPUT,
SBC_GPIO_LSS_PWM,
SBC_GPIO_HSS_PWM
};
}SBC_GPIO_ENUM;
/* -------------------------------- PWM_CTRL ------------------------------------ */
@ -2766,7 +2766,7 @@ typedef enum
SBC_PWM_DC_80 = 0xCCU,
SBC_PWM_DC_90 = 0xE6U,
SBC_PWM_DC_100 = 0xFFU
};
}SBC_PWM_DC_ENUM;
/* -------------------------------- PWM_FREQ_CTRL ------------------------------- */
@ -2777,7 +2777,7 @@ typedef enum
SBC_PWM_FREQ_200HZ,
SBC_PWM_FREQ_325HZ,
SBC_PWM_FREQ_400HZ
};
}SBC_PWM_FREQ_ENUM;
/* -------------------------------- HW_CTRL_3 ----------------------------------- */
@ -2786,7 +2786,7 @@ typedef enum
{
SBC_TSD_THR_DEFAULT = 0x00U,
SBC_TSD_THR_HIGHER
};
}SBC_TSD_THR_ENUM;
typedef enum
{
@ -2794,7 +2794,7 @@ typedef enum
SBC_ICC1_LIM_ADJ_1000MA,
SBC_ICC1_LIM_ADJ_1200MA,
SBC_ICC1_LIM_ADJ_1500MA
};
}SBC_ICC1_LIM_ADJ_ENUM;
@ -2813,25 +2813,25 @@ typedef enum
{
SBC_OSC_CAL_DISABLED = 0x00U,
SBC_OSC_CAL_ENABLED
};
}SBC_OSC_CAL_ENUM;
typedef enum
{
SBC_TRIM_EN_LOCKED = 0x00U,
SBC_TRIM_EN_UNLOCKED = 0x03U
};
}SBC_TRIM_EN_ENUM;
typedef enum
{
SBC_CANTO_MASK_NOINT = 0x00U,
SBC_CANTO_MASK_INT_ON_TO
};
}SBC_CANTO_MASK_ENUM;
typedef enum
{
SBC_CFG_VAL_NOTVALID = 0x00U,
SBC_CFG_VAL_VALID
};
}SBC_CFG_VAL_ENUM;
/* -------------------------------- SWK_ID0_CTRL --------------------------------- */
@ -2840,13 +2840,13 @@ typedef enum
{
SBC_RTR_NORMAL_DATA_FRAME = 0x00U,
SBC_RTR_REMOTE_TRANSMIT_REQUEST
};
}SBC_RTR_ENUM;
typedef enum
{
SBC_IDE_STANDARD = 0x00U,
SBC_IDE_EXTENDED
};
}SBC_IDE_ENUM;
/* -------------------------------- SWK_DLC_CTRL --------------------------------- */
@ -2862,7 +2862,7 @@ typedef enum
SBC_DLC_6BYTES,
SBC_DLC_7BYTES,
SBC_DLC_8BYTES
};
}SBC_DLC_ENUM;
/* -------------------------------- SWK_CAN_FD_CTRL ------------------------------ */
@ -2871,13 +2871,13 @@ typedef enum
{
SBC_DIS_ERR_CNT_ENABLED = 0x00U,
SBC_DIS_ERR_CNT_DISABLED
};
}SBC_DIS_ERR_CNT_ENUM;
typedef enum
{
SBC_RX_FILT_BYP_NOTBYPASSED = 0x00U,
SBC_RX_FILT_BYP_BYPASSED
};
}SBC_RX_FILT_BYP_ENUM;
typedef enum
{
@ -2889,13 +2889,13 @@ typedef enum
SBC_FD_FILTER_300NS,
SBC_FD_FILTER_350NS,
SBC_FD_FILTER_700NS
};
}SBC_FD_FILTER_ENUM;
typedef enum
{
SBC_CAN_FD_EN_DISABLED = 0x00U,
SBC_CAN_FD_EN_ENABLED
};
}SBC_CAN_FD_EN_ENUM;
/* -------------------------------- SWK_OPT_CTRL --------------------------------- */
@ -2904,7 +2904,7 @@ typedef enum
{
SBC_RX_WK_SEL_LOWPOWER = 0x00U,
SBC_RX_WK_SEL_STANDARD
};
}SBC_RX_WK_SEL_ENUM;
/* -------------------------------- SWK_CDR_CTRL1 -------------------------------- */
@ -2915,13 +2915,13 @@ typedef enum
SBC_SEL_FILT_TC16,
SBC_SEL_FILT_TC32,
SBC_SEL_FILT_ADAPT
};
}SBC_SEL_FILT_ENUM;
typedef enum
{
SBC_CDR_EN_DISABLED = 0x00U,
SBC_CDR_EN_ENABLED
};
}SBC_CDR_EN_ENUM;
/* -------------------------------- SWK_CDR_CTRL2 -------------------------------- */
@ -2932,7 +2932,7 @@ typedef enum
SBC_SEL_OSC_CLK_40MHZ,
SBC_SEL_OSC_CLK_20MHZ,
SBC_SEL_OSC_CLK_10MHZ
};
}SBC_SEL_OSC_CLK_ENUM;
@ -2951,25 +2951,25 @@ typedef enum
{
SBC_VS_UV_NOEVENT = 0x00U,
SBC_VS_UV_EVENT
};
}SBC_VS_UV_ENUM;
typedef enum
{
SBC_VS_OV_NOEVENT = 0x00U,
SBC_VS_OV_EVENT
};
}SBC_VS_OV_ENUM;
typedef enum
{
SBC_VCC1_OV_NOEVENT = 0x00U,
SBC_VCC1_OV_EVENT
};
}SBC_VCC1_OV_ENUM;
typedef enum
{
SBC_VCC1_UV_PREWARN_NOEVENT = 0x00U,
SBC_VCC1_UV_PREWARN_EVENT
};
}SBC_VCC1_UV_PREWARN_ENUM;
/* -------------------------------- SUP_STAT_0 ----------------------------------- */
@ -2978,31 +2978,31 @@ typedef enum
{
SBC_POR_NOEVENT = 0x00U,
SBC_POR_EVENT
};
}SBC_POR_ENUM;
typedef enum
{
SBC_VCC2_OT_NOEVENT = 0x00U,
SBC_VCC2_OT_EVENT
};
}SBC_VCC2_OT_ENUM;
typedef enum
{
SBC_VCC2_UV_NOEVENT = 0x00U,
SBC_VCC2_UV_EVENT
};
}SBC_VCC2_UV_ENUM;
typedef enum
{
SBC_VCC1_SC_NOEVENT = 0x00U,
SBC_VCC1_SC_TO_GND_EVENT
};
}SBC_VCC1_SC_ENUM;
typedef enum
{
SBC_VCC1_UV_NOEVENT = 0x00U,
SBC_VCC1_UV_EVENT
};
}SBC_VCC1_UV_ENUM;
/* -------------------------------- THERM_STAT ----------------------------------- */
@ -3011,25 +3011,25 @@ typedef enum
{
SBC_TSD2_SAFE_NOSAFESTATE = 0x00U,
SBC_TSD2_SAFE_SAFESTATE_DETECTED
};
}SBC_TSD2_SAFE_ENUM;
typedef enum
{
SBC_TSD2_NOEVENT = 0x00U,
SBC_TSD2_EVENT
};
}SBC_TSD2_ENUM;
typedef enum
{
SBC_TSD1_NOEVENT = 0x00U,
SBC_TSD1_EVENT
};
}SBC_TSD1_ENUM;
typedef enum
{
SBC_TPW_NOEVENT = 0x00U,
SBC_TPW_EVENT
};
}SBC_TPW_ENUM;
/* -------------------------------- DEV_STAT ------------------------------------- */
@ -3039,26 +3039,26 @@ typedef enum
SBC_DEV_STAT_CLEARED = 0x00U,
SBC_DEV_STAT_RESTART_AFTER_FAIL,
SBC_DEV_STAT_SLEEP_MODE
};
}SBC_DEV_STAT_ENUM;
typedef enum
{
SBC_WD_FAIL_NOFAIL = 0x00U,
SBC_WD_FAIL_1FAIL,
SBC_WD_FAIL_2FAIL
};
}SBC_WD_FAIL_ENUM;
typedef enum
{
SBC_SPI_FAIL_NOEVENT = 0x00U,
SBC_SPI_FAIL_EVENT
};
}SBC_SPI_FAIL_ENUM;
typedef enum
{
SBC_FAILURE_NOEVENT = 0x00U,
SBC_FAILURE_EVENT
};
}SBC_FAILURE_ENUM;
/* -------------------------------- BUS_STAT ------------------------------------- */
@ -3067,13 +3067,13 @@ typedef enum
{
SBC_CANTO_NORMAL = 0x00U,
SBC_CANTO_TIMEOUT
};
}SBC_CANTO_ENUM;
typedef enum
{
SBC_SYSERR_NOEVENT = 0x00U,
SBC_SYSERR_DETECTED
};
}SBC_SYSERR_ENUM;
typedef enum
{
@ -3081,13 +3081,13 @@ typedef enum
SBC_CAN_FAIL_TSD,
SBC_CAN_FAIL_TXD_DOM_TO,
SBC_CAN_FAIL_BUS_DOM_TO
};
}SBC_CAN_FAIL_ENUM;
typedef enum
{
SBC_VCAN_UV_NOEVENT = 0x00U,
SBC_VCAN_UV_EVENT
};
}SBC_VCAN_UV_ENUM;
/* -------------------------------- WK_STAT_0 ------------------------------------ */
@ -3096,19 +3096,19 @@ typedef enum
{
SBC_CAN_WU_NOEVENT = 0x00U,
SBC_CAN_WU_EVENT
};
}SBC_CAN_WU_ENUM;
typedef enum
{
SBC_TIMER_WU_NOEVENT = 0x00U,
SBC_TIMER_WU_EVENT
};
}SBC_TIMER_WU_ENUM;
typedef enum
{
SBC_WK_WU_NOEVENT = 0x00U,
SBC_WK_WU_EVENT
};
}SBC_WK_WU_ENUM;
/* -------------------------------- WK_STAT_1 ------------------------------------ */
@ -3117,7 +3117,7 @@ typedef enum
{
SBC_GPIO_WK_WU_NOEVENT = 0x00U,
SBC_GPIO_WK_WU_EVENT
};
}SBC_GPIO_WK_WU_ENUM;
/* -------------------------------- WK_LVL_STAT ---------------------------------- */
@ -3126,25 +3126,25 @@ typedef enum
{
SBC_DEV_LVL_NORMAL = 0x00U,
SBC_DEV_LVL_DEVELOPMENT_MODE
};
}SBC_DEV_LVL_ENUM;
typedef enum
{
SBC_CFG0_STATE_CONFIG_2_4 = 0x00U,
SBC_CFG0_STATE_CONFIG_1_3
};
}SBC_CFG0_STATE_CONFIG_ENUM;
typedef enum
{
SBC_GPIO_LVL_LOW = 0x00U,
SBC_GPIO_LVL_HIGH
};
}SBC_GPIO_LVL_ENUM;
typedef enum
{
SBC_WK_LVL_LOW = 0x00U,
SBC_WK_LVL_HIGH
};
}SBC_WK_LVL_ENUM;
/* -------------------------------- GPIO_OC_STAT --------------------------------- */
@ -3153,7 +3153,7 @@ typedef enum
{
SBC_GPIO_OC_NOEVENT = 0x00U,
SBC_GPIO_OC_EVENT
};
}SBC_GPIO_OC_ENUM;
/* -------------------------------- GPIO_OL_STAT --------------------------------- */
@ -3162,7 +3162,7 @@ typedef enum
{
SBC_GPIO_OL_NOEVENT = 0x00U,
SBC_GPIO_OL_EVENT
};
}SBC_GPIO_OL_ENUM;
@ -3181,31 +3181,31 @@ typedef enum
{
SBC_SYNC_NOT_SYNCHRONOUS = 0x00U,
SBC_SYNC_VALID_FRAME_RECEIVED
};
}SBC_SYNC_ENUM;
typedef enum
{
SBC_CANSIL_NOT_EXCEEDED = 0x00U,
SBC_CANSIL_EXCEEDED
};
}SBC_CANSIL_ENUM;
typedef enum
{
SBC_SWK_SET_SWK_NOT_ACTIVE = 0x00U,
SBC_SWK_SET_SWK_ACTIVE
};
}SBC_SWK_SET_SWK_ENUM;
typedef enum
{
SBC_WUP_NO_WUP = 0x00U,
SBC_WUP_DETECTED
};
}SBC_WUP;
typedef enum
{
SBC_WUF_NO_WUF = 0x00U,
SBC_WUF_DETECTED
};
}SBC_WUF_ENUM;
/* -------------------------------- SWK_ECNT_STAT ------------------------------ */
@ -3215,7 +3215,7 @@ typedef enum
SBC_ECNT_NOEVENT = 0x00U,
SBC_ECNT_31_FRAME_ERRORS = 0x1FU,
SBC_ECNT_ERROR_OVERFLOW = 0x20U
};
}SBC_ECNT_ENUM;
/* ================================================================================ */
@ -3234,7 +3234,7 @@ typedef enum
SBC_FAM_MULTICAN,
SBC_FAM_LITE,
SBC_FAM_MIDRANGEPLUS = 0x07U
};
}SBC_FAM_ENUM;
typedef enum
{
@ -3242,7 +3242,7 @@ typedef enum
SBC_PROD_TLE9461V33,
SBC_PROD_TLE9471 = 0x0EU,
SBC_PROD_TLE9471V33
};
}SBC_PROD_ENUM;
#endif /* TLE94x1_DEFINES_H */

147
cva_asw_m0146/src/appTask.c Normal file
View File

@ -0,0 +1,147 @@
#include "appTask.h"
#include "uds.h"
#include "uds_user.h"
#include "stdint.h"
#include "drivers/flexcan/flexcan_drv.h"
#include "hwctrl.h"
#include "TLE94x1.h"
#include "string.h"
#include "SEGGER_RTT.h"
#include "MotorCtrl.h"
/*******************************************************************************
* the defines
******************************************************************************/
#define UDS_RECV_BUF (2056)
#define UDS_SEND_BUF (512)
/* Indication value with boot loader request from asw */
#define ASW_BOOT_REQ_ACTIVE (0x55AAAA55ul)
uint8_t txMsgBuf[8] = {0};
uint8_t udsSendBuf[UDS_SEND_BUF] = {0};
uint8_t udsRecvBuf[UDS_RECV_BUF] = {0};
UdsType udsObj;
int64_t Get_Cur_Time_Stamp(void);
Uds_ParamsType udsParam = {
.isotpParams.framePadding = true,
.isotpParams.blockSize = 0,
.isotpParams.recvPhysId = UDS_PHYS_RECV_MSG_ID,
.isotpParams.recvFuncId = UDS_FUNC_RECV_MSG_ID,
.isotpParams.sendid = UDS_PHYS_RESP_MSG_ID,
.isotpParams.sendBuf = udsSendBuf,
.isotpParams.sendBufSize = UDS_SEND_BUF,
.isotpParams.recvBuf = udsRecvBuf,
.isotpParams.recvBufSize = UDS_RECV_BUF,
.isotpParams.debug = NULL,
.isotpParams.sendCanMsg = FlexCanBoot_TxMessage,
.isotpParams.getTimeMs = Get_Cur_Time_Stamp,
.p2Server_ms = 50,
.p2xServer_10ms = 500,
.s3Server_ms = 5000,
};
int64_t timer_1ms = 0;
volatile uint32_t gSystick1msEvent = 0, gSystick1msCnt = 0, gTestRunCnt = 0, gTestIoEn = 0, gSysTick1sCnt = 0;
#pragma location = ".bss.no_init"
static uint32_t sAswBoot_Req;
//
int64_t Get_Cur_Time_Stamp(void)
{
return timer_1ms;
}
void Asw_SetBootloaderRequest(void)
{
sAswBoot_Req = ASW_BOOT_REQ_ACTIVE;
}
void SysTick_Handler(void)
{
gSystick1msEvent++;
timer_1ms++;
Uds_Tick(&udsObj);
}
void appTask(McuType *obj)
{
FlexCan_FrameStructureType rxMsg;
if(gSystick1msEvent > 0u)
{
if(udsObj.session == UDS_SESSION_PROGRAMMING)
{
Asw_SetBootloaderRequest();
ResetDrv_SoftwareResetModule(&obj->resetDrv, RESETDRV_SWRESET_SYS);
}
gSystick1msEvent--;
gSystick1msCnt++;
gSysTick1sCnt++;
if (gSystick1msCnt % 10 == 0)
{
MotorCtrl_Maintask(obj);
}
if (gSystick1msCnt % 50 == 0)
{
SBC_WD_Trigger();
}
if(gSystick1msCnt % 200 == 0)
{
uint8_t txMsgBuf[8]={0};
txMsgBuf[3] = gSysTick1sCnt & 0xFF;
FlexCanBoot_TxMessage(APP_TX_TEST1_MSG_ID, txMsgBuf, 8);
}
if (gSystick1msCnt >= 10000)
{
gSystick1msCnt = 0;
SEGGER_RTT_printf(0,"app running\n");
}
/* Handler user routine */
if(FlexCanBoot_ReadoutMsg(&rxMsg) == true)
{
if((rxMsg.id == UDS_PHYS_RECV_MSG_ID) || (rxMsg.id == UDS_FUNC_RECV_MSG_ID))
{
IsoTp_HandleIncomingCanMsg(&udsObj.isotp, rxMsg.id, rxMsg.data, rxMsg.len);
}
else
{
}
}
Uds_Run(&udsObj);
}
}
void appTaskInit(McuType *obj)
{
/* UDS init */
Uds_UserInit(&udsObj, &udsParam);
MotorCtrl_Init(obj);
}

View File

@ -0,0 +1,10 @@
#ifndef __APPTASK_H__
#define __APPTASK_H__
#include "Mcu.h"
void appTask(McuType *obj);
void appTaskInit(McuType *obj);
#endif

609
cva_asw_m0146/src/hwctrl.c Normal file
View File

@ -0,0 +1,609 @@
#include "hwctrl.h"
#include "clock_drv.h"
#include "SEGGER_RTT.h"
#include "appTask.h"
#include "TLE94x1.h"
#include "string.h"
#include "irq_drv.h"
/*******************************************************************************
* the defines
******************************************************************************/
/*******************************************************************************
* the typedefs
******************************************************************************/
typedef enum
{
UDS_MSG_IDX_STD_RX_PHYS,
UDS_MSG_IDX_STD_RX_FUNC,
UDS_MSG_IDX_STD_RX_TEST1,
UDS_MSG_IDX_STD_RX_TEST2,
UDS_MSG_IDX_STD_TX_TEST1,
UDS_MSG_IDX_STD_TX,
UDS_MSG_IDX_STD_TEST1,
UDS_MSG_IDX_STD_TEST2,
UDS_MSG_IDX_NUM
} Uds_MsgIdIdxType;
typedef struct
{
FlexCan_FrameStructureType rxMsg[CAN_BUFFER_FIFO_SIZE];
FlexCan_FrameStructureType txMsg[CAN_BUFFER_FIFO_SIZE];
uint8_t wrIdx;
uint8_t rdIdx;
} FlexCan_DataInfoType;
/*******************************************************************************
* the globals
******************************************************************************/
FlexCanDrv_ControllerCfgType flexCanCfg;
FlexCan_DataInfoType flexCan_DataInfo;
FlexCanDrvType* flexCanDrv_DemoObj;
/*******************************************************************************
* the const
******************************************************************************/
const FlexCanDrv_MsgCfgType msgCfgObj[UDS_MSG_IDX_NUM] = {
{UDS_MSG_IDX_STD_RX_PHYS, 1, UDS_PHYS_RECV_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_PHYS */
{UDS_MSG_IDX_STD_RX_FUNC, 1, UDS_FUNC_RECV_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_RX_TEST1, 1, APP_RX_TEST1_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_RX_TEST2, 1, APP_RX_TEST2_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_TX, 1, UDS_PHYS_RESP_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
{UDS_MSG_IDX_STD_TEST1, 1, APP_TX_TEST1_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
{UDS_MSG_IDX_STD_TEST2, 1, APP_TX_TEST2_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
};
/*******************************************************************************
* the function prototypes
******************************************************************************/
static void FlexCanBoot_Init(McuType *obj);
static void hw_IO_Init(McuType *obj);
static void hw_clock_init(McuType *obj)
{
/* Setup the clock */
ClockDrv_ModuleClkConfigType clockConfig;
uint32_t tTcr = 0;
WdgDrv_Disable(&(obj->wdgDrv));
SEGGER_RTT_printf(0,"-----clock_INIT-----\n");
/* Enable the clock for all ports */
clockConfig.gating = true;
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PORTA, &clockConfig);
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PORTB, &clockConfig);
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PORTC, &clockConfig);
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PORTD, &clockConfig);
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PORTE, &clockConfig);
/* Setup the Pll div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_PLL_DIV2, &clockConfig);
/* Setup the FIRC2 div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_FIRC;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_FIRC_DIV2, &clockConfig);
/* Setup the SPI clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL_DIV2;
ClockDrv_ConfigureClock(&obj->clockDrv, CLOCKDRV_SPI2, &clockConfig);
tTcr = SpiReg_GetTcr((const SpiRegType *)&obj->spiDrv2.reg);
SpiDrv_SetPrescaler(&tTcr,0x03);
}
void hw_init(McuType *obj)
{
uint32_t gCpuClockFrequency = 0;
hw_clock_init(obj);
SEGGER_RTT_printf(0,"-----SPI_INIT-----\n");
SBC_SPI_INIT();
/* CAN init */
memset(&flexCan_DataInfo, 0, sizeof(flexCan_DataInfo));
memset(&flexCanCfg, 0, sizeof(flexCanCfg));
SEGGER_RTT_printf(0,"-----FlexCanDrv_INIT-----\n");
/* get CAN controller default configuration */
FlexCanDrv_GetDefaultCfg(&flexCanCfg);
flexCanCfg.msgNum = sizeof(msgCfgObj) / sizeof(FlexCanDrv_MsgCfgType);
flexCanCfg.msgCfg = msgCfgObj;
FlexCanBoot_Init(obj);
hw_IO_Init(obj);
/* Set system tick clock, 1ms event */
ClockDrv_GetFreq(&obj->clockDrv, CLOCKDRV_CORE, &gCpuClockFrequency);
SysTick_Config(gCpuClockFrequency / 1000u);
IrqDrv_EnableIrq(SysTick_IRQn);
SBC_Init();
}
#define PINSDRV_DIR_OUTPUT 1
#define PINSDRV_DIR_INPUT 0
static void hw_IO_Init(McuType *obj)
{
//1
PinsDrv_SetMuxModeSel(&obj->ptd, 1, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 1, 1);
PortReg_SetPcrSr(obj->ptd.port, 1, 1);
PinsDrv_SetPinDirection(&obj->ptd, 1, PINSDRV_DIR_OUTPUT);
//2
PinsDrv_SetMuxModeSel(&obj->ptd, 0, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 0, 1);
PortReg_SetPcrSr(obj->ptd.port, 0, 1);
PinsDrv_SetPinDirection(&obj->ptd, 0, PINSDRV_DIR_OUTPUT);
//3
PinsDrv_SetMuxModeSel(&obj->pte, 11, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 11, 1);
PortReg_SetPcrSr(obj->pte.port, 11, 1);
PinsDrv_SetPinDirection(&obj->pte, 11, PINSDRV_DIR_OUTPUT);
//4
PinsDrv_SetMuxModeSel(&obj->pte, 10, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 10, 1);
PortReg_SetPcrSr(obj->pte.port, 10, 1);
PinsDrv_SetPinDirection(&obj->pte, 10, PINSDRV_DIR_OUTPUT);
//5
PinsDrv_SetMuxModeSel(&obj->pte, 5, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 5, 1);
PortReg_SetPcrSr(obj->pte.port, 5, 1);
PinsDrv_SetPinDirection(&obj->pte, 5, PINSDRV_DIR_OUTPUT);
//6
PinsDrv_SetMuxModeSel(&obj->pte, 4, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 4, 1);
PortReg_SetPcrSr(obj->pte.port, 4, 1);
PinsDrv_SetPinDirection(&obj->pte, 4, PINSDRV_DIR_OUTPUT);
//7-12电源
//13
PinsDrv_SetMuxModeSel(&obj->pte, 3, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 3, 1);
PortReg_SetPcrSr(obj->pte.port, 3, 1);
PinsDrv_SetPinDirection(&obj->pte, 3, PINSDRV_DIR_OUTPUT);
//14
PinsDrv_SetMuxModeSel(&obj->ptd, 16, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 16, 1);
PortReg_SetPcrSr(obj->ptd.port, 16, 1);
PinsDrv_SetPinDirection(&obj->ptd, 16, PINSDRV_DIR_OUTPUT);
//15
PinsDrv_SetMuxModeSel(&obj->ptd, 15, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 15, 1);
PortReg_SetPcrSr(obj->ptd.port, 15, 1);
PinsDrv_SetPinDirection(&obj->ptd, 15, PINSDRV_DIR_OUTPUT);
//16
PinsDrv_SetMuxModeSel(&obj->pte, 9, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 9, 1);
PortReg_SetPcrSr(obj->pte.port, 9, 1);
PinsDrv_SetPinDirection(&obj->pte, 9, PINSDRV_DIR_OUTPUT);
//17
PinsDrv_SetMuxModeSel(&obj->pte, 8, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 8, 1);
PortReg_SetPcrSr(obj->pte.port, 8, 1);
PinsDrv_SetPinDirection(&obj->pte, 8, PINSDRV_DIR_OUTPUT);
//18
PinsDrv_SetMuxModeSel(&obj->ptb, 5, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptb.port, 5, 1);
PortReg_SetPcrSr(obj->ptb.port, 5, 1);
PinsDrv_SetPinDirection(&obj->ptb, 5, PINSDRV_DIR_OUTPUT);
//19
PinsDrv_SetMuxModeSel(&obj->ptb, 4, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptb.port, 4, 1);
PortReg_SetPcrSr(obj->ptb.port, 4, 1);
PinsDrv_SetPinDirection(&obj->ptb, 4, PINSDRV_DIR_OUTPUT);
//20-22预留
//23
PinsDrv_SetMuxModeSel(&obj->ptd, 6, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 6, 1);
PortReg_SetPcrSr(obj->ptd.port, 6, 1);
PinsDrv_SetPinDirection(&obj->ptd, 6, PINSDRV_DIR_OUTPUT);
//24
PinsDrv_SetMuxModeSel(&obj->ptd, 5, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 5, 1);
PortReg_SetPcrSr(obj->ptd.port, 5, 1);
PinsDrv_SetPinDirection(&obj->ptd, 5, PINSDRV_DIR_OUTPUT);
//25-26 SPI
//27
PinsDrv_SetMuxModeSel(&obj->ptc, 17, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->ptc.port, 17, 1);
PortReg_SetPcrSr(obj->ptc.port, 17, 1);
//28
PinsDrv_SetMuxModeSel(&obj->ptc, 16, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptc.port, 16, 1);
PortReg_SetPcrSr(obj->ptc.port, 16, 1);
PinsDrv_SetPinDirection(&obj->ptc, 16,PINSDRV_DIR_OUTPUT);
//29 30 SPI
//31
PinsDrv_SetMuxModeSel(&obj->ptb, 3, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->ptb.port, 3, 1);
PortReg_SetPcrSr(obj->ptb.port, 3, 1);
//32
PinsDrv_SetMuxModeSel(&obj->ptb, 2, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptb.port, 2, 1);
PortReg_SetPcrSr(obj->ptb.port, 2, 1);
//33 34 CAN
//35
PinsDrv_SetMuxModeSel(&obj->ptc, 9, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptc.port, 9, 1);
PortReg_SetPcrSr(obj->ptc.port, 9, 1);
PinsDrv_SetPinDirection(&obj->ptc, 9,PINSDRV_DIR_OUTPUT);
//36
PinsDrv_SetMuxModeSel(&obj->ptc, 8, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptc.port, 8, 1);
PortReg_SetPcrSr(obj->ptc.port, 8, 1);
//37
PinsDrv_SetMuxModeSel(&obj->pta, 7, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->pta.port, 7, 1);
PortReg_SetPcrSr(obj->pta.port, 7, 1);
//38
PinsDrv_SetMuxModeSel(&obj->pta, 6, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 6, 1);
PortReg_SetPcrSr(obj->pta.port, 6, 1);
//39
PinsDrv_SetMuxModeSel(&obj->pte, 7, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 7, 1);
PortReg_SetPcrSr(obj->pte.port, 7, 1);
//40 41 VDD
//42 NC
//43
PinsDrv_SetMuxModeSel(&obj->ptb, 12, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->ptb.port, 12, 1);
PortReg_SetPcrSr(obj->ptb.port, 12, 1);
//44
PinsDrv_SetMuxModeSel(&obj->ptd, 4, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 4, 1);
PortReg_SetPcrSr(obj->ptd.port, 4, 1);
//45
PinsDrv_SetMuxModeSel(&obj->ptd, 3, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptd.port, 3, 1);
PortReg_SetPcrSr(obj->ptd.port, 3, 1);
//46
PinsDrv_SetMuxModeSel(&obj->ptd, 2, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->ptd.port, 2, 1);
PortReg_SetPcrSr(obj->ptd.port, 2, 1);
//47
PinsDrv_SetMuxModeSel(&obj->pta, 3, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 3, 1);
PortReg_SetPcrSr(obj->pta.port, 3, 1);
PinsDrv_SetPinDirection(&obj->pta, 3, PINSDRV_DIR_OUTPUT);
//48
PinsDrv_SetMuxModeSel(&obj->pta, 2, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 2, 1);
PortReg_SetPcrSr(obj->pta.port, 2, 1);
PinsDrv_SetPinDirection(&obj->pta, 2, PINSDRV_DIR_OUTPUT);
//49
PinsDrv_SetMuxModeSel(&obj->pta, 1, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->pta.port, 1, 1);
PortReg_SetPcrSr(obj->pta.port, 1, 1);
//50
PinsDrv_SetMuxModeSel(&obj->pta, 0, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->pta.port, 0, 1);
PortReg_SetPcrSr(obj->pta.port, 0, 1);
//51
PinsDrv_SetMuxModeSel(&obj->ptc, 7, PINSDRV_PIN_DISABLED);
PortReg_SetPcrDrvStr(obj->ptc.port, 7, 1);
PortReg_SetPcrSr(obj->ptc.port, 7, 1);
//52
PinsDrv_SetMuxModeSel(&obj->ptc, 6, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->ptc.port, 6, 1);
PortReg_SetPcrSr(obj->ptc.port, 6, 1);
PinsDrv_SetPinDirection(&obj->ptc, 6, PINSDRV_DIR_OUTPUT);
//53
PinsDrv_SetMuxModeSel(&obj->pte, 6, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 6, 1);
PortReg_SetPcrSr(obj->pte.port, 6, 1);
PinsDrv_SetPinDirection(&obj->pte, 6, PINSDRV_DIR_OUTPUT);
//54
PinsDrv_SetMuxModeSel(&obj->pte, 2, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 2, 1);
PortReg_SetPcrSr(obj->pte.port, 2, 1);
PinsDrv_SetPinDirection(&obj->pte, 2, PINSDRV_DIR_OUTPUT);
//55
PinsDrv_SetMuxModeSel(&obj->pta, 13, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 13, 1);
PortReg_SetPcrSr(obj->pta.port, 13, 1);
PinsDrv_SetPinDirection(&obj->pta, 12, PINSDRV_DIR_OUTPUT);
//56
PinsDrv_SetMuxModeSel(&obj->pta, 12, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 12, 1);
PortReg_SetPcrSr(obj->pta.port, 12, 1);
PinsDrv_SetPinDirection(&obj->pta, 11, PINSDRV_DIR_OUTPUT);
//57
PinsDrv_SetMuxModeSel(&obj->pta, 11, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 11, 1);
PortReg_SetPcrSr(obj->pta.port, 11, 1);
//58
PinsDrv_SetMuxModeSel(&obj->pta, 10, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pta.port, 10, 1);
PortReg_SetPcrSr(obj->pta.port, 10, 1);
PinsDrv_SetPinDirection(&obj->pta, 10, PINSDRV_DIR_OUTPUT);
//59
PinsDrv_SetMuxModeSel(&obj->pte, 1, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 1, 1);
PortReg_SetPcrSr(obj->pte.port, 1, 1);
PinsDrv_SetPinDirection(&obj->pte, 1, PINSDRV_DIR_OUTPUT);
//60
PinsDrv_SetMuxModeSel(&obj->pte, 0, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 0, 1);
PortReg_SetPcrSr(obj->pte.port, 0, 1);
PinsDrv_SetPinDirection(&obj->pte, 0, PINSDRV_DIR_OUTPUT);
//61
PinsDrv_SetMuxModeSel(&obj->pte, 5, PINSDRV_MUX_AS_GPIO);
PortReg_SetPcrDrvStr(obj->pte.port, 5, 1);
PortReg_SetPcrSr(obj->pte.port, 5, 1);
//62-64 SWD
}
/*************************************motor driver *****************************************/
void hw_MotorCtrl(McuType *obj,Motor_ID_Type motorid,Motor_ACT_Type dir)
{
switch(motorid)
{
case Motor1:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->ptd, 0);
PinsDrv_ClearPin(&obj->ptd, 1);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->ptd, 0);
PinsDrv_ClearPin(&obj->ptd, 1);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->ptd, 1);
PinsDrv_ClearPin(&obj->ptd, 0);
break;
}
break;
case Motor2:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->pte, 10);
PinsDrv_ClearPin(&obj->pte, 11);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->pte, 10);
PinsDrv_ClearPin(&obj->pte, 11);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->pte, 11);
PinsDrv_ClearPin(&obj->pte, 10);
break;
}
break;
case Motor3:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->pte, 4);
PinsDrv_ClearPin(&obj->pte, 5);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->pte, 4);
PinsDrv_ClearPin(&obj->pte, 5);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->pte, 5);
PinsDrv_ClearPin(&obj->pte, 4);
break;
}
break;
case Motor4:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->pte, 3);
PinsDrv_ClearPin(&obj->ptd, 16);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->pte, 3);
PinsDrv_ClearPin(&obj->ptd, 16);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->ptd, 16);
PinsDrv_ClearPin(&obj->pte, 3);
break;
}
break;
case Motor5:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->pte, 9);
PinsDrv_ClearPin(&obj->ptd, 15);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->pte, 9);
PinsDrv_ClearPin(&obj->ptd, 15);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->ptd, 15);
PinsDrv_ClearPin(&obj->pte, 9);
break;
}
break;
case Motor6:
switch(dir)
{
case Motor_ACT_NOACT:
PinsDrv_ClearPin(&obj->ptd, 0);
PinsDrv_ClearPin(&obj->ptd, 1);
break;
case Motor_ACT_CW:
PinsDrv_SetPin(&obj->ptd, 0);
PinsDrv_ClearPin(&obj->ptd, 1);
break;
case Motor_ACT_CCW:
PinsDrv_SetPin(&obj->ptd, 1);
PinsDrv_ClearPin(&obj->ptd, 0);
break;
}
break;
}
}
/************************************* CAN *****************************************/
int8_t FlexCanBoot_TxMessage(uint32_t msgId, const uint8_t* pData, uint8_t size)
{
FlexCanDrv_MsgObjType txMsgObj;
uint8_t msgIdx = 0, i = 0;
for(i = 0; i < flexCanCfg.msgNum; i++)
{
if(msgId == flexCanCfg.msgCfg[i].msgId)
{
msgIdx = i;
break;
}
}
txMsgObj.msgBufId = flexCanCfg.msgCfg[msgIdx].msgBufId;
txMsgObj.dlc = size;
txMsgObj.msgId = flexCanCfg.msgCfg[msgIdx].msgId;
memcpy(&txMsgObj.data[0], pData, size);
FlexCanDrv_SetTxMsg(flexCanDrv_DemoObj, &txMsgObj);
/* transmit standard CAN Tx message */
FlexCanDrv_TransmitMsg(flexCanDrv_DemoObj, &txMsgObj);
return 0;
}
static void FlexCanBoot_Init(McuType *obj)
{
uint32_t busClockFreq = 0;
flexCanDrv_DemoObj = &obj->flexCanDrv0;
/* set PTE4 as MUX 5 - CAN0.RX */
PinsDrv_SetMuxModeSel(&obj->ptb, 0, PINSDRV_MUX_ALT5);
/* set PTE5 as MUX 5 - CAN0.TX */
PinsDrv_SetMuxModeSel(&obj->ptb, 1, PINSDRV_MUX_ALT5);
flexCanCfg.clkSrc = FLEXCANDRV_CLKSRC_CHICLK;
flexCanCfg.fdEnable = false;
flexCanCfg.fdISOEnable = false;
flexCanCfg.enhancefifoEnable = true;
flexCanCfg.msgBufDataLenSel = FLEXCANDRV_MB_SIZE_BYTE_8;
flexCanCfg.individualMaskEnable = true;
if(flexCanCfg.clkSrc == FLEXCANDRV_CLKSRC_CHICLK)
{
ClockDrv_GetFreq(&obj->clockDrv, CLOCKDRV_APB, &busClockFreq);
}
else
{
ClockDrv_GetFreq(&obj->clockDrv, CLOCKDRV_SOSC_DIV2, &busClockFreq);
}
if(flexCanCfg.fdEnable == true)
{
FlexCanDrv_BitTimingCalc(&flexCanCfg.fdBitTiming,
busClockFreq, /* module clock source: 16M */
2000000, /* baudrate: 2M */
7500, /* sample point: 75% */
2000, /* SJW: 20% */
1); /* FD bit timing */
}
FlexCanDrv_BitTimingCalc(&flexCanCfg.bitTiming,
busClockFreq, /* module clock source: 16M */
500000, /* baudrate: 500K */
7500, /* sample point: 75% */
2500, /* SJW: 20% */
0); /* classic CAN bit timing */
/* initialize CAN module */
FlexCanDrv_Configure(flexCanDrv_DemoObj, &flexCanCfg);
/* enable enhance rx fifo interrupt */
FlexCanDrv_SetEnhanceRxFFIsr(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_DAIE, true);
IrqDrv_EnableIrq(CAN0_ERxFIFO_IRQn);
}
bool FlexCanBoot_ReadoutMsg(FlexCan_FrameStructureType* pRxMsgObj)
{
bool ret = false;
if(flexCan_DataInfo.wrIdx != flexCan_DataInfo.rdIdx)
{
memcpy(pRxMsgObj, &flexCan_DataInfo.rxMsg[flexCan_DataInfo.rdIdx], sizeof(FlexCan_FrameStructureType));
flexCan_DataInfo.rdIdx++;
if(flexCan_DataInfo.rdIdx >= CAN_BUFFER_FIFO_SIZE)
{
flexCan_DataInfo.rdIdx = 0;
}
ret = true;
}
return ret;
}
uint8_t flexCanBoot_EnhanceRxFFCnt = 0;
void CAN0_ERxFIFO_Handler(void)
{
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_DAIE) == true)
{
if(FlexCanDrv_GetEnhanceRxFFIsFull(flexCanDrv_DemoObj) == false)
{
}
if(FlexCanDrv_GetEnhanceRxFFIsEmpty(flexCanDrv_DemoObj) == false)
{
FlexCanDrv_MsgObjType rxMsgObj;
flexCanBoot_EnhanceRxFFCnt = FlexCanDrv_GetEnhanceRxFFMsgNums(flexCanDrv_DemoObj);
if(flexCanBoot_EnhanceRxFFCnt > 0)
{
FlexCanDrv_GetEnhanceRxFifoMsg(flexCanDrv_DemoObj, &rxMsgObj);
memcpy(flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].data, rxMsgObj.data, rxMsgObj.dlc);
flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].id = rxMsgObj.msgId;
flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].len = rxMsgObj.dlc;
flexCan_DataInfo.wrIdx++;
if(flexCan_DataInfo.wrIdx >= CAN_BUFFER_FIFO_SIZE)
{
flexCan_DataInfo.wrIdx = 0;
}
}
}
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_WMMIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_WMMIE);
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_OVFIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_OVFIE);
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_UFWIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_UFWIE);
}
}

View File

@ -0,0 +1,64 @@
#ifndef __HWCTRL_H__
#define __HWCTRL_H__
#include "mcu.h"
/*******************************************************************************
* the defines
******************************************************************************/
#define UDS_PHYS_RECV_MSG_ID (0x732)
#define UDS_FUNC_RECV_MSG_ID (0x7DF)
#define UDS_PHYS_RESP_MSG_ID (0x7B2)
#define APP_TX_TEST1_MSG_ID (0x111)
#define APP_TX_TEST2_MSG_ID (0x222)
#define APP_RX_TEST1_MSG_ID (0x444)
#define APP_RX_TEST2_MSG_ID (0x555)
#define CAN_DATA_BUFFER_SIZE (64u)
#define CAN_BUFFER_FIFO_SIZE (32u)
/*******************************************************************************
* the typedefs
******************************************************************************/
typedef struct
{
uint32_t id;
uint8_t data[CAN_DATA_BUFFER_SIZE];
uint8_t len;
uint16_t timeStamp;
uint32_t hrTimeStamp;
} FlexCan_FrameStructureType;
typedef enum
{
Motor_ACT_NOACT,//停止
Motor_ACT_CW,//正转
Motor_ACT_CCW,//反转
} Motor_ACT_Type;
typedef enum
{
Motor1,//
Motor2,//
Motor3,//
Motor4,//
Motor5,//
Motor6,//
} Motor_ID_Type;
/*******************************************************************************
* the function prototypes
******************************************************************************/
void hw_init(McuType *obj);
int8_t FlexCanBoot_TxMessage(uint32_t msgId, const uint8_t* pData, uint8_t size);
bool FlexCanBoot_ReadoutMsg(FlexCan_FrameStructureType* pRxMsgObj);
void hw_MotorCtrl(McuType *obj,Motor_ID_Type motorid,Motor_ACT_Type dir);
#endif

View File

@ -22,36 +22,18 @@
******************************************************************************/
#include <stdint.h>
#include <string.h>
#include "mcu.h"
#include "uds_user.h"
#include "TLE94x1.h"
#include "SEGGER_RTT.h"
#include "appTask.h"
#include "hwctrl.h"
/*******************************************************************************
* the defines
******************************************************************************/
#define UDS_PHYS_RECV_MSG_ID (0x732)
#define UDS_FUNC_RECV_MSG_ID (0x7DF)
#define UDS_PHYS_RESP_MSG_ID (0x7B2)
#define APP_TX_TEST1_MSG_ID (0x111)
#define APP_TX_TEST2_MSG_ID (0x222)
#define APP_RX_TEST1_MSG_ID (0x444)
#define APP_RX_TEST2_MSG_ID (0x555)
#define UDS_RECV_BUF (2056)
#define UDS_SEND_BUF (512)
#define CAN_BUFF_MAX_NUM (32)
#define CAN_DATA_BUFFER_SIZE (64u)
#define CAN_BUFFER_FIFO_SIZE (32u)
int64_t Get_Cur_Time_Stamp(void);
static int8_t FlexCanBoot_TxMessage(uint32_t msgId, const uint8_t* pData, uint8_t size);
/* Indication value with boot loader request from asw */
#define ASW_BOOT_REQ_ACTIVE (0x55AAAA55ul)
/* Asw code head id to show asw is not empty */
#define ASW_HEAD_MASK (0xAABBCCDDul)
@ -60,36 +42,6 @@ static int8_t FlexCanBoot_TxMessage(uint32_t msgId, const uint8_t* pData, uint8_
/*******************************************************************************
* the typedefs
******************************************************************************/
typedef enum
{
UDS_MSG_IDX_STD_RX_PHYS,
UDS_MSG_IDX_STD_RX_FUNC,
UDS_MSG_IDX_STD_RX_TEST1,
UDS_MSG_IDX_STD_RX_TEST2,
UDS_MSG_IDX_STD_TX_TEST1,
UDS_MSG_IDX_STD_TX,
UDS_MSG_IDX_STD_TEST1,
UDS_MSG_IDX_STD_TEST2,
UDS_MSG_IDX_NUM
} Uds_MsgIdIdxType;
typedef struct
{
uint32_t id;
uint8_t data[CAN_DATA_BUFFER_SIZE];
uint8_t len;
uint16_t timeStamp;
uint32_t hrTimeStamp;
} FlexCan_FrameStructureType;
typedef struct
{
FlexCan_FrameStructureType rxMsg[CAN_BUFFER_FIFO_SIZE];
FlexCan_FrameStructureType txMsg[CAN_BUFFER_FIFO_SIZE];
uint8_t wrIdx;
uint8_t rdIdx;
} FlexCan_DataInfoType;
typedef struct
{
@ -102,49 +54,11 @@ typedef struct
* the globals
******************************************************************************/
McuType mcu;
volatile uint32_t gSystick1msEvent = 0, gSystick1msCnt = 0, gTestRunCnt = 0, gTestIoEn = 0, gSysTick1sCnt = 0;
uint32_t gCpuClockFrequency = 0;
int64_t timer_1ms = 0;
uint8_t udsSendBuf[UDS_SEND_BUF] = {0};
uint8_t udsRecvBuf[UDS_RECV_BUF] = {0};
UdsType udsObj;
FlexCan_DataInfoType flexCan_DataInfo;
FlexCanDrv_ControllerCfgType flexCanCfg;
FlexCanDrvType* flexCanDrv_DemoObj;
uint8_t flexCanBoot_EnhanceRxFFCnt = 0;
uint8_t txMsgBuf[8] = {0};
uint8_t aswVersion = 1;
Uds_ParamsType udsParam = {
.isotpParams.framePadding = true,
.isotpParams.blockSize = 0,
.isotpParams.recvPhysId = UDS_PHYS_RECV_MSG_ID,
.isotpParams.recvFuncId = UDS_FUNC_RECV_MSG_ID,
.isotpParams.sendid = UDS_PHYS_RESP_MSG_ID,
.isotpParams.sendBuf = udsSendBuf,
.isotpParams.sendBufSize = UDS_SEND_BUF,
.isotpParams.recvBuf = udsRecvBuf,
.isotpParams.recvBufSize = UDS_RECV_BUF,
.isotpParams.debug = NULL,
.isotpParams.sendCanMsg = FlexCanBoot_TxMessage,
.isotpParams.getTimeMs = Get_Cur_Time_Stamp,
.p2Server_ms = 50,
.p2xServer_10ms = 500,
.s3Server_ms = 5000,
};
const FlexCanDrv_MsgCfgType msgCfgObj[UDS_MSG_IDX_NUM] = {
{UDS_MSG_IDX_STD_RX_PHYS, 1, UDS_PHYS_RECV_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_PHYS */
{UDS_MSG_IDX_STD_RX_FUNC, 1, UDS_FUNC_RECV_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_RX_TEST1, 1, APP_RX_TEST1_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_RX_TEST2, 1, APP_RX_TEST2_MSG_ID, false, FLEXCANDRV_MSGTYPE_RX, DLC_BYTE_8, false, true, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_RX_FUNC */
{UDS_MSG_IDX_STD_TX, 1, UDS_PHYS_RESP_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
{UDS_MSG_IDX_STD_TEST1, 1, APP_TX_TEST1_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
{UDS_MSG_IDX_STD_TEST2, 1, APP_TX_TEST2_MSG_ID, false, FLEXCANDRV_MSGTYPE_TX, DLC_BYTE_8, false, false, 0xFFFFFFFF}, /* CAN_MSGOBJ_STD_TX */
};
#pragma location = ".bss.no_init"
static uint32_t sAswBoot_Req;
#pragma location = ".asw_header"
__root const app_CfgInfoType app_inif = {
@ -159,291 +73,33 @@ __root const app_CfgInfoType app_inif = {
* the functions
******************************************************************************/
void Asw_SetBootloaderRequest(void)
{
sAswBoot_Req = ASW_BOOT_REQ_ACTIVE;
}
int64_t Get_Cur_Time_Stamp(void)
{
return timer_1ms;
}
void SysTick_Handler(void)
{
gSystick1msEvent++;
timer_1ms++;
Uds_Tick(&udsObj);
}
void CAN0_ERxFIFO_Handler(void)
{
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_DAIE) == true)
{
if(FlexCanDrv_GetEnhanceRxFFIsFull(flexCanDrv_DemoObj) == false)
{
}
if(FlexCanDrv_GetEnhanceRxFFIsEmpty(flexCanDrv_DemoObj) == false)
{
FlexCanDrv_MsgObjType rxMsgObj;
flexCanBoot_EnhanceRxFFCnt = FlexCanDrv_GetEnhanceRxFFMsgNums(flexCanDrv_DemoObj);
if(flexCanBoot_EnhanceRxFFCnt > 0)
{
FlexCanDrv_GetEnhanceRxFifoMsg(flexCanDrv_DemoObj, &rxMsgObj);
memcpy(flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].data, rxMsgObj.data, rxMsgObj.dlc);
flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].id = rxMsgObj.msgId;
flexCan_DataInfo.rxMsg[flexCan_DataInfo.wrIdx].len = rxMsgObj.dlc;
flexCan_DataInfo.wrIdx++;
if(flexCan_DataInfo.wrIdx >= CAN_BUFFER_FIFO_SIZE)
{
flexCan_DataInfo.wrIdx = 0;
}
}
}
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_WMMIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_WMMIE);
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_OVFIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_OVFIE);
}
if(FlexCanDrv_GetEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_UFWIE) == true)
{
FlexCanDrv_ClearEnhanceRxFFIsrFlag(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_UFWIE);
}
}
bool FlexCanBoot_ReadoutMsg(FlexCan_FrameStructureType* pRxMsgObj)
{
bool ret = false;
if(flexCan_DataInfo.wrIdx != flexCan_DataInfo.rdIdx)
{
memcpy(pRxMsgObj, &flexCan_DataInfo.rxMsg[flexCan_DataInfo.rdIdx], sizeof(FlexCan_FrameStructureType));
flexCan_DataInfo.rdIdx++;
if(flexCan_DataInfo.rdIdx >= CAN_BUFFER_FIFO_SIZE)
{
flexCan_DataInfo.rdIdx = 0;
}
ret = true;
}
return ret;
}
static int8_t FlexCanBoot_TxMessage(uint32_t msgId, const uint8_t* pData, uint8_t size)
{
FlexCanDrv_MsgObjType txMsgObj;
uint8_t msgIdx = 0, i = 0;
for(i = 0; i < flexCanCfg.msgNum; i++)
{
if(msgId == flexCanCfg.msgCfg[i].msgId)
{
msgIdx = i;
break;
}
}
txMsgObj.msgBufId = flexCanCfg.msgCfg[msgIdx].msgBufId;
txMsgObj.dlc = size;
txMsgObj.msgId = flexCanCfg.msgCfg[msgIdx].msgId;
memcpy(&txMsgObj.data[0], pData, size);
FlexCanDrv_SetTxMsg(flexCanDrv_DemoObj, &txMsgObj);
/* transmit standard CAN Tx message */
FlexCanDrv_TransmitMsg(flexCanDrv_DemoObj, &txMsgObj);
return 0;
}
void FlexCanBoot_Init(void)
{
uint32_t busClockFreq = 0;
flexCanDrv_DemoObj = &mcu.flexCanDrv0;
/* set PTE4 as MUX 5 - CAN0.RX */
PinsDrv_SetMuxModeSel(&mcu.ptb, 0, PINSDRV_MUX_ALT5);
/* set PTE5 as MUX 5 - CAN0.TX */
PinsDrv_SetMuxModeSel(&mcu.ptb, 1, PINSDRV_MUX_ALT5);
flexCanCfg.clkSrc = FLEXCANDRV_CLKSRC_CHICLK;
flexCanCfg.fdEnable = false;
flexCanCfg.fdISOEnable = false;
flexCanCfg.enhancefifoEnable = true;
flexCanCfg.msgBufDataLenSel = FLEXCANDRV_MB_SIZE_BYTE_8;
flexCanCfg.individualMaskEnable = true;
if(flexCanCfg.clkSrc == FLEXCANDRV_CLKSRC_CHICLK)
{
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_APB, &busClockFreq);
}
else
{
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_SOSC_DIV2, &busClockFreq);
}
if(flexCanCfg.fdEnable == true)
{
FlexCanDrv_BitTimingCalc(&flexCanCfg.fdBitTiming,
busClockFreq, /* module clock source: 16M */
2000000, /* baudrate: 2M */
7500, /* sample point: 75% */
2000, /* SJW: 20% */
1); /* FD bit timing */
}
FlexCanDrv_BitTimingCalc(&flexCanCfg.bitTiming,
busClockFreq, /* module clock source: 16M */
500000, /* baudrate: 500K */
7500, /* sample point: 75% */
2500, /* SJW: 20% */
0); /* classic CAN bit timing */
/* initialize CAN module */
FlexCanDrv_Configure(flexCanDrv_DemoObj, &flexCanCfg);
/* enable enhance rx fifo interrupt */
FlexCanDrv_SetEnhanceRxFFIsr(flexCanDrv_DemoObj, FLEXCANDRV_ENHANCERXFF_ISR_SRC_DAIE, true);
IrqDrv_EnableIrq(CAN0_ERxFIFO_IRQn);
}
int main(void)
{
uint32_t tTcr = 0;
FlexCan_FrameStructureType rxMsg;
IrqDrv_DisableGlobalInterrupt();
/* Setup the clock */
ClockDrv_ModuleClkConfigType clockConfig;
/* Initialize all MCU drivers: flash drv included */
Mcu_Init(&mcu);
SEGGER_RTT_Init();
SEGGER_RTT_printf(0,"sAswBoot_Req = %x\n",sAswBoot_Req);
SEGGER_RTT_printf(0,"-----clock_INIT-----\n");
WdgDrv_Disable(&mcu.wdgDrv);
hw_init(&mcu);
/* Enable the clock for all ports */
clockConfig.gating = true;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTA, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTB, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTC, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTD, &clockConfig);
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PORTE, &clockConfig);
/* Setup the Pll div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_PLL_DIV2, &clockConfig);
appTaskInit(&mcu);
/* Setup the FIRC2 div2 clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_FIRC;
clockConfig.div = 1;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_FIRC_DIV2, &clockConfig);
ClockDrv_GetFreq(&mcu.clockDrv, CLOCKDRV_CORE, &gCpuClockFrequency);
/* Setup the SPI clock */
clockConfig.gating = true;
clockConfig.source = CLOCKDRV_PLL_DIV2;
ClockDrv_ConfigureClock(&mcu.clockDrv, CLOCKDRV_SPI2, &clockConfig);
tTcr = SpiReg_GetTcr((const SpiRegType *)&mcu.spiDrv2.reg);
SpiDrv_SetPrescaler(&tTcr,0x03);
SEGGER_RTT_printf(0,"-----SPI_INIT-----\n");
SBC_SPI_INIT();
/* CAN init */
memset(&flexCan_DataInfo, 0, sizeof(flexCan_DataInfo));
memset(&flexCanCfg, 0, sizeof(flexCanCfg));
SEGGER_RTT_printf(0,"-----FlexCanDrv_INIT-----\n");
/* get CAN controller default configuration */
FlexCanDrv_GetDefaultCfg(&flexCanCfg);
flexCanCfg.msgNum = sizeof(msgCfgObj) / sizeof(FlexCanDrv_MsgCfgType);
flexCanCfg.msgCfg = msgCfgObj;
FlexCanBoot_Init();
/* UDS init */
Uds_UserInit(&udsObj, &udsParam);
/* Set system tick clock, 1ms event */
SysTick_Config(gCpuClockFrequency / 1000u);
IrqDrv_EnableIrq(SysTick_IRQn);
PinsDrv_WritePin(&mcu.ptd, 3, 0);
PinsDrv_WritePin(&mcu.pta, 17, 0);
IrqDrv_EnableGlobalInterrupt();
SEGGER_RTT_printf(0,"-----init success-----\n");
while(1)
{
if(gSystick1msEvent > 0u)
{
if(udsObj.session == UDS_SESSION_PROGRAMMING)
{
Asw_SetBootloaderRequest();
ResetDrv_SoftwareResetModule(&mcu.resetDrv, RESETDRV_SWRESET_SYS);
}
gSystick1msEvent--;
gSystick1msCnt++;
gSysTick1sCnt++;
if (gSystick1msCnt % 10 == 0)
{
SBC_WD_Trigger();
}
if(gSystick1msCnt % 200 == 0)
{
uint8_t txMsgBuf[8]={0};
txMsgBuf[0] = aswVersion;
txMsgBuf[3] = gSysTick1sCnt & 0xFF;
FlexCanBoot_TxMessage(APP_TX_TEST1_MSG_ID, txMsgBuf, 8);
}
if (gSystick1msCnt >= 5000)
{
gSystick1msCnt = 0;
SEGGER_RTT_printf(0,"app running\n");
}
/* Handler user routine */
if(FlexCanBoot_ReadoutMsg(&rxMsg) == true)
{
if((rxMsg.id == UDS_PHYS_RECV_MSG_ID) || (rxMsg.id == UDS_FUNC_RECV_MSG_ID))
{
IsoTp_HandleIncomingCanMsg(&udsObj.isotp, rxMsg.id, rxMsg.data, rxMsg.len);
}
else
{
}
}
Uds_Run(&udsObj);
}
appTask(&mcu);
}
}

View File

@ -38,131 +38,6 @@
* the functions
******************************************************************************/
static void userSystemInit(void)
{
/* Enable cache */
CACHE->CTRL = 0x1C7;
/* Enable PFLASH prefetch */
SimReg_SetFlashPFlsPfbEn(SIM, 1);
/* Setup the clock */
AcgReg_SetLockKey(ACG, 0xFA8623E4); /* Unlock ACG */
ScgReg_SetLockKey(SCG, 0x53436D65); /* Unlock SCG */
#if defined (_USE_EXT_OSC_)
/* Use External oscillator */
AcgReg_SetOscRange(ACG, 3); /* set SOSC frequency range(use max value when SOSC as the clock source of the PLL) */
AcgReg_SetEnSosc(ACG, 1); /* enable SOSC */
while(AcgReg_GetStSoscRdy(ACG) == 0); /* wait until SOSC is ready */
/* Configure PLL */
AcgReg_SetEnPll(ACG, 0); /* Disable PLL first */
/* PLL configuration:
* - PLL input clock source : SOSC
* - PLL pre-divider : 1
* - feedback divider : 45
* - PLL Feedback clock divider pre-scaler : 1
* - PLL post-divider setting : 3
* Final PLL output frequency is 16M(SOSC) * 45 / 3 / 2 = 120M
*/
AcgReg_SetPllClkIn(ACG, 2);
AcgReg_SetPllPreDiv(ACG, 0);
AcgReg_SetPllM(ACG, 45);
AcgReg_SetPllFbkSel(ACG, 0);
AcgReg_SetPllPosDiv(ACG, 3);
/* SCG PLL configuration:
* - PLL DIV1 clock divider : 1
* - PLL DIV2 clock divider : 1
*/
ScgReg_SetPllCfgDiv1(SCG, 0);
ScgReg_SetPllCfgDiv2(SCG, 0);
/* Enable PLL */
AcgReg_SetEnPll(ACG, 1);
/* delay before check PLL locked flag */
SysTick->LOAD = 48000U;
SysTick->VAL = 0U;
SysTick->CTRL = 5U; /* SysTick uses the processor clock and enable sysTick */
while(SysTick->CTRL < 0x10000){
;/* wait for COUNTFLAG setting*/
}
/*recover sysTick register*/
SysTick->CTRL = 4U;
SysTick->LOAD = 0U;
SysTick->VAL = 0U;
while(AcgReg_GetStPllLock(ACG) == 0); /* Wait until PLL is locked */
/* Set Core and APB clock source divider */
AcgReg_SetSysDivCore(ACG, 0); /* Divide-by-1 */
ScgReg_SetCsrDivApb(SCG, 1); /* Divide-by-2 */
/* Flash frequency MUST be 8M */
ScgReg_SetCsrDivCntFls(SCG, 14); /* Divide-by-15 */
/* Flash AHB bus read access time configure */
FtfcReg_SetFcnfgBusReadTm(FTFC, 2); /* 160M->3, 120M->2, 80M->1, 48M->0 */
/* Set Core clock source to PLL */
AcgReg_SetSysSrcSys(ACG, 2); /* select pll as clock source */
#else
/* Use on-chip internal clock */
/* Configure PLL */
AcgReg_SetEnPll(ACG, 0); /* Disable PLL first */
/* PLL configuration:
* - PLL input clock source : FIRC
* - PLL pre-divider : 1
* - feedback divider : 15
* - PLL Feedback clock divider pre-scaler : 1
* - PLL post-divider setting : 3
* Final PLL output frequency is 48M(FIRC) * 15 / 3 / 2 = 120M
*/
AcgReg_SetPllClkIn(ACG, 0);
AcgReg_SetPllPreDiv(ACG, 0);
AcgReg_SetPllM(ACG, 15);
AcgReg_SetPllFbkSel(ACG, 0);
AcgReg_SetPllPosDiv(ACG, 3);
/* SCG PLL configuration:
* - PLL DIV1 clock divider : 1
* - PLL DIV2 clock divider : 1
*/
ScgReg_SetPllCfgDiv1(SCG, 0);
ScgReg_SetPllCfgDiv2(SCG, 0);
/* Enable PLL */
AcgReg_SetEnPll(ACG, 1);
while(AcgReg_GetStPllLock(ACG) == 0); /* Wait until PLL is locked */
/* Set Core and APB clock source divider */
AcgReg_SetSysDivCore(ACG, 0); /* Divide-by-1 */
ScgReg_SetCsrDivApb(SCG, 1); /* Divide-by-2 */
/* Flash frequency MUST be 8M */
ScgReg_SetCsrDivCntFls(SCG, 14); /* Divide-by-15 */
/* Flash AHB bus read access time configure */
FtfcReg_SetFcnfgBusReadTm(FTFC, 2); /* 160M->3, 120M->2, 80M->1, 48M->0 */
/* Set Core clock source to PLL */
AcgReg_SetSysSrcSys(ACG, 2); /* select pll as clock source */
#endif
/* Finish setting up the clock */
AcgReg_SetLockKey(ACG, 0); /* Lock ACG again */
ScgReg_SetLockKey(SCG, 0); /* Lock SCG again */
/* Enable FPU */
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
/*Release of all peripheral interview access*/
AIPS->PACRA = 0;
AIPS->PACRB = 0;
AIPS->PACRC = 0;
AIPS->PACRD = 0;
AIPS->PACRE = 0;
AIPS->PACRF = 0;
AIPS->PACRG = 0;
AIPS->PACRH = 0;
}
void SystemInit(void)
{
#if 0

View File

@ -7,5 +7,6 @@
"tle94x1_spi.h": "c",
"cpu_drv.h": "c",
"segger_rtt.h": "c"
}
},
"C_Cpp.default.compilerPath": ""
}