天天看点

AUTOSAR MCAL CAN Driver 接口函数

1. 单控制器服务接口函数

(1) Can_Init

初始化函数,输入为CAN模块配置结构体指针,在MCU启动时调用,初始化CAN模块的时钟、波特率、引脚、接收发送邮箱等一系列寄存器。完毕后将CAN控制器的状态由CAN_CS_UNINIT转换为CAN_CS_STOPPED。

(2)Can_SetBaudrate

设置CAN模块某个控制器的波特率,输入为控制器ID和波特率ID,所有波特率要被定义为一个结构体,并分配ID,共波特率切换时调用。

(3)Can_SetControllerMode

转换某个CAN控制器的状态。CAN控制器在初始化完毕后处于STOPPED状态,要调用这个函数转换为STARTED状态后才能参与网络通信。

2. 轮询函数

轮询函数要在应用程序中被周期性调用。

(1)Can_MainFunction_Write

当发送成功确认没有被配置为中断模式时,该函数中会逐个查询当前是否有Hth的报文发送成功,如果有,就会调用下面这个函数一层层向上层报告发送成功:

Hth通常对应一个MO或报文发送邮箱。CanTxPduId、Hth ID和MO ID是一一对应的。

(2)Can_MainFunction_Read

当报文接收没有被配置为中断模式时,该函数会查询当前所有MO或接收报文邮箱是否有报文被成功接收,如果有,就会下面这个函数来向上层报告有报文被接收:

Hrh ID、MO ID或接收报文邮箱ID是一一对应的。

(3)Can_MainFunction_BusOff

当Busoff处理方式没有被配置为中断模式时,该函数会检查CAN 控制器是否处于Busoff状态,如果是,则会报相应的故障,并将CAN控制器状态转换为CAN_CS_STOPPED,并调用下面的函数向上层报告CAN Busoff:

3. Can_Write

Std_ReturnType Can_Write(Can_HwHandleType Hth, const Can_PduType* PduInfo)

typedef struct
{
  PduIdType swPduHandle;
  uint8 length;
  Can_IdType id;
  uint8* sdu;
} Can_PduType;

           

Can_Write函数是供CANIF层发送报文调用的接口,在下面的函数中被调用:

输入参数1 Hth对应着使用哪个MO或发送邮箱进行发送,输入参数2 PduInfoPtr是要发送的内容,包含的参数如代码中的结构体所示,有CAN ID、数据、长度以及PDU ID。在发送该帧报文的时候会把PDU ID和Hrh的对应关系记录下来,在Can_MainFunction_Write函数中进行发送成功确认的时候,要使用相同的对应关系。

4. Can_Irq.c

Can_Irq.c文件中是CAN接收、发送和Busoff中断处理函数,如果定义CAN接收、发送成功确认和Busoff为中断模式,则上面的三个轮询函数不再起作用,而是在中断中调用CANIF层的相应函数进行处理。

5.Can_Cfg.c/h

Can_Cfg.c/h文件是CAN驱动配置文件,在配置文件中药配置CAN控制器的属性、波特率、Hrh、Hth等信息,具体配置内容参考《AUTOSAR_SWS_CANDriver》中10.2章节。

本文只是简要梳理一下MCAL CAN Driver中的常用API,不全面,详细内容请参考《AUTOSAR_SWS_CANDriver》。

继续阅读