TMS320F2812关于Can总线的源程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#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;
/*初始化系统*/
InitSysCtrl();

/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;

/*初始化PIE中断*/
InitPieCtrl();

/*初始化PIE中断矢量表*/
InitPieVectTable();

/*初始化SCIA寄存器*/
InitECan();

MessageReceiveCount = 0;
ErrorCount = 0;

#if CAN_INT
/*设置中断服务程序入口地址*/
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;
#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.


void mailbox_check(int32 T1, int32 T2, int32 T3)
{
if((T1 != T3) || ( T2 != 0x89ABCDEF))
{
ErrorCount++;
}
}

相关文档
最新文档