⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsp28_ecan.c

📁 tms320f2812 CAN总线通信程序
💻 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.CANRIOC.all;
	
	ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
	ECanaShadow.CANRIOC.bit.RXFUNC = 1;
	ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.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;
	
	/*数据长度 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 = 9;
	/*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;
	ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
	ECanaShadow.CANMC.bit.STM = 1;
	ECanaShadow.CANMC.bit.SCM = 1;
	ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
	EDIS;
	
	#if	CAN_INT
	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;
	#endif
}	

//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -