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


 
#include "DSP28_Device.h" 
void mailbox_check(int32 T1,int32 T2,int32 T3); 
void mailbox_read(int16 i); 
 
//Global variable for this example 
Uint32 ErrorCount; 
Uint32 MessageReceiveCount; 
 
extern Uint32 TestMbox1; 
extern Uint32 TestMbox2; 
extern Uint32 TestMbox3; 
 
void main(void) 
{ 
	/*初始化系统*/ 
	InitSysCtrl(); 
 
    /*使能管脚*/ 
    InitGpio(); 
 
	/*关中断*/ 
	DINT; 
	IER = 0x0000; 
	IFR = 0x0000; 
 
	/*初始化PIE中断*/ 
	InitPieCtrl(); 
 
	/*初始化PIE中断矢量表*/ 
	InitPieVectTable();	 
	 
	/*初始化SCIA寄存器*/ 
    InitECan(); 
	 
	MessageReceiveCount = 0; 
	ErrorCount = 0; 
     
     
	/*设置中断服务程序入口地址*/ 
	EALLOW;	// This is needed to write to EALLOW protected registers 
	PieVectTable.ECAN0INTA = &ECAN0INTA_ISR; 
	PieVectTable.ECAN1INTA = &ECAN1INTA_ISR; 
	EDIS;   // This is needed to disable write to EALLOW protected registers 
 
	/*开中断*/ 
	IER |= M_INT9; 
 
	EINT;   // Enable Global interrupt INTM 
	ERTM;	// Enable Global realtime interrupt DBGM 
 
	for(;;) 
	{ 
		//ECanaRegs.CANTRS.all = 0x00000001; 
	//	while(ECanaRegs.CANTA.all != 0x00000001); 
		//ECanaRegs.CANTA.all = 0x00000001; 
		MessageReceiveCount++; 
	 
	} 
 
} 	 
 
void mailbox_read(int16 MBXnbr) 
{ 
   volatile struct MBOX *Mailbox; 
   Mailbox = &ECanaMboxes.MBOX0 + MBXnbr; 
   TestMbox1 = Mailbox->MDRL.all; // = 0x9555AAAn (n is the MBX number) 
   TestMbox2 = Mailbox->MDRH.all; // = 0x89ABCDEF (a constant) 
   TestMbox3 = Mailbox->MID.all;// = 0x9555AAAn (n is the MBX number) 
 
} // MSGID of a rcv MBX is transmitted as the MDL data. 
 
 
void mailbox_check(int32 T1, int32 T2, int32 T3) 
{ 
    if((T1 != T3) || ( T2 != 0x89ABCDEF)) 
    { 
       ErrorCount++; 
    } 
} 
//=========================================================================== 
// No more. 
//===========================================================================