搭架构
This commit is contained in:
parent
acac69d9a8
commit
9264a68c73
@ -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();
|
@ -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();
|
||||
|
21
cva_asw_m0146/.vscode/c_cpp_properties.json
vendored
Normal file
21
cva_asw_m0146/.vscode/c_cpp_properties.json
vendored
Normal 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
|
||||
}
|
17
cva_asw_m0146/.vscode/settings.json
vendored
17
cva_asw_m0146/.vscode/settings.json
vendored
@ -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": ""
|
||||
}
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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
29
cva_asw_m0146/src/MotorCtrl.c
Normal file
29
cva_asw_m0146/src/MotorCtrl.c
Normal 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
12
cva_asw_m0146/src/MotorCtrl.h
Normal file
12
cva_asw_m0146/src/MotorCtrl.h
Normal 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
|
||||
|
@ -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
147
cva_asw_m0146/src/appTask.c
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
10
cva_asw_m0146/src/appTask.h
Normal file
10
cva_asw_m0146/src/appTask.h
Normal 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
609
cva_asw_m0146/src/hwctrl.c
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
64
cva_asw_m0146/src/hwctrl.h
Normal file
64
cva_asw_m0146/src/hwctrl.h
Normal 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
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
3
cva_bootloader_m0146/.vscode/settings.json
vendored
3
cva_bootloader_m0146/.vscode/settings.json
vendored
@ -7,5 +7,6 @@
|
||||
"tle94x1_spi.h": "c",
|
||||
"cpu_drv.h": "c",
|
||||
"segger_rtt.h": "c"
|
||||
}
|
||||
},
|
||||
"C_Cpp.default.compilerPath": ""
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user