1431 lines
54 KiB
C
1431 lines
54 KiB
C
|
||
#include <flexcan_cfg.h>
|
||
#include "debug.h"
|
||
#include "interface_config.h"
|
||
#include "app/app_config.h"
|
||
#define TX_PADDING_VAL (0xA5)
|
||
#include "sdrv_vic.h"
|
||
#include "intrinsics.h"
|
||
#include "app/app_differential_drive.h"
|
||
#include "app/app_param_manage.h"
|
||
#include "app/app_ultrasonic.h"
|
||
|
||
|
||
|
||
uint32_t OTA_CANTxID = 0x02;//Ĭ<>Ϸ<EFBFBD><CFB7><EFBFBD>IDΪ0x02
|
||
uint32_t OTA_CANRxID = 0x01;//Ĭ<>Ͻ<EFBFBD><CFBD><EFBFBD>IDΪ0x01
|
||
uint32_t WDT_CANRxID = 0x03;//Ĭ<>Ͻ<EFBFBD><CFBD><EFBFBD>IDΪ0x03
|
||
|
||
|
||
Timer can_timer_interface1;
|
||
Timer can_timer_interface2;
|
||
|
||
bool ecu_online = 0;//0<><30><EFBFBD>ߣ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
|
||
|
||
|
||
UnCanFault can_fault_info = {
|
||
.bit_data.navigator_count = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.motor1_count = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.motor2_count = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.bms_count = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.temperature_count = 0, //<2F>¶ȼ<C2B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.remote_count = 0, //ң<>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
.bit_data.navigator_state = 0, //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.motor1_state = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.motor2_state = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.bms_state = 0, //<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
|
||
.bit_data.temperature_state = 0, //<2F>¶<EFBFBD>״̬
|
||
.bit_data.remote_state = 0, //ң<><D2A3>״̬
|
||
};
|
||
|
||
|
||
|
||
//
|
||
//StrCanFifoQueue can0_Queue;//8֡can<61><6E><EFBFBD>棬<EFBFBD><E6A3AC><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
|
||
//StrCanFifoQueue can1_Queue;
|
||
//StrCanFifoQueue can2_Queue;
|
||
//StrCanFifoQueue can3_Queue;
|
||
//StrCanFifoQueue can4_Queue;
|
||
//StrCanFifoQueue can5_Queue;
|
||
//StrCanFifoQueue can6_Queue;
|
||
//StrCanFifoQueue can7_Queue;
|
||
|
||
|
||
//bool busoff_occur_flag = false;//busoff<66><66>־
|
||
|
||
bool can_0_busoff_flag = false;//busoff<66><66>־
|
||
bool can_1_busoff_flag = false;//busoff<66><66>־
|
||
bool can_2_busoff_flag = false;//busoff<66><66>־
|
||
bool can_3_busoff_flag = false;//busoff<66><66>־
|
||
bool can_4_busoff_flag = false;//busoff<66><66>־
|
||
bool can_5_busoff_flag = false;//busoff<66><66>־
|
||
bool can_6_busoff_flag = false;//busoff<66><66>־
|
||
bool can_7_busoff_flag = false;//busoff<66><66>־
|
||
|
||
|
||
flexcan_handle_t can_handle_0;//can<61><6E>ʼ<EFBFBD><CABC><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||
flexcan_handle_t can_handle_1;
|
||
flexcan_handle_t can_handle_2;
|
||
flexcan_handle_t can_handle_3;
|
||
flexcan_handle_t can_handle_4;
|
||
flexcan_handle_t can_handle_5;
|
||
flexcan_handle_t can_handle_6;
|
||
flexcan_handle_t can_handle_7;
|
||
|
||
|
||
|
||
static uint8_t fifo_Data_0[8];
|
||
static flexcan_frame_t fifo_Buf_0;
|
||
|
||
static uint8_t fifo_Data_1[8];
|
||
static flexcan_frame_t fifo_Buf_1;
|
||
|
||
static uint8_t fifo_Data_2[8];
|
||
static flexcan_frame_t fifo_Buf_2;
|
||
|
||
static uint8_t fifo_Data_3[8];
|
||
static flexcan_frame_t fifo_Buf_3;
|
||
|
||
static uint8_t fifo_Data_4[8];
|
||
static flexcan_frame_t fifo_Buf_4;
|
||
|
||
static uint8_t fifo_Data_5[8];
|
||
static flexcan_frame_t fifo_Buf_5;
|
||
|
||
static uint8_t fifo_Data_6[8];
|
||
static flexcan_frame_t fifo_Buf_6;
|
||
|
||
static uint8_t fifo_Data_7[8];
|
||
static flexcan_frame_t fifo_Buf_7;
|
||
|
||
|
||
uint8_t flexcan_config_rx_fifo(flexcan_handle_t *handle,
|
||
flexcan_rx_fifo_config_t *config)
|
||
{
|
||
flexcan_frame_t *rx_fifo_frame;
|
||
//------------------------------------------------------------------------------
|
||
if(CAN_INDEX_0 == (handle->controller_id))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ͬ<EFBFBD><CDAC><EFBFBD>жϺ<D0B6><CFBA>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_0;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_0[0];
|
||
}
|
||
else if(CAN_INDEX_1 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_1;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_1[0];
|
||
}
|
||
else if(CAN_INDEX_2 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_2;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_2[0];
|
||
}
|
||
else if(CAN_INDEX_3 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_3;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_3[0];
|
||
}
|
||
else if(CAN_INDEX_4 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_4;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_4[0];
|
||
}
|
||
else if(CAN_INDEX_5 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_5;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_5[0];
|
||
}
|
||
else if(CAN_INDEX_6 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_6;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_6[0];
|
||
}
|
||
else if(CAN_INDEX_7 == (handle->controller_id))
|
||
{
|
||
rx_fifo_frame = &fifo_Buf_7;
|
||
rx_fifo_frame->dataBuffer = &fifo_Data_7[0];
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
flexcan_set_rx_fifo_config(handle, config);//<2F><><EFBFBD><EFBFBD>fifo<66><6F><EFBFBD><EFBFBD>
|
||
|
||
for (uint8_t i = 0; i < USED_MB_FOR_FIFO;
|
||
i++) {
|
||
flexcan_set_rx_individual_mask(handle, i, config->filter_tab[i].filter_mask);
|
||
}
|
||
|
||
/* rx by interrupt */
|
||
flexcan_fifo_transfer_t Xfer = {rx_fifo_frame};
|
||
flexcan_receive_fifo_nonblocking(handle, &Xfer);
|
||
|
||
return 1;
|
||
}
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn CAN_Send_Msg
|
||
*
|
||
* @brief CAN Transmit function.
|
||
*
|
||
* @param CANx- CAN1 or CAN2
|
||
* ID - Message ID
|
||
* IDE - CAN_Id_Standard or CAN_Id_Extended
|
||
* RTR - CAN_RTR_Data or CAN_RTR_Remote
|
||
* msg - Transmit data buffer.
|
||
* len - Data length.
|
||
*
|
||
* @return 0 - Send successful.
|
||
* 1 - Send failed.
|
||
*/
|
||
uint8_t CAN_Send_Msg( flexcan_handle_t *handle, uint32_t ID, flexcan_frame_format_e ide, flexcan_frame_type_e rtr, uint8_t *msg, uint8_t len, uint8_t tx_index)
|
||
{
|
||
uint16_t i = 0;
|
||
//------------------------------------------------------------------------------
|
||
|
||
flexcan_frame_t frame = {.id = ID,
|
||
.length = len,
|
||
.type = rtr,
|
||
.format = ide,
|
||
.dataBuffer = msg};
|
||
flexcan_mb_transfer_t xfer = {&frame, tx_index};
|
||
|
||
while( ( flexcan_get_mb_state(handle, tx_index) != FLEXCAN_StateIdle ) && (i < 0xFFF) )
|
||
{
|
||
i++;
|
||
}
|
||
|
||
if( i == 0xFFF )
|
||
{
|
||
return 1;
|
||
|
||
}
|
||
else
|
||
{
|
||
flexcan_send_nonblocking(handle, &xfer, TX_PADDING_VAL);
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_0(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
uint8_t i = 0;
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
|
||
if(TEMP_MODULE_INPUT_ID_1 == (buf->id))//<2F>¶<EFBFBD>
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_sw_sample.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_sw_sample, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
}
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_0_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
|
||
//uint32_t time_elapsed = 0;
|
||
//uint32_t time_elapsed1 = 0;
|
||
void flexcan_Receive_callback_1(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
|
||
uint8_t i = 0;
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
if(LEFT_FRONT_MOTOR_INPUT1 == (buf->id))
|
||
{
|
||
can_fault_info.bit_data.motor1_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_input1.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_input1, 1);
|
||
}
|
||
else if( LEFT_FRONT_MOTOR_INPUT2 == (buf->id) )
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_temp1.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_temp1, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
}
|
||
else if( LEFT_REAR_MOTOR2_INPUT1 == (buf->id) )//
|
||
{
|
||
can_fault_info.bit_data.motor3_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_input3.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
// publishMessage(&un_motor_input3, 1); //<2F><EFBFBD>Ϊ
|
||
}
|
||
else if( LEFT_REAR_MOTOR2_INPUT2 == (buf->id) )
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_temp3.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_temp3, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
}
|
||
else{}
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_1_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_2(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
uint8_t i = 0;
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
if(RIGHT_FRONT_MOTOR_INPUT1 == (buf->id))
|
||
{
|
||
can_fault_info.bit_data.motor2_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_input2.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_input2, 1);
|
||
}
|
||
else if( RIGHT_FRONT_MOTOR_INPUT2 == (buf->id) )
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_temp2.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_temp2, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
}
|
||
else if( RIGHT_REAR_MOTOR_INPUT1 == (buf->id) )//
|
||
{
|
||
can_fault_info.bit_data.motor4_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_input4.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_input4, 1);
|
||
}
|
||
else if( RIGHT_REAR_MOTOR_INPUT2 == (buf->id) )
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_motor_temp4.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_motor_temp4, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
}
|
||
else{}
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_2_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_3(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
uint8_t i = 0;
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
|
||
if(BMS_INPUT_ID1 == (buf->id))//BMS
|
||
{
|
||
can_fault_info.bit_data.bms_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_bms_input.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
publishMessage(&un_bms_input, 1);
|
||
}
|
||
else if(BMS_INPUT_ID2 == (buf->id))//BMS
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_bms_input.arr[i+8] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_bms_input, 1);
|
||
}
|
||
else{}
|
||
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_3_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_4(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_4_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_5(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_5_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_6(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
uint8_t i = 0;
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
if(OTA_CANRxID == (buf->id))//IDΪ1<CEAA><31> boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
boot_can_flag = true;
|
||
FrameHeader = ( (buf->dataBuffer[0] << 8) | (buf->dataBuffer[1]) );
|
||
}
|
||
else if(WDT_CANRxID == (buf->id))//<2F><><EFBFBD>յ<EFBFBD>ι<EFBFBD><CEB9>ID
|
||
{
|
||
if(FEEDDOG_HEADER == ( (buf->dataBuffer[0] << 8) | (buf->dataBuffer[1]) ))
|
||
{
|
||
WDTReFresh_flag = true;//<2F><><EFBFBD><EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD>־
|
||
printf("Feed dog flag received %d\n",getCurrentTime());
|
||
}
|
||
}
|
||
else if(ULTRASONIC_ID_1 == (buf->id))
|
||
{
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_ultrasonic_input1.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
publishMessage(&un_ultrasonic_input1, 1);
|
||
}
|
||
else{}
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_6_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/*********************************************************************
|
||
* @fn flexcan_Receive_callback
|
||
*
|
||
* @brief erase Data-Flash block, minimal block is 256B
|
||
*
|
||
* @param Page_Address - the address of the page being erased.
|
||
* Length - Erased data length
|
||
*
|
||
* @return none
|
||
*/
|
||
void flexcan_Receive_callback_7(flexcan_handle_t *handle,
|
||
flexcan_status_e status, uint32_t result,
|
||
void *userData)
|
||
{
|
||
flexcan_frame_t *buf = (flexcan_frame_t *)userData;
|
||
uint8_t i = 0;
|
||
//uintptr_t
|
||
//--------------------------------------------------------------
|
||
switch (status)
|
||
{
|
||
case FLEXCAN_RX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_RX_FIFO_IDLE:
|
||
if(REMOTE_ID == (buf->id))//ң<><D2A3><EFBFBD><EFBFBD>CAN
|
||
{
|
||
can_fault_info.bit_data.remote_count ++;
|
||
for(i = 0; i < (buf->length); i++)
|
||
{
|
||
un_remote_control_input.arr[i] = buf->dataBuffer[i];
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
publishMessage(&un_remote_control_input, 1);
|
||
|
||
// printf("ori_remote_stop: %d\n", un_remote_control_input.bit_data.switch_b);
|
||
}
|
||
else
|
||
{
|
||
}
|
||
break;
|
||
|
||
case FLEXCAN_TX_IDLE:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_TIMEOUT:
|
||
break;
|
||
|
||
case FLEXCAN_WAKEUP_MATCH:
|
||
break;
|
||
|
||
case FLEXCAN_ERROR_STATUS:
|
||
can_7_busoff_flag = true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
//fifo_config <20>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>
|
||
//can_config <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//call_back <20>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||
uint8_t initialization_Flexcan(uint8_t can_index, const flexcan_config_t *can_config, flexcan_rx_fifo_config_t *fifo_config, flexcan_transfer_callback_t call_back)
|
||
{
|
||
flexcan_handle_t *handle;
|
||
uint8_t can_irq_num = 0;
|
||
uint32_t can_reg_base = 0;
|
||
//------------------------------------------------------------------
|
||
if(FLEXCAN7 == can_index)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ͬ<EFBFBD><CDAC><EFBFBD>жϺ<D0B6><CFBA>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>ַ
|
||
{
|
||
handle = &can_handle_0;
|
||
can_irq_num = CANFD7_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD7_BASE;
|
||
}
|
||
else if(FLEXCAN21 == can_index)
|
||
{
|
||
handle = &can_handle_1;
|
||
can_irq_num = CANFD21_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD21_BASE;
|
||
}
|
||
else if(FLEXCAN16 == can_index)
|
||
{
|
||
handle = &can_handle_2;
|
||
can_irq_num = CANFD16_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD16_BASE;
|
||
}
|
||
else if(FLEXCAN3 == can_index)
|
||
{
|
||
handle = &can_handle_3;
|
||
can_irq_num = CANFD3_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD3_BASE;
|
||
}
|
||
else if(FLEXCAN23 == can_index)
|
||
{
|
||
handle = &can_handle_4;
|
||
can_irq_num = CANFD23_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD23_BASE;
|
||
}
|
||
else if(FLEXCAN5 == can_index)
|
||
{
|
||
handle = &can_handle_5;
|
||
can_irq_num = CANFD5_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD5_BASE;
|
||
}
|
||
else if(FLEXCAN6 == can_index)
|
||
{
|
||
handle = &can_handle_6;
|
||
can_irq_num = CANFD6_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD6_BASE;
|
||
}
|
||
else if(FLEXCAN4 == can_index)
|
||
{
|
||
handle = &can_handle_7;
|
||
can_irq_num = CANFD4_CANFD_INTR_NUM;
|
||
can_reg_base = APB_CANFD4_BASE;
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
//initialize the FlexCAN handle
|
||
flexcan_create_handle(handle, can_index, (void *)can_reg_base, can_irq_num, call_back, NULL);
|
||
|
||
/* initialize flexCAN. */
|
||
flexcan_init(handle, can_config);
|
||
|
||
/* unfreeze the flexCAN by demo. */
|
||
flexcan_freeze(handle, false);
|
||
|
||
/* enable busoff interrupt. */
|
||
flexcan_enable_interrupts(handle, FLEXCAN_BusOffInterruptEnable);//
|
||
|
||
/* enable irq. */
|
||
irq_attach(handle->irq_num, flexcan_irq_handler, handle);
|
||
irq_enable(handle->irq_num);
|
||
|
||
/* assign fifo only for rx. */
|
||
flexcan_config_rx_fifo(handle, fifo_config);
|
||
|
||
/* assign mailbox14-20 for tx. */
|
||
for (uint8_t i = TX_MB_INDEX; i < (TX_MB_INDEX + TX_MAILBOX_NUM); i++)
|
||
{
|
||
flexcan_set_tx_mb_config(handle, i, true);
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* reinitialize the controller. */
|
||
void flexcan_Busoff_Recovery(void)
|
||
{
|
||
//----------------------------------------------------------
|
||
if (can_0_busoff_flag == true) //busoff
|
||
{
|
||
printf("can0 busoff !\n");
|
||
flexcan_deinit(&can_handle_0);
|
||
|
||
initialization_Flexcan(CAN_INDEX_0, &can_0_config, &can_0_fifo_config, flexcan_Receive_callback_0);
|
||
|
||
can_0_busoff_flag = false;
|
||
}
|
||
|
||
if (can_1_busoff_flag == true) //busoff
|
||
{
|
||
printf("can1 busoff !\n");
|
||
flexcan_deinit(&can_handle_1);
|
||
|
||
initialization_Flexcan(CAN_INDEX_1, &can_1_config, &can_1_fifo_config, flexcan_Receive_callback_1);
|
||
|
||
can_1_busoff_flag = false;
|
||
}
|
||
|
||
if (can_2_busoff_flag == true) //busoff
|
||
{
|
||
printf("can2 busoff !\n");
|
||
flexcan_deinit(&can_handle_2);
|
||
|
||
initialization_Flexcan(CAN_INDEX_2, &can_2_config, &can_2_fifo_config, flexcan_Receive_callback_2);
|
||
|
||
can_2_busoff_flag = false;
|
||
}
|
||
|
||
if (can_3_busoff_flag == true) //busoff
|
||
{
|
||
printf("can3 busoff !\n");
|
||
flexcan_deinit(&can_handle_3);
|
||
|
||
initialization_Flexcan(CAN_INDEX_3, &can_3_config, &can_3_fifo_config, flexcan_Receive_callback_3);
|
||
|
||
can_3_busoff_flag = false;
|
||
}
|
||
|
||
if (can_4_busoff_flag == true) //busoff
|
||
{
|
||
printf("can4 busoff !\n");
|
||
flexcan_deinit(&can_handle_4);
|
||
|
||
initialization_Flexcan(CAN_INDEX_4, &can_4_config, &can_4_fifo_config, flexcan_Receive_callback_4);
|
||
|
||
can_4_busoff_flag = false;
|
||
}
|
||
|
||
if (can_5_busoff_flag == true) //busoff
|
||
{
|
||
printf("can5 busoff !\n");
|
||
flexcan_deinit(&can_handle_5);
|
||
|
||
initialization_Flexcan(CAN_INDEX_5, &can_5_config, &can_5_fifo_config, flexcan_Receive_callback_5);
|
||
|
||
can_5_busoff_flag = false;
|
||
}
|
||
|
||
if (can_6_busoff_flag == true) //busoff
|
||
{
|
||
printf("can6 busoff !\n");
|
||
flexcan_deinit(&can_handle_6);
|
||
|
||
initialization_Flexcan(CAN_INDEX_6, &can_6_config, &can_6_fifo_config, flexcan_Receive_callback_6);
|
||
|
||
can_6_busoff_flag = false;
|
||
}
|
||
|
||
if (can_7_busoff_flag == true) //busoff
|
||
{
|
||
printf("can7 busoff !\n");
|
||
flexcan_deinit(&can_handle_7);
|
||
|
||
initialization_Flexcan(CAN_INDEX_7, &can_7_config, &can_7_fifo_config, flexcan_Receive_callback_7);
|
||
|
||
can_7_busoff_flag = false;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/* initialization_all_flexcan. */
|
||
void initialization_All_Flexcan(void)
|
||
{
|
||
sdrv_gpio_set_pin_output_level(GPIO_H12, 0); //CANʹ<4E><CAB9>
|
||
|
||
initialization_Flexcan(CAN_INDEX_0, &can_0_config, &can_0_fifo_config, flexcan_Receive_callback_0);//250k
|
||
|
||
initialization_Flexcan(CAN_INDEX_1, &can_1_config, &can_1_fifo_config, flexcan_Receive_callback_1);//250k
|
||
|
||
initialization_Flexcan(CAN_INDEX_2, &can_2_config, &can_2_fifo_config, flexcan_Receive_callback_2);//250k
|
||
|
||
initialization_Flexcan(CAN_INDEX_3, &can_3_config, &can_3_fifo_config, flexcan_Receive_callback_3);//1M
|
||
|
||
initialization_Flexcan(CAN_INDEX_4, &can_4_config, &can_4_fifo_config, flexcan_Receive_callback_4);//250k
|
||
|
||
initialization_Flexcan(CAN_INDEX_5, &can_5_config, &can_5_fifo_config, flexcan_Receive_callback_5);//250k
|
||
|
||
initialization_Flexcan(CAN_INDEX_6, &can_6_config, &can_6_fifo_config, flexcan_Receive_callback_6);//1M
|
||
|
||
initialization_Flexcan(CAN_INDEX_7, &can_7_config, &can_7_fifo_config, flexcan_Receive_callback_7);//250k
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//100ms <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
void canTimerProcess(void *signal_id)
|
||
{
|
||
static uint8_t can_timer[5] = {0,0,0,0,0};
|
||
static uint8_t can_temp[10] = {0,0,0,0,0,0,0,0,0,0};//<2F>м<EFBFBD><D0BC>ж<EFBFBD>ֵ
|
||
uint8_t temp = 0;
|
||
|
||
can_timer[0] ++;
|
||
if(can_timer[0] >= 1)//100ms<6D>ж<EFBFBD>һ<EFBFBD><D2BB>
|
||
{
|
||
can_timer[0] = 0;
|
||
|
||
if(can_fault_info.bit_data.motor1_count == can_temp[0])//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
{
|
||
can_fault_info.bit_data.motor1_state = FAULT;
|
||
}
|
||
else
|
||
{
|
||
can_fault_info.bit_data.motor1_state = NORMAL;
|
||
can_temp[0] = can_fault_info.bit_data.motor1_count;//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||
}
|
||
|
||
if(can_fault_info.bit_data.motor1_state != can_temp[1])
|
||
{
|
||
can_temp[1] = can_fault_info.bit_data.motor1_state;
|
||
temp ++;
|
||
}
|
||
|
||
|
||
if(can_fault_info.bit_data.motor2_count == can_temp[2])//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
{
|
||
can_fault_info.bit_data.motor2_state = FAULT;
|
||
}
|
||
else
|
||
{
|
||
can_fault_info.bit_data.motor2_state = NORMAL;
|
||
can_temp[2] = can_fault_info.bit_data.motor2_count;//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||
}
|
||
|
||
if(can_fault_info.bit_data.motor2_state != can_temp[3])
|
||
{
|
||
can_temp[3] = can_fault_info.bit_data.motor2_state;
|
||
temp ++;
|
||
}
|
||
}
|
||
|
||
can_timer[1] ++;//BMS<4D>ж<EFBFBD>
|
||
if(can_timer[1] >= 20)//2s<32>ж<EFBFBD>һ<EFBFBD><D2BB>
|
||
{
|
||
can_timer[1] = 0;
|
||
//BMS
|
||
if(can_fault_info.bit_data.bms_count == can_temp[4])//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
{
|
||
can_fault_info.bit_data.bms_state = FAULT;
|
||
}
|
||
else
|
||
{
|
||
can_fault_info.bit_data.bms_state = NORMAL;
|
||
can_temp[4] = can_fault_info.bit_data.bms_count;//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||
}
|
||
if(can_fault_info.bit_data.bms_state != can_temp[5])
|
||
{
|
||
can_temp[5] = can_fault_info.bit_data.bms_state;
|
||
temp ++;
|
||
}
|
||
|
||
//<2F>¶<EFBFBD>ģ<EFBFBD><C4A3>
|
||
if(can_fault_info.bit_data.temperature_count == can_temp[6])//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
{
|
||
can_fault_info.bit_data.temperature_state = FAULT;
|
||
}
|
||
else
|
||
{
|
||
can_fault_info.bit_data.temperature_state = NORMAL;
|
||
can_temp[6] = can_fault_info.bit_data.temperature_count;//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||
}
|
||
if(can_fault_info.bit_data.temperature_state != can_temp[7])
|
||
{
|
||
can_temp[7] = can_fault_info.bit_data.temperature_state;
|
||
temp ++;
|
||
}
|
||
}
|
||
|
||
can_timer[2] ++;//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||
if(can_timer[2] >= 5)//500ms<6D>ж<EFBFBD>һ<EFBFBD><D2BB>
|
||
{
|
||
can_timer[2] = 0;
|
||
//ң<><D2A3><EFBFBD><EFBFBD>
|
||
if(can_fault_info.bit_data.remote_count == can_temp[8])//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||
{
|
||
can_fault_info.bit_data.remote_state = FAULT;
|
||
}
|
||
else
|
||
{
|
||
can_fault_info.bit_data.remote_state = NORMAL;
|
||
can_temp[8] = can_fault_info.bit_data.remote_count;//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||
}
|
||
if(can_fault_info.bit_data.remote_state != can_temp[9])
|
||
{
|
||
can_temp[9] = can_fault_info.bit_data.remote_state;
|
||
temp ++;
|
||
}
|
||
}
|
||
|
||
can_timer[4] ++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>ź<EFBFBD>
|
||
if( (0 != temp) || (can_timer[4] >= 5) )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>500<30><30><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
can_timer[4] = 0;
|
||
publishMessage(&can_fault_info, 1);//
|
||
}
|
||
|
||
//busoff<66>ж<EFBFBD>
|
||
can_timer[3] ++;
|
||
if(can_timer[3] >= 10)//100*100*10 = 1s<31><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
{
|
||
can_timer[3] = 0;
|
||
|
||
flexcan_Busoff_Recovery();//BUSS OFF<46><46><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
|
||
|
||
//static void processSdoOutput1(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output1, 8, 15);//
|
||
//}
|
||
//
|
||
//static void processSdoOutput2(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output2, 8, 16);
|
||
//}
|
||
//
|
||
//static void processSdoOutput3(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output3, 8, 17);
|
||
//}
|
||
//
|
||
//static void processSdoOutput4(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output4, 8, 18);
|
||
//}
|
||
//
|
||
//static void processSdoOutput5(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output5, 8, 19);
|
||
//}
|
||
//
|
||
//
|
||
//static void processSdoOutput7(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x601, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_sdo_output7, 8, 20);
|
||
//}
|
||
|
||
|
||
|
||
static void processMotorOutput1(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_1, LEFT_FRONT_MOTOR_OUTPUT1, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output1, 8, 15);//<2F><><EFBFBD>1Ť<31>غ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_1, LEFT_REAR_MOTOR_OUTPUT1, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output3, 8, 16);//<2F><><EFBFBD>1Ť<31>غ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
static void processMotorOutput2(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_2, RIGHT_FRONT_MOTOR_OUTPUT1, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output2, 8, 15);//<2F><><EFBFBD>2Ť<32>غ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_2, RIGHT_REAR_MOTOR_OUTPUT1, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output4, 8, 16);//<2F><><EFBFBD>2Ť<32>غ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
static void processMotorOutput3(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
CAN_Send_Msg(&can_handle_1, LEFT_FRONT_MOTOR_OUTPUT2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output1.arr[8], 8, 17);//<2F><><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_1, LEFT_REAR_MOTOR_OUTPUT2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output3.arr[8], 8, 18);//<2F><><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
}
|
||
|
||
static void processMotorOutput4(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_2, RIGHT_FRONT_MOTOR_OUTPUT2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output2.arr[8], 8, 17);//<2F><><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_2, RIGHT_REAR_MOTOR_OUTPUT2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_motor_output4.arr[8], 8, 18);//<2F><><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
static void processKgfOutput1(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
if(1 == ecu_online)//20250318 <20><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>߲<EFBFBD><DFB2>ܷ<EFBFBD><DCB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>E3ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>
|
||
{
|
||
un_inf_can_kgf_output1.bit_data.can_rx5 = 0xE3;
|
||
CAN_Send_Msg(&can_handle_0, 0x11000002, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_inf_can_kgf_output1, 8, 15);//KGF1
|
||
}
|
||
}
|
||
|
||
static void processKgfOutput2(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if(1 == ecu_online)//20250318 <20><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>߲<EFBFBD><DFB2>ܷ<EFBFBD><DCB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>E3ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>
|
||
{
|
||
un_inf_can_kgf_output2.bit_data.can_rx5 = 0xE3;
|
||
CAN_Send_Msg(&can_handle_0, 0x14000002, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_inf_can_kgf_output2, 8, 16);//KGF2
|
||
}
|
||
|
||
}
|
||
|
||
//static void processKgfOutput2(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// if(1 == ecu_online)//20250318 <20><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>߲<EFBFBD><DFB2>ܷ<EFBFBD><DCB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>E3ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>
|
||
// {
|
||
// un_inf_can_kgf_output2.bit_data.can_rx5 = 0xE3;
|
||
// CAN_Send_Msg(&can_handle_0, 0x14000002, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_inf_can_kgf_output2, 8, 16);//KGF2
|
||
// }
|
||
//
|
||
//}
|
||
|
||
|
||
|
||
static void processWheelSpeedOutput(void *signal_id)
|
||
{
|
||
float CANPressSpeedTemp = 0.0;//<2F>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>м<EFBFBD>ֵ
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
CANPressSpeedTemp = (diff_data.left_motor_speed*(float)getParam("whl_dia") * M_PI*60)/1000.0/(float)getParam("gRatio");// ת/<2F><><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>km/h һȦ1.8<EFBFBD><EFBFBD> 20241016 <20><><EFBFBD>Լ<EFBFBD><D4BC>ٱ<EFBFBD>
|
||
CANPressSpeedTemp = CANPressSpeedTemp*100;//,<2C><><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>100<30><30> ,ϵ<><CFB5>0.01
|
||
un_wheel_wpeed_output.bit_data.left_front = (uint16_t)((int16_t)(CANPressSpeedTemp));//ת<><D7AA>*1.8*60*100/1000/ ת/<2F><><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>km/h һȦ1.8<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ0.01<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> 20240629 <20><><EFBFBD>ٱȲ<D9B1><C8B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>
|
||
un_wheel_wpeed_output.bit_data.left_rear = (uint16_t)((int16_t)(CANPressSpeedTemp));//<2F><>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><EFBFBD><DEB7><EFBFBD>
|
||
|
||
CANPressSpeedTemp = (diff_data.right_motor_speed*(float)getParam("whl_dia") * M_PI*60)/1000.0/(float)getParam("gRatio");// ת/<2F><><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>km/h һȦ1.8<EFBFBD><EFBFBD>
|
||
CANPressSpeedTemp = CANPressSpeedTemp*100;//,<2C><><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>100<30><30> ,ϵ<><CFB5>0.01
|
||
un_wheel_wpeed_output.bit_data.right_front = (uint16_t)((int16_t)(CANPressSpeedTemp));//ת<><D7AA>*1.8*60*100/1000/ ת/<2F><><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD>km/h һȦ1.8<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ0.01<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD> 20240629 <20><><EFBFBD>ٱȲ<D9B1><C8B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>
|
||
un_wheel_wpeed_output.bit_data.right_rear = (uint16_t)((int16_t)(CANPressSpeedTemp));//<2F><>ת<EFBFBD><D7AA>Ϊint<6E><74><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><EFBFBD><DEB7><EFBFBD>
|
||
|
||
CAN_Send_Msg(&can_handle_4, 0x98, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_wheel_wpeed_output, 8, 15);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
static void processHBridgeOutput(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_5, 0x7F2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output, 8, 17);//H<><48><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_5, 0x722, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output1, 8, 19);//H<><48><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
static void processUnGatherOutput(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_0, 0x15000002, FLEXCAN_EXTEND_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_gather_output, 8, 18);//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
|
||
|
||
static void processUltrasonicOutput(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_6, ULTRASONIC_ID_1, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_ultrasonic_output1, 8, 15);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
//static void processHBridgeOutput2(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_5, 0x722, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_h_bridge_output2, 8, 16);//H<><48><EFBFBD><EFBFBD><EFBFBD>
|
||
//}
|
||
|
||
|
||
//static void processLifterOutput(void *signal_id)
|
||
//{
|
||
// (void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_5, 0x6F2, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, (uint8_t *)&un_lifter_output, 8, 17);//<2F>Ƹ<EFBFBD><C6B8><EFBFBD><EFBFBD>
|
||
//}
|
||
|
||
|
||
|
||
|
||
//can <20><><EFBFBD><EFBFBD> 100ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
void canSendAll(void *signal_id)
|
||
{
|
||
static uint16_t wheel_speed_cnt = 0;
|
||
// static uint8_t kgf_cnt = 0;
|
||
static uint16_t bms_cnt1 = 0;
|
||
static uint16_t bms_cnt2 = 0;
|
||
// static uint16_t motor_speed_cnt = 0;
|
||
static uint16_t motor_power_cnt = 0;
|
||
// static uint8_t h_bridge_cnt = 0;
|
||
uint8_t CanData[8] = {0,0,0,0,0,0,0,0};
|
||
//-------------------------------------------------------------------------
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
bms_cnt1 ++;
|
||
if(bms_cnt1 >= 1000)//1s
|
||
{
|
||
bms_cnt1 = 0;
|
||
|
||
CanData[0] = 0x5A;
|
||
|
||
CAN_Send_Msg(&can_handle_3, 0x100, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 1, 15);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
bms_cnt2 ++;
|
||
if(bms_cnt2 >= 1100)//1s
|
||
{
|
||
bms_cnt2 = 0;
|
||
|
||
CanData[0] = 0x5A;
|
||
|
||
CAN_Send_Msg(&can_handle_3, 0x101, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 1, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
|
||
motor_power_cnt ++;
|
||
if(motor_power_cnt >= 1000)//1s<31><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
{
|
||
motor_power_cnt = 0;
|
||
processMotorOutput3(CanData);
|
||
processMotorOutput4(CanData);
|
||
}
|
||
|
||
// motor_power_cnt ++;
|
||
// if(motor_power_cnt >= 10)//<2F><>ȡת<C8A1><D7AA> 20ms<6D><73><EFBFBD><EFBFBD>
|
||
// {
|
||
// motor_power_cnt = 0;
|
||
//
|
||
// un_motor_output1.bit_data.MotCon_1Signal6 = 0x84;
|
||
// un_motor_output1.bit_data.MotCon_1Signal7 = 0x02;
|
||
// un_motor_output2.bit_data.MotCon_1Signal6 = 0x84;
|
||
// un_motor_output2.bit_data.MotCon_1Signal7 = 0x02;
|
||
//
|
||
// processMotorOutput3(CanData);
|
||
// processMotorOutput4(CanData);
|
||
// }
|
||
|
||
// kgf_cnt ++;
|
||
// if(kgf_cnt >= 5)//20210312 <20><><EFBFBD><EFBFBD>CANͨѶģ<D1B6><C4A3><EFBFBD><EFBFBD><EFBFBD> 20210710<31><EFBFBD>Ϊ50ms<6D><73><EFBFBD><EFBFBD>
|
||
// {
|
||
// kgf_cnt = 0;
|
||
//
|
||
// processKgfOutput1(CanData);
|
||
// processKgfOutput2(CanData);
|
||
// }
|
||
//
|
||
//<2F><><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
|
||
wheel_speed_cnt ++;
|
||
if(wheel_speed_cnt >= 100)
|
||
{
|
||
wheel_speed_cnt = 0;
|
||
|
||
processWheelSpeedOutput(CanData);
|
||
|
||
// CAN_Send_Msg(&can_handle_0, 0x120, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_1, 0x121, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 17);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_2, 0x122, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 17);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_3, 0x123, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_4, 0x124, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_5, 0x125, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
CAN_Send_Msg(&can_handle_6, 0x126, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, &un_can_debug_output.arr[0], 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// CAN_Send_Msg(&can_handle_7, 0x127, FLEXCAN_STANDARD_FRAME, FLEXCAN_FrameTypeData, CanData, 8, 16);//BMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
//
|
||
|
||
//H<><48><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
||
// h_bridge_cnt ++;
|
||
// if(h_bridge_cnt >= 5)
|
||
// {
|
||
// h_bridge_cnt = 0;
|
||
//
|
||
// processHBridgeOutput(CanData);
|
||
// }
|
||
|
||
timerStart(&can_timer_interface1,1,1);//1ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
}
|
||
|
||
|
||
|
||
|
||
// can<61><6E>ʱ<EFBFBD><CAB1><EFBFBD>źŴ<C5BA><C5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
static void canInterfaceTimerProcess(void *signal_id)
|
||
{
|
||
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// uint32_t time_boot = getCurrentTime();//<2F><>¼<EFBFBD><C2BC>ǰʱ<C7B0><CAB1>
|
||
|
||
canTimerProcess(signal_id);
|
||
|
||
// printf("motor1 interval:%d,motor2 interval:%d\n",time_elapsed,time_elapsed1);//<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>2<EFBFBD><32><EFBFBD>ռ<EFBFBD><D5BC>
|
||
|
||
timerStart(&can_timer_interface2,100,1);//100ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
|
||
// printf("canInterface spend time:%d\n",getCurrentTime() - time_boot);//<2F><><EFBFBD>app<70><70><EFBFBD>˶ʱ<E0B3A4><CAB1>
|
||
}
|
||
|
||
static void canInterfaceInput(void *signal_id)
|
||
{
|
||
if (signal_id == &un_sw_sample)
|
||
{
|
||
ecu_online = un_sw_sample.bit_data.flg_wake_ecu;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
// APPģ<50><C4A3>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
||
void canInterfaceInit(void)
|
||
{
|
||
memset(&un_motor_input1, 0, sizeof(UnMotorInput));
|
||
memset(&un_motor_input2, 0, sizeof(UnMotorInput));
|
||
memset(&un_bms_input , 0, sizeof(UnBmsInput));
|
||
memset(&un_temp_module_input, 0, sizeof(UnTempModuleInput));
|
||
|
||
memset(&un_motor_output1, 0, sizeof(UnMotorOutput));
|
||
memset(&un_motor_output2, 0, sizeof(UnMotorOutput));
|
||
|
||
// un_motor_output1.bit_data.mode = 0x05;
|
||
// un_motor_output1.bit_data.gear = 0x01;
|
||
// un_motor_output1.bit_data.can_gear = 0x01;
|
||
// un_motor_output1.bit_data.motor_direction = 0x01;
|
||
// un_motor_output1.bit_data.control_data1 = 0x0;
|
||
// un_motor_output1.bit_data.control_data2 = 0x0;
|
||
//
|
||
// un_motor_output2.bit_data.mode = 0x05;
|
||
// un_motor_output2.bit_data.gear = 0x01;
|
||
// un_motor_output2.bit_data.can_gear = 0x01;
|
||
// un_motor_output2.bit_data.motor_direction = 0x00;
|
||
// un_motor_output2.bit_data.control_data1 = 0x0;
|
||
// un_motor_output2.bit_data.control_data2 = 0x0;
|
||
//
|
||
// un_motor_output3.bit_data.mode = 0x05;
|
||
// un_motor_output3.bit_data.gear = 0x01;
|
||
// un_motor_output3.bit_data.can_gear = 0x01;
|
||
// un_motor_output3.bit_data.motor_direction = 0x01;
|
||
// un_motor_output3.bit_data.control_data1 = 0x0;
|
||
// un_motor_output3.bit_data.control_data2 = 0x0;
|
||
//
|
||
// un_motor_output4.bit_data.mode = 0x05;
|
||
// un_motor_output4.bit_data.gear = 0x01;
|
||
// un_motor_output4.bit_data.can_gear = 0x01;
|
||
// un_motor_output4.bit_data.motor_direction = 0x00;
|
||
// un_motor_output4.bit_data.control_data1 = 0x0;
|
||
// un_motor_output4.bit_data.control_data2 = 0x0;
|
||
|
||
|
||
|
||
// un_motor_output1.bit_data.set_torque = 30000;//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||
// un_motor_output1.bit_data.set_rotation_speed = 30000;
|
||
// un_motor_output1.bit_data.mode = 0;
|
||
// un_motor_output2.bit_data.set_torque = 30000;
|
||
// un_motor_output2.bit_data.set_rotation_speed = 30000;
|
||
// un_motor_output2.bit_data.mode = 0;
|
||
// can_fault_info.bit_data.navigator_state = 1;
|
||
|
||
memset(&un_inf_can_kgf_output1, 0, sizeof(UnInfCanKGFOutput));
|
||
memset(&un_inf_can_kgf_output2, 0, sizeof(UnInfCanKGFOutput));
|
||
memset(&un_h_bridge_output, 0, sizeof(UnHBridgeOutput));
|
||
memset(&un_wheel_wpeed_output, 0, sizeof(UnWheelSpeedOutput));
|
||
memset(&un_remote_control_input, 0, sizeof(UnRemoteControlInput));
|
||
|
||
un_inf_can_kgf_output2.bit_data.KGF04 = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>ϵ<EFBFBD><CFB5>ͨ<EFBFBD><CDA8>
|
||
|
||
|
||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> brake_timer <20>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Ϊ<EFBFBD>ź<EFBFBD>ID
|
||
timerInit(&can_timer_interface1);
|
||
timerInit(&can_timer_interface2);
|
||
|
||
subscribe(&can_timer_interface1, canSendAll);
|
||
subscribe(&can_timer_interface2, canInterfaceTimerProcess);
|
||
|
||
subscribe(&un_motor_output1, processMotorOutput1);
|
||
subscribe(&un_motor_output2, processMotorOutput2);
|
||
|
||
subscribe(&un_inf_can_kgf_output1, processKgfOutput1);
|
||
subscribe(&un_inf_can_kgf_output2, processKgfOutput2);
|
||
subscribe(&un_wheel_wpeed_output, processWheelSpeedOutput);
|
||
subscribe(&un_h_bridge_output, processHBridgeOutput);
|
||
subscribe(&un_gather_output, processUnGatherOutput);
|
||
subscribe(&un_sw_sample, canInterfaceInput); // <20><>ͣ<EFBFBD><CDA3><EFBFBD>ء<EFBFBD><D8A1><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־
|
||
subscribe(&un_ultrasonic_output1, processUltrasonicOutput); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// subscribe(&un_h_bridge_output2, processHBridgeOutput2);
|
||
// subscribe(&un_lifter_output, processLifterOutput);
|
||
|
||
// subscribe(&un_sdo_output1, processSdoOutput1);
|
||
// subscribe(&un_sdo_output2, processSdoOutput2);
|
||
// subscribe(&un_sdo_output3, processSdoOutput3);
|
||
// subscribe(&un_sdo_output4, processSdoOutput4);
|
||
// subscribe(&un_sdo_output5, processSdoOutput5);
|
||
// subscribe(&un_sdo_output7, processSdoOutput7);
|
||
|
||
timerStart(&can_timer_interface1,1,1);//1ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
|
||
timerStart(&can_timer_interface2,100,1);//100ms<6D><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||
|
||
printf( "canInterface: initial OK %d\n",getCurrentTime());
|
||
}
|
||
|
||
|
||
|