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

📄 dsp28_ecan.c

📁 TMSC320F2812串口SCI通信,SCIA,SCIB,波特率设置
💻 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.
//===========================================================================

⌨️ 快捷键说明

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