?? can-memainbeifen1.c
字號:
#include "DSP28_Device.h"
void delay(int n);
interrupt void CAN0INTA_ISR();
//interrupt void CAN0INTARECEIVER_ISR();
//#define CAN_INT 1
//Global variable for this example
Uint32 ErrorCount=0;
unsigned int MessageReceiveCount=0;
Uint32 MessageTransferCount=1;
Uint32 inter=0,error=0;
extern Uint32 TestMbox1;
extern Uint32 TestMbox2;
extern Uint32 TestMbox3;
Uint32 a1[16];
Uint32 a2[16];
Uint32 a3[16];
unsigned int a[300],b[20];
void main(void)
{
//Uint16 j;
/*初始化系統*/
InitSysCtrl();
/*關中斷*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中斷*/
InitPieCtrl();
/*初始化PIE中斷矢量表*/
InitPieVectTable();
//InitGpio();
EALLOW;
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;
EDIS;
/*初始化SCIA寄存器*/
InitECan();
MessageReceiveCount = 0;
ErrorCount = 0;
/*設置中斷服務程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.ECAN0INTA = &CAN0INTA_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.CANME.all = 0;//所有的郵箱不使能
// ECanaRegs.CANMC.bit.CDR=1;
// ECanaMboxes.MBOX15.MDRL.all = MessageReceiveCount*2;
ECanaMboxes.MBOX15.MDRL.bit.LOW_WORD=MessageReceiveCount*3;
// ECanaRegs.CANMC.bit.CDR=0;
// ECanaRegs.CANME.all = 0x80008000;//使能郵箱15和31
ECanaRegs.CANTRS.all=0;
//ECanaRegs.CANTRS.all = 0x8000;//發送在0~15信箱中的數據
ECanaRegs.CANTRS.bit.TRS15=1;
delay(1000);
while(ECanaRegs.CANTA.bit.TA15!= 1){;}//判斷郵箱中的數據是否發送成功
ECanaRegs.CANTA.bit.TA15= 1;//清除發送響應寄存器中的標志
while(ECanaRegs.CANTA.bit.TA15!= 0){;}//等待發送響應標志被清除
MessageTransferCount++;
delay(100);
//ECanaRegs.CANRMP.bit.RMP16= 1;//清除消息未決寄存器,此條語句應該放在這里,放在中斷里發現不行
// while(ECanaRegs.CANRML.bit.RML16==1) {error++;ECanaRegs.CANRML.bit.RML16=1;}//查看接受消息丟失寄存器,是否接受郵箱丟失數據,丟失一數據,error的值加1
MessageReceiveCount++;
if( MessageReceiveCount>=10)
MessageReceiveCount=0;
}
}
void delay(int n)
{
int m,k;
for(k=0;k<n;k++)
{ for(m=0;m<100;m++){;} }
}
interrupt void CAN0INTA_ISR()
{
//while(ECanaRegs.CANRMP.bit.RMP16!= 1){};//判斷郵箱中的數據是否接收成功
a[inter]=ECanaMboxes.MBOX31.MDRL.all;
b[inter]=ECanaMboxes.MBOX31.MDRH.all;
inter++;
if(inter==100)
inter=0;
ECanaRegs.CANRMP.all= 0x80000000;//清除消息未決寄存器
//ECanaRegs.CANGIF0.all = 0xFFFFFFFF;//此條語句可有可無,試驗證明cpu可以自動清除,不需要管理,可以讀取該寄存器來讀取一些標志,如0~4位表明
//置位全局郵箱中斷標志的郵箱號
// ECanaRegs.CANTA.all = 0xffff;
ECanaRegs.CANRMP.all= 0xffff;
PieCtrl.PIEACK.bit.ACK9=1;
}
//===========================================================================
// No more.
//===========================================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -