📄 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.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -