Davinci工程CAN模块讲解

CAN模块是用来配置CAN Driver的,里面有CanConfigSet是用来配置驱动内容的,CanGeneral配置参数。涉及四个文件Can_Lcfg.c/Can_Lcfg.h/Can_Cfg.c/Can_Cfg.h

CanConfigSet

CanControllers

CAN控制器,我们这里的CAN控制器只有一个,名字是默认的。

里面能够选择的就是用哪个CAN控制器,选完之后下面的基地址会改变,这个控制器是指我们MCU里面的CAN外设。

CAN控制器对应的内容是DemoFbl\Appl\GenData\Can_Lcfg.c里面,主要改变的就是基地址。

CONST(Can_ControllerConfigType, CAN_CONST) Can_ControllerConfig[1] = {  /* PRQA S 1514, 1533 */  /* MD_CSL_ObjectOnlyAccessedOnce */
    /* Index    BaseAddress  CanControllerDefaultBaudrate  TxPollingMask1  CanControllerDefaultBaudrateIdx  InterruptMask1  MailboxRxBasicEndIdx                                                                                                                                           MailboxRxBasicLength                                                                                                                                           MailboxRxBasicStartIdx                                                                                                                                           MailboxTxBasicEndIdx                                                                                                                                           MailboxTxBasicLength                                                                                                                                           MailboxTxBasicStartIdx                                                                                                                                           MailboxUnusedEndIdx                                                                                                                                          MailboxUnusedLength                                                                                                                                          MailboxUnusedStartIdx                                                                                                                                          NumberOfFilters  NumberOfFullConfigurableFilters  NumberOfMaxMailboxes  RFFN   RxBasicHwStart  RxBasicHwStop  RxFullHwStart  RxFullHwStop  TxBasicHwStart  TxBasicHwStop  TxFullHwStart  TxFullHwStop  UnusedHwStart  UnusedHwStop        Comment                         Referable Keys */
  { /*     0 */ 0x40024000u,                         500u,        0x0100u,                              0u,          0x00u,                   2u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                     1u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                     0u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                  4u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                  2u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                    2u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,           0x08u,                           0x08u,                0x20u, 0x00u,             0u,            1u,            8u,           8u,             8u,            9u,            9u,           9u,            1u,          32u }   /* [CT_HSCAN_bce71fc0] */  /* [/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0] */
};

发送和接收处理可以选择为轮询或者中断

/* Interrupt / Polling */
#define CAN_TX_PROCESSING                    CAN_POLLING   /* CAN318_Conf */
#define CAN_RX_PROCESSING                    CAN_POLLING   /* CAN317_Conf */
#define CAN_BUSOFF_PROCESSING                CAN_POLLING   /* CAN314_Conf */
#define CAN_WAKEUP_PROCESSING                CAN_POLLING   /* CAN319_Conf */

CanControllerBaudrateConfigs

里面只有一个CanControllerBaudrateConfig,包含CAN控制器的位时序相关配置参数,这些参数熟悉CAN通讯的基本一眼就能看出来,就是个波特率时钟、波特率分频、波特率和采样点、采样模式。TASD Value是发送仲裁延迟。

对应的内容是DemoFbl\Appl\GenData\Can_Lcfg.c里面的,这里的值就是上面配置的数值,能够一一对应的,查一下芯片规格书就行,这里就不再赘述了。

定义基地址、波特率、

