?? can_test.c
字號(hào):
///2006-06-22 調(diào)CAN自測(cè)模式通過(guò)
#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)
{
Uint16 j;
/*初始化系統(tǒng)*/
InitSysCtrl();
/*關(guān)中斷*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中斷*/
InitPieCtrl();
/*初始化PIE中斷矢量表*/
InitPieVectTable();
/*初始化SCIA寄存器*/
InitECan();
MessageReceiveCount = 0;
ErrorCount = 0;
#if CAN_INT
/*設(shè)置中斷服務(wù)程序入口地址*/
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
/*開(kāi)中斷*/
IER |= M_INT9;
#endif
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;)
{
ECanaRegs.CANTRS.all = 0x0000FFFF;
while(ECanaRegs.CANTA.all != 0x0000FFFF);
ECanaRegs.CANTA.all = 0x0000FFFF;
MessageReceiveCount++;
//for(j = 0; j < 0x1000; j++);
#if !CAN_INT
for(j = 0; j < 16; j++)
{
mailbox_read(j);
mailbox_check(TestMbox1,TestMbox2,TestMbox3);
}
#endif
}
}
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.在這里設(shè)斷點(diǎn)
void mailbox_check(int32 T1, int32 T2, int32 T3)
{
if((T1 != T3) || ( T2 != 0x89ABCDEF))
{
ErrorCount++;
}
}
//===========================================================================
// No more.
//===========================================================================
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -