环境:
IAR + ASF3.5(Atmel的软件框架)
前言:
使用ATSAMV70Q20(应该其他V系列或E系列都有这坑)之前,要弄清楚这个芯片版本是A版本还B版本(至少丝印上看不出来),可以通过chipid_read()来确认芯片是不是B版本,两个版本之间的时钟树配置不同,会影响到CAN通讯的速率配置,无法得到准确的速率就会无法正常通讯
初始化:
1、引脚复用配置(使用pio_set_peripheral配置对应功能),初始化自定义的接收FIFO等
2、控制参数初始化
3、CAN模块配置
4、设置默认的过滤器
5、启动
相关的配置结构体,CanCfg为固定的配置项,包含了基地址,中断等信息;CanCtrl为运行控制相关参数,在后续中进行初始化
typedef struct
{
Mcan * CANBase; ///< CAN基地址
uint32_t IRQ_Type; ///< 中断类型
uint32_t IRQ_Priority; ///< 中断优先级
uint32_t DefaultExtendFilterID; ///< 接收指定扩展帧数据的ID
uint32_t DefaultExtendFilterMask; ///< ID掩码
enum mcan_interrupt_source IntSource; ///< 启用的中断来源
} CanConfig_t; /* Can固定配置 */
static const CanConfig_t CanCfg =
{
.CANBase = MCAN0,
.IRQ_Type = MCAN0_INT0_IRQn,
.IRQ_Priority = 5,
.DefaultExtendFilterID = 0xFFFF,
.DefaultExtendFilterMask = 0xFFFF,
.IntSo