AUTOSAR的COM PDU CANIF CAN层的发送和接收报文的函数
LAYER | TX | RX |
---|---|---|
COM | Com_SendSignal | Com_RxIndication Com_ReceiveSignal |
PduR | MCan_SetMessage Com_TriggerIPDUSend | PduR_RxIndication |
CANIF | CanIf_Transmit | CanIf_RxIndication CanIf_ReadRxPduData |
CAN | Can_Write | Can_17_McmCan_lReceiveHandler |
void MCan_SetMessage(MCAN_Node_T canode, uint32 canid, uint8* payload)
{
uint8 msg;
uint8 idx;
MCAN_PduCfg_T* can_pdu;
can_pdu = MCAN_TxCtrl[canode].pducfg_ptr;
for (msg = 0; msg < MCAN_TxCtrl[canode].num_msgs; msg++)
{
//in Can_IdType id, bit 29~31 are to distiguish externed id, standard id and canfd id.
if ((can_pdu[msg].can_id & 0x1FFFFFFF) == canid)
{
/* Enter critical session */
SuspendOSInterrupts();
for (idx = 0; idx < MCAN_PAYLOAD_LEN; idx++)
{
can_pdu[msg].SduDataPtr[idx] = payload[idx];
}
/* Exit critical session */
ResumeOSInterrupts();
break;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
void MCan_GetMessage(MCAN_Node_T canode, uint32 canid, uint8* payload)
{
uint8 msg;
uint8 idx;
MCAN_PduCfg_T* can_pdu;
can_pdu = MCAN_RxCtrl[canode].pducfg_ptr;
for (msg = 0; msg < MCAN_RxCtrl[canode].num_msgs; msg++)
{
if (can_pdu[msg].can_id == (canid& 0x1FFFFFFF))
{
/* Enter critical session */
SuspendOSInterrupts();
for (idx = 0; idx < MCAN_PAYLOAD_LEN; idx++)
{
payload[idx] = can_pdu[msg].SduDataPtr[idx];
}
/* Exit critical session */
ResumeOSInterrupts();
break;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
评论记录:
回复评论: