1.用到某个模块,就需对某个模块进行相应的初始化,设定其我们将要使用的功能。 分成三个部分---- 1)邮箱初始化配置:首先应确定从32个邮箱中选择要配置的目标邮箱,比如配置成发送邮箱或接收邮箱,一般是成对出现的。然后是对靠近的邮箱进行ID号(标识符)的配置,数据长度,优先级的设置,是远程帧还是普通扩展数据帧等。 具体步骤总结如下:第一步在写标识符前必须将所有邮箱屏蔽掉,ECanaRegs.CANME.all=0。(第五步,最后将要用到的邮箱配置好后,使能需要用到的邮箱,比如邮箱0和邮箱16,ECanaRegs.CANME.bit.ME0=1;ECanaRegs.CANME.bit.ME16=1;)第二步:通过向寄存器CANMC的CDR位请求改变数据区,该位允许快速更新数据消息。再第五步的时候,需要将该位写0,CPU请求正常操作。第三步,设置邮箱的ID(标识符,发送邮箱对应的接收邮箱的标识符是一致的,这个需注意),数据方向寄存器配置了发送邮箱还是接收邮箱。数据长度,发送优先级的设置,以及是否有远方应答帧的请求,向邮箱RAM区写数据(这个注意:ECanaboxes.MBOXO.MDRL.all=?ECanaboxes.MBOXO.MDRH.all=?) 2)邮箱初始化之后,就可以对其进行发送或者接收操作啦!前面第一步主要是前奏,现在进入主题。 消息的发送操作,分为五步: 第一步:清除CANTRS发送请求置位寄存器---当邮箱n准备发送时,CPU将TRSn置1,启动发送。就相当于一个开关一样,当数据要被发送时,将开关TRSn闭合,则数据发送出去。上电复位,各位都被清0。接着配置发送响应寄存器CANTA,如果邮箱n中的消息已经发送成功,则相应的TAn将置位。CPU通过向TANTA中的位写1,使其复位。如果已经产生中断,向CANTA寄存器写1,则可以清除中断,向CANTA寄存器写0没有影响。上电后,寄存器所有的位都被清除。 第二步:初始化邮箱,见第一部分。 第三步:设置TRS请求发送标志,请求发送消息 第四步:等待传输响应位置位,邮箱完成发送。(由0置1才能跳出循环等待,这点是关键!!!) 第五步:复位TA和传输标志,需要向相应的寄存器位写1才能清零(这点相当重要,向该位写1才能清零,等待下一次发送!!!)。 3)消息的接收操作,分五步操作 第一步:设置局部接收屏蔽寄存器LAMn,它可以指明哪些标识符位 第二步:初始化邮箱 第三步:等待接收响应标志置位 第四步:CPU读取邮箱中的数据 第五步:复位接收消息挂起标志
|