RTE_CAN.c 4.47 KB
Newer Older
hu's avatar
hu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include "Rscan.h"
#include "GPIO.h"
#include "dr7f701441.dvf.h"

#include "RTE_CAN.h"
#include "CAN_Communication_Matrix.h"
#include "CAN_Lib.h"
//#include "CAN_Signal_Tx.h"
#include "AlarmGeneralFilie.h"
#include "Diag_ID_Def.h"
#include "DoCAN_ISO15765.h"

#include "PowerManagement.h"
#include "UDS_Common.h"

#include "Watchdog.h"
hu's avatar
hu committed
17
#include "RSCAN.h"
hu's avatar
hu committed
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

static uint16_t Can_Init_Lock = 0U;

void Can_Lock_Clr(void)
{
    Can_Init_Lock = 0u;
}

/***Middle***/
void Can_Init(void)
{
    /* filter 变量声明 */
    uint32_t IDFilterNum;

    uint8_t CH0_IDFilterNum;
    uint32_t CANLLCCh0NMIDRange[2];
    uint32_t CANLLCCh0MsgIDList[ID_TOTAL_MAX + 2u];
    uint32_t CANLLCCh0OwnIDList[4];

    uint32_t i;
hu's avatar
hu committed
38 39 40 41 42 43 44
    RSCAN0_Config_st_t CANLLCCh0Filter;

    CANLLCCh0Filter.stRSCANCh0.u32RSCANChEn = 1u;       /*通道是否使能*/
    CANLLCCh0Filter.stRSCANCh0.enRSCANChBps = RSCAN_Baud_Rate_500K;       /*通道波特率*/
    CANLLCCh0Filter.stRSCANCh0.u32RSCANChRuleSize = CANFD0_CH0_RX_RULE_SIZE; /*通道接收规则条数*/
    CANLLCCh0Filter.stRSCANCh0.pfnRSCANConfirmCallBack = 0u;  /*发送确认*/
    CANLLCCh0Filter.stRSCANCh0.pfnRSCANAbortConfirmCallBack = 0u; /*发送中止确认*/
45
    CANLLCCh0Filter.stRSCANCh0.pfnRSCANReadMsgCallBack = Can_Read_Msg; /*接收完成*/
hu's avatar
hu committed
46 47 48 49 50 51 52 53 54 55 56 57 58

    CANLLCCh0Filter.stRSCANCh1.u32RSCANChEn = 0u;       /*通道是否使能*/
    CANLLCCh0Filter.stRSCANCh1.enRSCANChBps = RSCAN_Baud_Rate_500K;       /*通道波特率*/
    CANLLCCh0Filter.stRSCANCh1.u32RSCANChRuleSize = CANFD0_CH1_RX_RULE_SIZE; /*通道接收规则条数*/
    CANLLCCh0Filter.stRSCANCh1.pfnRSCANConfirmCallBack = 0u;  /*发送确认*/
    CANLLCCh0Filter.stRSCANCh1.pfnRSCANAbortConfirmCallBack = 0u; /*发送中止确认*/
    CANLLCCh0Filter.stRSCANCh1.pfnRSCANReadMsgCallBack = 0u; /*接收完成*/

    CANLLCCh0Filter.stRSCANCh2.u32RSCANChEn = 1u;       /*通道是否使能*/
    CANLLCCh0Filter.stRSCANCh2.enRSCANChBps = RSCAN_Baud_Rate_500K;       /*通道波特率*/
    CANLLCCh0Filter.stRSCANCh2.u32RSCANChRuleSize = CANFD0_CH2_RX_RULE_SIZE; /*通道接收规则条数*/
    CANLLCCh0Filter.stRSCANCh2.pfnRSCANConfirmCallBack = 0u;  /*发送确认*/
    CANLLCCh0Filter.stRSCANCh2.pfnRSCANAbortConfirmCallBack = 0u; /*发送中止确认*/
hu's avatar
hu committed
59
    CANLLCCh0Filter.stRSCANCh2.pfnRSCANReadMsgCallBack = Can_Read_Msg2; /*接收完成*/
hu's avatar
hu committed
60

hu's avatar
hu committed
61 62
    CANSTB_OUT  = 1U; //CANSTB_OUT
    CANSTB2_OUT = 1U; //CANSTB2_OUT
hu's avatar
hu committed
63 64

    RSCAN0_CH_Init(CANFD_RX_RULE_TABLE_LIST, &CANLLCCh0Filter);
hu's avatar
hu committed
65

hu's avatar
hu committed
66 67
    CANSTB_OUT  = 0U; //CANSTB_OUT
    CANSTB2_OUT = 0U; //CANSTB2_OUT
hu's avatar
hu committed
68
}
hu's avatar
hu committed
69

