AUTOSAR CANIF驱动中间层接口分析:canif.c/can.c
1、驱动初始化
在Can_Init关中断处理中安装CAN线中断:Irq_Save——————Irq_Restore
StartupTask->CanIf_InitController->Can_InitController->Can_Init->ISR_INSTALL_ISR2("DCAN1Level0",Can1_InterruptHandler,CAN1_LEVEL_0,2,0)->Can1_InterruptHandler,直接封装Can_InterruptHandler
初始化区分Can_GeneralType,中间是一个unit8 CanIndex,定义为一个驱动模块的实例,序号从0开始
2、数据发送:
数据发送看到两种情况,一是通过定时器触发消息队列发送,另一种是直接触发发送例程
A、TASK(SchM_BswService,任务注册)->CanNm_MainFunction_All_Channels->CanNm_MainFunction->CanNm_Internal_TickMessageCycleTime->CanNm_Internal_TransmitMessage->CanIf_Transmit->Can_Write
B、GEN_TASK_HEAD(任务注册)->MainFunctionTask->Com_MainFunctionTx->Com_Internal_TriggerIPduSend->PduR_ComTransmit->PduR_ARC_Transmit->PduR_ARC_RouteTransmit->J1939Tp_Transmit->J1939Tp_Internal_DirectTransmit->Ca