dsp28_ecan.c
来自「TMS320F2812 的 CAN 总线程序 变速箱电液换档程序的一个实例 」· C语言 代码 · 共 171 行
C
171 行
//
// TMDX ALPHA RELEASE
// Intended for product evaluation purposes
//
//###########################################################################
//
// FILE: DSP28_ECan.c
//
// TITLE: DSP28 Enhanced CAN Initialization & Support Functions.
//
//###########################################################################
//
// Ver | dd mmm yyyy | Who | Description of changes
// =====|=============|======|===============================================
// 0.55| 06 May 2002 | L.H. | EzDSP Alpha Release
// 0.56| 20 May 2002 | L.H. | No change
// 0.57| 27 May 2002 | L.H. | No change
//###########################################################################
#include "DSP28_Device.h"
//---------------------------------------------------------------------------
// InitECan:
//---------------------------------------------------------------------------
// This function initializes to a known state.
//
void InitECan(void)
{
struct ECAN_REGS ECanaShadow;
int32 mid;
/*注:EALLOW保护的寄存器如下CANTIOC; CANRIOC; CANMC[15..9] & MCR[7..6];
CANBTC; CANGIM; MIM[31..0]; TSC[31..0]; IOCONT1[3]; IOCONT2[3]。*/
EALLOW;
ECanaRegs.CANTIOC.all = 0x08;
ECanaRegs.CANRIOC.all = 0x08;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 1);
EDIS;
EALLOW;
/*(BRPREG+1)=10 feeds a 15MHz CAN clock*/
ECanaShadow.CANBTC.bit.BRP = 39;
/*150/10=15*/
ECanaShadow.CANBTC.bit.TSEG2 = 2;
ECanaShadow.CANBTC.bit.TSEG1 = 10;
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 0;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 0);
EDIS;
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.SUSP = 1;
ECanaShadow.CANMC.bit.MBNR = 0;
//ECanaShadow.CANMC.bit.PDR = 0;
//ECanaShadow.CANMC.bit.DBO = 0;
ECanaShadow.CANMC.bit.WUBA = 0;
ECanaShadow.CANMC.bit.CDR = 0;
ECanaShadow.CANMC.bit.ABO = 0;
ECanaShadow.CANMC.bit.SRES = 0;
ECanaShadow.CANMC.bit.STM = 0;//NORMAL MODE
ECanaShadow.CANMC.bit.SCM = 1;//SCM IS SCB
ECanaShadow.CANMC.bit.DBO = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
ECanaRegs.CANRMP.all = 0xFFFFFFFF;
EALLOW;
ECanaRegs.CANMIM.all = 0xFFFFFFFF;
ECanaRegs.CANMIL.all = 0;
ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
ECanaRegs.CANGIF1.all = 0xFFFFFFFF;
ECanaRegs.CANGIM.bit.I0EN = 1;
ECanaRegs.CANGIM.bit.I1EN = 1;
ECanaRegs.CANGIM.all = 0x3ff07;
EDIS;
/*发送邮箱的ID号*/
ECanaRegs.CANME.all = 0;
ECanaRegs.CANGAM.bit.AMI = 0;
mid = 0x181;
mid = mid<<18;
ECanaMboxes.MBOX0.MID.all = mid;//0x80000181;
mid = 0x281;
mid = mid<<18;
ECanaMboxes.MBOX1.MID.all = mid;
mid = 0x381;
mid = mid<<18;
ECanaMboxes.MBOX2.MID.all = mid;
mid = 0x481;
mid = mid<<18;
ECanaMboxes.MBOX3.MID.all = mid;
/*接收邮箱的ID号*/
ECanaMboxes.MBOX31.MID.all = 0x8CF00400; //0x0CF00400 发动机转速
ECanaMboxes.MBOX31.MDRL.all = 0;
ECanaMboxes.MBOX31.MDRH.all = 0;
ECanaMboxes.MBOX30.MID.all = 0x8CF00300; //0CF00300 发动机负载率,油门位置
ECanaMboxes.MBOX30.MDRL.all = 0;
ECanaMboxes.MBOX30.MDRH.all = 0;
ECanaMboxes.MBOX29.MID.all = 0x98FEEE00; //18FEEE00 冷却水温
ECanaMboxes.MBOX29.MDRL.all = 0;
ECanaMboxes.MBOX29.MDRH.all = 0;
ECanaMboxes.MBOX28.MID.all = 0x98FEEF00; //18FEEF00 机油压力
ECanaMboxes.MBOX28.MDRL.all = 0;
ECanaMboxes.MBOX28.MDRH.all = 0;
ECanaMboxes.MBOX27.MID.all = 0x98FEF700; //18FEF700 电池电压
ECanaMboxes.MBOX27.MDRL.all = 0;
ECanaMboxes.MBOX27.MDRH.all = 0;
//mid = 0x184;
//mid = mid<<18;
//ECanaMboxes.MBOX31.MID.all = mid;
/*0~15 is TX,16~31 is RX*/
ECanaRegs.CANMD.all = 0xFFFF0000;
/*数据长度 8个BYTE*/
ECanaMboxes.MBOX0.MCF.bit.DLC = 8;
ECanaMboxes.MBOX1.MCF.bit.DLC = 8;
ECanaMboxes.MBOX2.MCF.bit.DLC = 8;
ECanaMboxes.MBOX3.MCF.bit.DLC = 8;
ECanaMboxes.MBOX31.MCF.bit.DLC = 8;
ECanaMboxes.MBOX30.MCF.bit.DLC = 8;
ECanaMboxes.MBOX29.MCF.bit.DLC = 8;
ECanaMboxes.MBOX28.MCF.bit.DLC = 8;
ECanaMboxes.MBOX27.MCF.bit.DLC = 8;
/*没有远方应答帧被请求*/
ECanaMboxes.MBOX0.MCF.bit.RTR = 0;
ECanaMboxes.MBOX1.MCF.bit.RTR = 0;
ECanaMboxes.MBOX2.MCF.bit.RTR = 0;
ECanaMboxes.MBOX3.MCF.bit.RTR = 0;
ECanaMboxes.MBOX31.MCF.bit.RTR = 0;
ECanaMboxes.MBOX30.MCF.bit.RTR = 0;
ECanaMboxes.MBOX29.MCF.bit.RTR = 0;
ECanaMboxes.MBOX28.MCF.bit.RTR = 0;
ECanaMboxes.MBOX27.MCF.bit.RTR = 0;
/*邮箱使能*/
ECanaRegs.CANME.all = 0xF800000F;
//中断方式时以下4行放开
/*ECanaRegs.CANTRS.bit.TRS0 = 1;
ECanaRegs.CANTRS.bit.TRS1 = 1;
ECanaRegs.CANTRS.bit.TRS2 = 1;
ECanaRegs.CANTRS.bit.TRS3 = 1;*/
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?