28335 ECAN测试完整程序和实验记录.docx
《28335 ECAN测试完整程序和实验记录.docx》由会员分享,可在线阅读,更多相关《28335 ECAN测试完整程序和实验记录.docx(24页珍藏版)》请在冰豆网上搜索。
28335ECAN测试完整程序和实验记录
Cold_Miracle
2015
Dsp28335实验源码库
[键入文档副标题]
letchgo
MARS
DSP28335文库源代码系列1:
一:
说明:
DSP28335ECAN测试:
声明:
由于XX文库不能上传代码,故将can通讯测试程序整理到word文档,大家可以参考,并配有实验结果,只需要简单的移植既可以使用,请勿盗版!
上图为参考C文件,在官方例程中都有,下面贴出重要C文件的代码。
二:
代码部分
两个主要C文件的代码,其他C文件大家自己添加就可以了,本部分程序是AB两个can口之间相互通讯,如果需要源代码,可以发我:
letchgo@163.
DSP2833x_ECan:
//TIFile$Revision:
/main/8$
//Checkin$Date:
June25,200815:
19:
07$
//###########################################################################
//
//FILE:
DSP2833x_ECan.c
//
//TITLE:
DSP2833xEnhancedCANInitialization&SupportFunctions.
//
//###########################################################################
//$TIRelease:
DSP2833x/DSP2823xC/C++HeaderFilesV1.31$
//$ReleaseDate:
August4,2009$
//###########################################################################
#include"DSP2833x_Device.h"//DSP2833xHeaderfileIncludeFile
#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile
//---------------------------------------------------------------------------
//InitECan:
//---------------------------------------------------------------------------
//ThisfunctioninitializestheeCANmoduletoaknownstate.
//
voidInitECan(void)
{
InitECana();
#ifDSP28_ECANB
InitECanb();
#endif//ifDSP28_ECANB
}
voidInitECana(void)//InitializeeCAN-Amodule
{
/*CreateashadowregisterstructurefortheCANcontrolregisters.Thisis
needed,sinceonly32-bitaccessisallowedtotheseregisters.16-bitaccess
totheseregisterscouldpotentiallycorrupttheregistercontentsorreturn
falsedata.Thisisespeciallytruewhilewritingto/readingfromabit
(orgroupofbits)amongbits16-31*/
structECAN_REGSECanaShadow;
EALLOW;//EALLOWenablesaccesstoprotectedbits
/*ConfigureeCANRXandTXpinsforCANoperationusingeCANregs*/
ECanaShadow.CANTIOC.all=ECanaRegs.CANTIOC.all;//配置GPIO引脚为CAN通讯
ECanaShadow.CANTIOC.bit.TXFUNC=1;
ECanaRegs.CANTIOC.all=ECanaShadow.CANTIOC.all;
ECanaShadow.CANRIOC.all=ECanaRegs.CANRIOC.all;
ECanaShadow.CANRIOC.bit.RXFUNC=1;
ECanaRegs.CANRIOC.all=ECanaShadow.CANRIOC.all;
/*ConfigureeCANforHECCmode-(reqdtoaccessmailboxes16thru31)*/
//HECCmodealsoenablestime-stampingfeature事件抽样特征
ECanaShadow.CANMC.all=ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.SCB=1;
ECanaRegs.CANMC.all=ECanaShadow.CANMC.all;
/*Initializeallbitsof'MasterControlField'tozero*/
//SomebitsofMSGCTRLregistercomeupinanunknownstate.Forproperoperation,
//allbits(includingreservedbits)ofMSGCTRLmustbeinitializedtozero
ECanaMboxes.MBOX0.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX1.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX2.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX3.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX4.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX5.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX6.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX7.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX8.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX9.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX10.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX11.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX12.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX13.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX14.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX15.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX16.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX17.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX18.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX19.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX20.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX21.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX22.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX23.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX24.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX25.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX26.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX27.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX28.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX29.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX30.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX31.MSGCTRL.all=0x00000000;
//TAn,RMPn,GIFnbitsareallzerouponresetandareclearedagain
//asamatterofprecaution.
ECanaRegs.CANTA.all=0xFFFFFFFF;/*ClearallTAnbits*/
ECanaRegs.CANRMP.all=0xFFFFFFFF;/*ClearallRMPnbits*/
ECanaRegs.CANGIF0.all=0xFFFFFFFF;/*Clearallinterruptflagbits*/
ECanaRegs.CANGIF1.all=0xFFFFFFFF;
/*ConfigurebittimingparametersforeCANA*/
ECanaShadow.CANMC.all=ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR=1;//SetCCR=1
ECanaRegs.CANMC.all=ECanaShadow.CANMC.all;
ECanaShadow.CANES.all=ECanaRegs.CANES.all;
do
{
ECanaShadow.CANES.all=ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE!
=1);//WaitforCCEbittobeset..
ECanaShadow.CANBTC.all=0;
#if(CPU_FRQ_150MHZ)//CPU_FRQ_150MHzisdefinedinDSP2833x_Examples.h
/*Thefollowingblockforall150MHzSYSCLKOUT(75MHzCANclock)-default.Bitrate=1Mbps
SeeNoteatEndofFile*/
ECanaShadow.CANBTC.bit.BRPREG=4;
ECanaShadow.CANBTC.bit.TSEG2REG=2;
ECanaShadow.CANBTC.bit.TSEG1REG=10;
#endif
#if(CPU_FRQ_100MHZ)//CPU_FRQ_100MHzisdefinedinDSP2833x_Examples.h
/*Thefollowingblockisonlyfor100MHzSYSCLKOUT(50MHzCANclock).Bitrate=1Mbps
SeeNoteatEndofFile*/
ECanaShadow.CANBTC.bit.BRPREG=4;
ECanaShadow.CANBTC.bit.TSEG2REG=1;
ECanaShadow.CANBTC.bit.TSEG1REG=6;
#endif
ECanaShadow.CANBTC.bit.SAM=1;
ECanaRegs.CANBTC.all=ECanaShadow.CANBTC.all;
ECanaShadow.CANMC.all=ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR=0;//SetCCR=0
ECanaRegs.CANMC.all=ECanaShadow.CANMC.all;
ECanaShadow.CANES.all=ECanaRegs.CANES.all;
do
{
ECanaShadow.CANES.all=ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE!
=0);//WaitforCCEbittobecleared..
/*DisableallMailboxes*/
ECanaRegs.CANME.all=0;//RequiredbeforewritingtheMSGIDs
EDIS;
}
#if(DSP28_ECANB)
voidInitECanb(void)//InitializeeCAN-Bmodule
{
/*CreateashadowregisterstructurefortheCANcontrolregisters.Thisis
needed,sinceonly32-bitaccessisallowedtotheseregisters.16-bitaccess
totheseregisterscouldpotentiallycorrupttheregistercontentsorreturn
falsedata.Thisisespeciallytruewhilewritingto/readingfromabit
(orgroupofbits)amongbits16-31*/
structECAN_REGSECanbShadow;
EALLOW;//EALLOWenablesaccesstoprotectedbits
/*ConfigureeCANRXandTXpinsforCANoperationusingeCANregs*/
ECanbShadow.CANTIOC.all=ECanbRegs.CANTIOC.all;
ECanbShadow.CANTIOC.bit.TXFUNC=1;
ECanbRegs.CANTIOC.all=ECanbShadow.CANTIOC.all;
ECanbShadow.CANRIOC.all=ECanbRegs.CANRIOC.all;
ECanbShadow.CANRIOC.bit.RXFUNC=1;
ECanbRegs.CANRIOC.all=ECanbShadow.CANRIOC.all;
/*ConfigureeCANforHECCmode-(reqdtoaccessmailboxes16thru31)*/
ECanbShadow.CANMC.all=ECanbRegs.CANMC.all;
ECanbShadow.CANMC.bit.SCB=1;
ECanbRegs.CANMC.all=ECanbShadow.CANMC.all;
/*Initializeallbitsof'MasterControlField'tozero*/
//SomebitsofMSGCTRLregistercomeupinanunknownstate.Forproperoperation,
//allbits(includingreservedbits)ofMSGCTRLmustbeinitializedtozero
ECanbMboxes.MBOX0.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX1.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX2.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX3.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX4.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX5.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX6.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX7.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX8.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX9.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX10.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX11.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX12.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX13.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX14.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX15.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX16.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX17.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX18.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX19.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX20.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX21.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX22.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX23.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX24.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX25.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX26.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX27.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX28.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX29.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX30.MSGCTRL.all=0x00000000;
ECanbMboxes.MBOX31.MSGCTRL.all=0x00000000;
//TAn,RMPn,GIFnbitsareallzerouponresetandareclearedagain
//asamatterofprecaution.
ECanbRegs.CANTA.all=0xFFFFFFFF;/*ClearallTAnbits*/
ECanbRegs.CANRMP.all=0xFFFFFFFF;/*ClearallRMPnbits*/
ECanbRegs.CANGIF0.all=0xFFFFFFFF;/*Clearallinterruptflagbits*/
ECanbRegs.CANGIF1.all=0xFFFFFFFF;
/*ConfigurebittimingparametersforeCANB*/
ECanbShadow.CANMC.all=ECanbRegs.CANMC.all;
ECanbShadow.CANMC.bit.CCR=1;//SetCCR=1
ECanbRegs.CANMC.all=ECanbShadow.CANMC.all;
ECanbShadow.CANES.all=ECanbRegs.CANES.all;
do
{
ECanbShadow.CANES.all=ECanbRegs.CANES.all;
}while(ECanbShadow.CANES.bit.CCE!
=1);//WaitforCCEbittobecleared..
ECanbShadow.CANBTC.all=0;
#if(CPU_FRQ_150MHZ)//CPU_FRQ_150MHzisdefinedinDSP2833x_Examples.h
/*Thefollowingblockforall150MHzSYSCLKOUT(75MHzCANclock)-default.Bitrate=1Mbps
SeeNoteatendoffile*/
ECanbShadow.CANBTC.bit.BRPREG=4;
ECanbShadow.CANBTC.bit.TSEG2REG=2;
ECanbShadow.CANBTC.bit.TSEG1REG=10;
#endif
#if(CPU_FRQ_100MHZ)//CPU_