www.pudn.com > SCIB_RS232.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 "DSP281x_Device.h" 
#include "DSP281x_Examples.h" 
 
 
//--------------------------------------------------------------------------- 
// InitECan:  
//--------------------------------------------------------------------------- 
// This function initializes to a known state. 
// 
void InitECan(void) 
{ 
	EALLOW; 
	//Disable Watchdog 
	SysCtrlRegs.WDCR = 0x006f ; 
	//Enable CAN Clock 
	SysCtrlRegs.PCLKCR.bit.ECANENCLK = 1 ;  
	//Set PLL MultiPrameter 
	SysCtrlRegs.PLLCR.bit.DIV = 0x0009 ;  
	//Config GPIO leads work at eCAN function 
	GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1 ;   //Init Gpio work at eCAN mode 
	GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1 ;   //Init Gpio work at eCAN mode 
	//Config eCAN RX & TX 
	ECanaRegs.CANTIOC.bit.TXFUNC = 1 ; 
	ECanaRegs.CANRIOC.bit.RXFUNC = 1 ; 
 
	//Init MCF Field 0 
	ECanaMboxes.MBOX0.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX1.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX2.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX3.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX4.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX5.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX6.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX7.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX8.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX9.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX10.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX11.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX12.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX13.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX14.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX15.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX16.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX17.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX18.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX19.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX20.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX21.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX22.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX23.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX24.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX25.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX26.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX27.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX28.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX29.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX30.MCF.all = 0x00000000 ; 
	ECanaMboxes.MBOX31.MCF.all = 0x00000000 ; 
	//Clear CANTA 
	ECanaRegs.CANTA.all = 0xFFFFFFFF ; 
	//Clear CANRMP 
	ECanaRegs.CANRMP.all = 0xFFFFFFFF ; 
	//Clear Interupt Flag 
	ECanaRegs.CANGIF0.all = 0xFFFFFFFF ; 
	ECanaRegs.CANGIF1.all = 0xFFFFFFFF ; 
	//Config Time Prametre 
	//Config eCAN work at Enhunced mode  
	ECanaRegs.CANMC.all = 0x00000000 ; 
	ECanaRegs.CANMC.bit.SCB = 1 ; 
	ECanaRegs.CANMC.bit.DBO = 1 ;               //first receive or transmit LSB 
	ECanaRegs.CANMC.bit.CCR = 1 ; 
	ECanaRegs.CANMC.bit.STM = 1 ; 
	asm(" NOP");  
	asm(" NOP");  
	asm(" NOP");  
 
	//while ( ECanaRegs.CANES.bit.CCE == 0 ){}       //Wait Set CCE = 1 
	ECanaRegs.CANBTC.bit.BRP = 9 ;              //config bit time prametre 
	ECanaRegs.CANBTC.bit.TSEG1 = 10 ;           //BRP = 10  CAN'T SET 0 
	ECanaRegs.CANBTC.bit.TSEG2 = 2 ;            //BT = 15 CAN'T SET 0 
	ECanaRegs.CANMC.bit.CCR = 0 ;               //Set CCR = 0 
	while(ECanaRegs.CANES.bit.CCE == !0 ){}     //Wait Clear CCE 
	//Masking All MailBox 
	ECanaRegs.CANME.all = 0x00000000 ; 
	//Config MailBoxDirection As Transmit 
	ECanaRegs.CANMD.all = 0x00000000 ;           //0 send 1 receive 
	// 
	ECanaRegs.CANTRS.all = 0xFFFFFFFF ; 
	//Set as Little Ending 
	//ECanaRegs.CANMC.all = 0xFFFFFFFF ; 
	//Set GAM  eCAN Mode not Use 
	//ECanaRegs.CANGAM.bit.AMI = 0 ; 
	//ECanaRegs.CANGAM.bit.GAM150 = 0x0005 ; 
	//ECanaRegs.CANGAM.bit.GAM2816 = 0x0000 ; 
	//Init Interupt 
	ECanaRegs.CANGIM.bit.AAIM = 1 ;       //系统中断要一直打开  
	ECanaRegs.CANGIM.bit.BOIM = 1 ; 
	ECanaRegs.CANGIM.bit.EPIM = 1 ; 
	ECanaRegs.CANGIM.bit.WDIM = 1 ; 
	ECanaRegs.CANGIM.bit.WUIM = 1 ; 
	ECanaRegs.CANGIM.bit.WLIM = 1 ; 
	ECanaRegs.CANGIM.bit.MAIM = 1 ;        //? 
	 
	ECanaRegs.CANGIM.bit.I0EN = 0 ;        //close 
	ECanaRegs.CANGIM.bit.I1EN = 0 ; 
	ECanaRegs.CANGIM.bit.RMLIM = 0 ; 
	ECanaRegs.CANGIM.bit.TCOIM = 0 ; 
	 
	ECanaRegs.CANMIL.all = 0xFFFFFFFF ;       //在中断线1产生中断MailBox Interupt 
	ECanaRegs.CANMIM.all = 0x00000000 ;       //屏蔽所有邮箱 
	ECanaRegs.CANGIM.bit.GIL = 1 ;	          //System Interupt at 1 Level 
	 
	EDIS ; 
} 
//=========================================================================== 
// No more. 
//===========================================================================