hu's avatar
hu committed
70 71 72
void Can_DeInit(void)
{
}
hu's avatar
hu committed
73

hu's avatar
hu committed
74 75
uint8_t Can_Write(_CAN_Msg *Msg)
{
hu's avatar
hu committed
76
    uint8_t i = 0u;
hu's avatar
hu committed
77
    CAN_Frame_st_t CANFrame;
hu's avatar
hu committed
78

hu's avatar
hu committed
79 80 81 82
    for (i = 0; i < 8u; i++)
    {
        CANFrame.unCANData.u8CANData[i] = Msg->Msg[i];
    }
hu's avatar
hu committed
83

hu's avatar
hu committed
84
    CANFrame.u32CANID = Msg->MsgID;
hu's avatar
hu committed
85
    CANFrame.u8CANLEN = Msg->MsgDLC;
hu's avatar
hu committed
86
    CANFrame.u8CANFrameIDE = Msg->MsgStd;
hu's avatar
hu committed
87 88


hu's avatar
hu committed
89 90 91
    if (Msg->MsgPro < RSCAN_CHANNEL_BUF_2)
    {
        RSCAN0_CH2_Set_TXBUF_Data(Msg->MsgPro, &CANFrame);
hu's avatar
hu committed
92
    }
hu's avatar
hu committed
93 94 95 96 97 98 99 100 101
    else if (Msg->MsgPro < RSCAN_CHANNEL_BUF_MAX)
    {
        RSCAN0_CH0_Set_TXBUF_Data(Msg->MsgPro, &CANFrame);
    }
    else if ((Msg->MsgPro >= 25u) && (Msg->MsgPro <= 27u))
    {
        RSCAN0_CH2_Set_FIFO0_Data(&CANFrame);
    }
    else
hu's avatar
hu committed
102
    {
hu's avatar
hu committed
103
        RSCAN0_CH0_Set_FIFO0_Data(&CANFrame);
hu's avatar
hu committed
104
    }
hu's avatar
hu committed
105

hu's avatar
hu committed
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    return 0;
}

void Can_Sleep_Fun(void)
{
}

void Can_SleepController_Fun(void)
{
}

void Can_Wakeup_Fun(void)
{
}

hu's avatar
hu committed
121
/*诊断发送终止----20220320----*/
hu's avatar
hu committed
122 123
void Can_Uds_Abort(void)
{
hu's avatar
hu committed
124 125 126
    //CANFD_SetTX_Abort();
    RSCAN0_CH2_Abort(RSCAN_CHANNEL_BUF_0);
    RSCAN0_CH2_Abort(RSCAN_CHANNEL_BUF_1);
hu's avatar
hu committed
127 128 129 130 131 132 133 134 135 136 137 138 139
}

void Can_Abort_All(void)
{
}

/*****Lower*******/
void Can_Read_Msg(uint32_t m_id, uint8_t m_dlc, uint8_t m_Msg[])
{
    ReceivedMsg(m_id, m_dlc);

    Co_Can_Buff_Set(Co_Can_ConvertSubID(m_id), m_dlc, m_Msg);

hu's avatar
hu committed
140 141 142 143 144 145 146 147 148 149 150 151
    //if ((m_id == DIAG_ID_Rx_FUN) || (m_id == DIAG_ID_Rx_PHY))
    //{
    //    DoCAN_L_Data_Indication(m_id, m_dlc, m_Msg);
    //}
}

void Can_Read_Msg2(uint32_t m_id, uint8_t m_dlc, uint8_t m_Msg[])
{
    ReceivedMsg(m_id, m_dlc);

    //Co_Can_Buff_Set(Co_Can_ConvertSubID(m_id), m_dlc, m_Msg);

hu's avatar
hu committed
152 153 154 155 156 157 158 159 160 161 162 163 164
    if ((m_id == DIAG_ID_Rx_FUN) || (m_id == DIAG_ID_Rx_PHY))
    {
        DoCAN_L_Data_Indication(m_id, m_dlc, m_Msg);
    }
}

void Can_Confirm(uint32_t Identifier, uint8_t TransferStatus)
{
}


void CAN_BUSOFF_Recover(void)
{
hu's avatar
hu committed
165 166
    //CH0_BusOff_Recovery();
    RSCAN0_CH0_Busoff_Recover();
hu's avatar
hu committed
167
}