概述
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->CanIf_Transmit->Can_Write->CAN_Transmit
发送数据地址包括uint32_t StdId(between 0 to 0x7FF),uint32_t ExtId(between 0 to 0x1FFFFFFF),可以以一个unit32表示?
3、数据接收:
CAN_ARC_PROCESS_TYPE_INTERRUPT(中断方式):
Can_InterruptHandler->handleRxMsgObject->CanIf_RxIndication->J1939Tp_RxIndication/CanTp_RxIndication/PduR_CanIfRxIndication/CanNm_RxIndication
CAN_ARC_PROCESS_TYPE_POLLING(轮询方式):
GEN_TASK_HEAD(任务注册)->MainFunctionTask->Com_MainFunctionRx-> memcpy(IPdu->ComIPduDeferredDataPtr,IPdu->ComIPduDataPtr,IPdu->ComIPduSize);
未见调用,可能是自定义或者静态配置中断向量表
Can_1_RxIsr->Can_RxIsr->CAN_Receive
最后
以上就是暴躁小蘑菇为你收集整理的AUTOSAR源码分析之一的全部内容,希望文章能够帮你解决AUTOSAR源码分析之一所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复