转载请注明出处:http://blog.youkuaiyun.com/Righthek 谢谢!
对于一般的CAN模块,进行初始化时,最关键的是以下两步:
1、 配置CAN的位时序;
2、 配置CAN的消息报文;
下面,我们来详细分析上面提到的关键两步。
一、初始化步骤:
1、 第一步,进入初始化模式,在CAN控制寄存器中,将Init位置1;
2、 第二步,在CAN控制寄存器中,将CCE位置1;
3、 第三步,等待Init位置1,此步聚为了确保已经进入初始化模式;
4、 第四步,将位时序的值写入到位时序寄存器(BTR)中;
5、 第五步,将CCE和Init位置为0;
6、 第六步,等待清除Init位,此步聚为了确保已经退出初始化模式;
解释完CAN的初始化步骤后,我们来看看代码实现:
我们先初始化一个CAN的位时序常量。
/* CAN Bittiming constants as per D_CAN specs */
static structcan_bittiming_const d_can_bittiming_const = {
.name = D_CAN_DRV_NAME,
.tseg1_min = 1, /* Time segment 1 = prop_seg + phase_seg1 */