#define CAN_START_SEC_CONST_UNSPECIFIED
/*lint -save -esym(961, 19.1) */
#include "MemMap.h"  /* PRQA S 5087 */  /* MD_MSR_MemMap */
/*lint -restore */
CONST(Can_ControllerConfigType, CAN_CONST) Can_ControllerConfig[1] = {  /* PRQA S 1514, 1533 */  /* MD_CSL_ObjectOnlyAccessedOnce */
    /* Index    BaseAddress  CanControllerDefaultBaudrate  TxPollingMask1  CanControllerDefaultBaudrateIdx  InterruptMask1  MailboxRxBasicEndIdx                                                                                                                                           MailboxRxBasicLength                                                                                                                                           MailboxRxBasicStartIdx                                                                                                                                           MailboxTxBasicEndIdx                                                                                                                                           MailboxTxBasicLength                                                                                                                                           MailboxTxBasicStartIdx                                                                                                                                           MailboxUnusedEndIdx                                                                                                                                          MailboxUnusedLength                                                                                                                                          MailboxUnusedStartIdx                                                                                                                                          NumberOfFilters  NumberOfFullConfigurableFilters  NumberOfMaxMailboxes  RFFN   RxBasicHwStart  RxBasicHwStop  RxFullHwStart  RxFullHwStop  TxBasicHwStart  TxBasicHwStop  TxFullHwStart  TxFullHwStop  UnusedHwStart  UnusedHwStop        Comment                         Referable Keys */
  { /*     0 */ 0x40025000u,                         500u,        0x0100u,                              0u,          0x00u,                   2u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                     1u  /* RX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                   1u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                     0u  /* TX_BASICCAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                  4u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                  2u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,                    2u  /* UNUSED_CAN_TYPE/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0 (DefRef: /MICROSAR/Can_ImxFlexcan3/Can/CanConfigSet/CanController) */,           0x08u,                           0x08u,                0x10u, 0x00u,             0u,            1u,            8u,           8u,             8u,            9u,            9u,           9u,            1u,          16u }   /* [CT_HSCAN_bce71fc0] */  /* [/ActiveEcuC/Can/CanConfigSet/CT_HSCAN_bce71fc0] */
};
#define CAN_STOP_SEC_CONST_UNSPECIFIED
/*lint -save -esym(961, 19.1) */
#include "MemMap.h"  /* PRQA S 5087 */  /* MD_MSR_MemMap */
/*lint -restore */

定义采样点

/**********************************************************************************************************************
  Can_InitObject
**********************************************************************************************************************/
/** 
  \var    Can_InitObject
  \brief  This table contains information about the init object: e.g. bustiming register contents.
  \details
  Element     Description
  CBT     
  Control1
*/ 
#define CAN_START_SEC_CONST_UNSPECIFIED
/*lint -save -esym(961, 19.1) */
#include "MemMap.h"  /* PRQA S 5087 */  /* MD_MSR_MemMap */
/*lint -restore */
CONST(Can_InitObjectType, CAN_CONST) Can_InitObject[1] = {  /* PRQA S 1514, 1533 */  /* MD_CSL_ObjectOnlyAccessedOnce */
    /* Index    CBT          Control1           Comment */
  { /*     0 */ 0x812010C2u, 0x09322004u }   /* ["CT_HSCAN_bce71fc0 - CanControllerBaudrateConfig", init object index: 0] */
};
#define CAN_STOP_SEC_CONST_UNSPECIFIED
/*lint -save -esym(961, 19.1) */
#include "MemMap.h"  /* PRQA S 5087 */  /* MD_MSR_MemMap */
/*lint -restore */

CanFilterMask

是描述CAN标识符基于硬件过滤的掩码,receiveID & Mask == Code & Mask时过滤,一般不会过滤,都是0。

如果你使用了,就会体现在DemoFbl\Appl\GenData\Can_Lcfg.c的Can_InitBasicCan里面。

CanHardwareObjects

这里面没什么好配置的,就是默认一个发送对象和一个接收对象。

拿发送对象举个例子,CanFdPaddingValue是填充数据,CanHandleType可以选择基础CAN还是full CAN。CanIdType选择CAN ID是标准、扩展还是混合的,由于我们这里是乘用车,就只需要基础的。CanIdValue也就是CAN掩码。CanObjectType只是方向是发送还是接收。

CanGeneral

CAN硬件参数配置,处理Can_MainFunction_Busoff(处理总线关闭)、Can_MainFunction_Mode(状态迁移)、Can_MainFunction_Wakeup(总线唤醒)函数的调用周期。

Module Internal Behavior

这里可以看到CAN模块生成的接口,在 BSW\Can\Can.c里面可以看到。

还可以看具体的调用周期,要改的话再别的地方改,下面会提到。

通讯配置

由于CAN是通讯,还需要在这里进行配置。

跟CAN模块相关的就是Driver了

CanMultiplexedTransmission多路传输是否支持

CanHardwareCancellation是否支持硬件取消

CanUseNestedCANInterrupts不同控制器的CAN中断是否可以互相中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值