www.pudn.com > TMS320C2812-CAN.rar > DSP28_ECan.c


// 
//      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; 
	EALLOW; 
	ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; 
	ECanaShadow.CANTIOC.bit.TXFUNC = 1; 
	ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; 
	 
	ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; 
	ECanaShadow.CANRIOC.bit.RXFUNC = 1; 
	ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; 
	EDIS; 
	 
	EALLOW; 
	ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; 
	//ECanaShadow.CANMC.bit.STM = 0;                    //自检测 
	ECanaShadow.CANMC.bit.SCM = 1; 
	ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; 
	EDIS; 
	 
	ECanaRegs.CANME.all = 0; 
	 
	/*发送邮箱的ID号*/ 
	ECanaMboxes.MBOX0.MID.all = 0x9555AAA0; 
	ECanaMboxes.MBOX1.MID.all = 0x9555AAA1; 
	ECanaMboxes.MBOX2.MID.all = 0x9555AAA2; 
	ECanaMboxes.MBOX3.MID.all = 0x9555AAA3; 
	ECanaMboxes.MBOX4.MID.all = 0x9555AAA4; 
	ECanaMboxes.MBOX5.MID.all = 0x9555AAA5; 
	ECanaMboxes.MBOX6.MID.all = 0x9555AAA6; 
	ECanaMboxes.MBOX7.MID.all = 0x9555AAA7; 
	ECanaMboxes.MBOX8.MID.all = 0x9555AAA8; 
	ECanaMboxes.MBOX9.MID.all = 0x9555AAA9; 
	ECanaMboxes.MBOX10.MID.all = 0x9555AAAA; 
	ECanaMboxes.MBOX11.MID.all = 0x9555AAAB; 
	ECanaMboxes.MBOX12.MID.all = 0x9555AAAC; 
	ECanaMboxes.MBOX13.MID.all = 0x9555AAAD; 
	ECanaMboxes.MBOX14.MID.all = 0x9555AAAE; 
	ECanaMboxes.MBOX15.MID.all = 0x9555AAAF; 
	 
 /*接收邮箱的ID号*/ 
	//ECanaMboxes.MBOX16.MID.all = 0x9555AAA0; 
	//ECanaMboxes.MBOX17.MID.all = 0x9555AAA1; 
	//ECanaMboxes.MBOX18.MID.all = 0x9555AAA2; 
	//ECanaMboxes.MBOX19.MID.all = 0x9555AAA3; 
	//ECanaMboxes.MBOX20.MID.all = 0x9555AAA4; 
	//ECanaMboxes.MBOX21.MID.all = 0x9555AAA5; 
	//ECanaMboxes.MBOX22.MID.all = 0x9555AAA6; 
	//ECanaMboxes.MBOX23.MID.all = 0x9555AAA7; 
	//ECanaMboxes.MBOX24.MID.all = 0x9555AAA8; 
	//ECanaMboxes.MBOX25.MID.all = 0x9555AAA9; 
	//ECanaMboxes.MBOX26.MID.all = 0x9555AAAA; 
	//ECanaMboxes.MBOX27.MID.all = 0x9555AAAB; 
	//ECanaMboxes.MBOX28.MID.all = 0x9555AAAC; 
	//ECanaMboxes.MBOX29.MID.all = 0x9555AAAD; 
	//ECanaMboxes.MBOX30.MID.all = 0x9555AAAE; 
	//ECanaMboxes.MBOX31.MID.all = 0x9555AAAF; 
	 
	/*0~15 is TX,16~31 is RX*/ 
	ECanaRegs.CANMD.all = 0xFFFF0000; 
	 
	/*32个邮箱使能*/ 
	ECanaRegs.CANME.all = 0xFFFFFFFF; 
	 
	ECanaRegs.CANGAM.bit.AMI=1; 
	 
	/*数据长度 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.MBOX4.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX5.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX6.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX7.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX8.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX9.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX10.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX11.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX12.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX13.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX14.MCF.bit.DLC = 8; 
	ECanaMboxes.MBOX15.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX16.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX17.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX18.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX19.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX20.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX21.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX22.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX23.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX24.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX25.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX26.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX27.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX28.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX29.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX30.MCF.bit.DLC = 8; 
	//ECanaMboxes.MBOX31.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.MBOX4.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX5.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX6.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX7.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX8.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX9.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX10.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX11.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX12.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX13.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX14.MCF.bit.RTR = 0; 
	ECanaMboxes.MBOX15.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX16.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX17.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX18.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX19.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX20.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX21.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX22.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX23.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX24.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX25.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX26.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX27.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX28.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX29.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX30.MCF.bit.RTR = 0; 
	//ECanaMboxes.MBOX31.MCF.bit.RTR = 0; 
	 
	ECanaMboxes.MBOX0.MDRL.all = 0x9555AAA0; 
	ECanaMboxes.MBOX0.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX1.MDRL.all = 0x9555AAA1; 
	ECanaMboxes.MBOX1.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX2.MDRL.all = 0x9555AAA2; 
	ECanaMboxes.MBOX2.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX3.MDRL.all = 0x9555AAA3; 
	ECanaMboxes.MBOX3.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX4.MDRL.all = 0x9555AAA4; 
	ECanaMboxes.MBOX4.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX5.MDRL.all = 0x9555AAA5; 
	ECanaMboxes.MBOX5.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX6.MDRL.all = 0x9555AAA6; 
	ECanaMboxes.MBOX6.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX7.MDRL.all = 0x9555AAA7; 
	ECanaMboxes.MBOX7.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX8.MDRL.all = 0x9555AAA8; 
	ECanaMboxes.MBOX8.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX9.MDRL.all = 0x9555AAA9; 
	ECanaMboxes.MBOX9.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX10.MDRL.all = 0x9555AAAA; 
	ECanaMboxes.MBOX10.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX11.MDRL.all = 0x9555AAAB; 
	ECanaMboxes.MBOX11.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX12.MDRL.all = 0x9555AAAC; 
	ECanaMboxes.MBOX12.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX13.MDRL.all = 0x9555AAAD; 
	ECanaMboxes.MBOX13.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX14.MDRL.all = 0x9555AAAE; 
	ECanaMboxes.MBOX14.MDRH.all = 0x89ABCDEF; 
	 
	ECanaMboxes.MBOX15.MDRL.all = 0x9555AAAF; 
	ECanaMboxes.MBOX15.MDRH.all = 0x89ABCDEF; 
	 
	EALLOW; 
	/*邮箱屏蔽使能*/ 
	ECanaRegs.CANMIM.all = 0xFFFFFFFF; 
	ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; 
	ECanaShadow.CANMC.bit.CCR = 1; 
	ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; 
	EDIS; 
	 
	do 
	{ 
		ECanaShadow.CANES.all = ECanaRegs.CANES.all; 
	}while(ECanaShadow.CANES.bit.CCE != 1); 
	 
	EALLOW; 
	/*(BRPREG+1)=10 feeds a 15MHz CAN clock*/ 
	ECanaShadow.CANBTC.bit.BRP = 94; 
	/*150/10=15*/ 
	ECanaShadow.CANBTC.bit.TSEG2 = 5; 
	ECanaShadow.CANBTC.bit.TSEG1 = 7; 
	ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; 
	 
	ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; 
	ECanaShadow.CANMC.bit.CCR = 0; 
	ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; 
	EDIS; 
	 
	do 
	{ 
		ECanaShadow.CANES.all = ECanaRegs.CANES.all; 
	}while(ECanaShadow.CANES.bit.CCE != 0); 
	 
	EALLOW; 
	ECanaRegs.CANMIM.all = 0xFFFFffff; 
	ECanaRegs.CANMIL.all = 0; 
	ECanaRegs.CANGIF0.all = 0xFFFFFFFF; 
	ECanaRegs.CANGIM.bit.I0EN = 1; 
	ECanaRegs.CANGIM.bit.I1EN = 1; 
	ECanaRegs.CANGIM.all = 0x3ff07; 
	EDIS; 
	PieCtrl.PIEIER9.bit.INTx6 = 1; 
	PieCtrl.PIEIER9.bit.INTx5 = 1; 
 
}	 
 
//=========================================================================== 
// No more. 
//===========================================================================