📄 can_test.c
字号:
#include "DSP28_Device.h"
float voltage[32]={2.635,3.654,-1.265,-10.25,10.25,3.000,5.000,4.000};
Uint16 b[7];
Uint16 m,n,nn,i;
float c;
Uint16 j,loop;
Uint32 TestMbox1;
Uint32 TestMbox2;
Uint32 TestMbox3;
Uint32 receivedata[64];
Uint16 DHBUFFH,DHBUFFL,DLBUFFH,DLBUFFL;
void change(float senddata[32])//字符转换
{
if(senddata[n]<0.0)
{
b[0]='-';
c=0.0-senddata[n];
if(c<10.0)
b[1]='0';
else b[1]='1';
b[2]=(Uint16)(c)%10+0x30;
b[3]='.';
b[4]=(Uint16)(c*10)%10+0x30;
b[5]=(Uint16)(c*100)%10+0x30;
b[6]=(Uint16)(c*1000)%10+0x30;
}
else
{
b[0]='+';
if(senddata[n]<10.0)
b[1]='0';
else b[1]='1';
b[2]=(Uint16)(senddata[n])%10+0x30;
b[3]='.';
b[4]=(Uint16)(senddata[n]*10)%10+0x30;
b[5]=(Uint16)(senddata[n]*100)%10+0x30;
b[6]=(Uint16)(senddata[n]*1000)%10+0x30;
}
}
void writebox(int16 BOXnbr)//将发送数据写入邮箱
{
volatile struct MBOX *box;
box = &ECanaMboxes.MBOX0 + BOXnbr;
DHBUFFH=b[0];
DHBUFFH=DHBUFFH<<8;
DHBUFFH=DHBUFFH+b[1];
box->MDRH.bit.HI_WORD=DHBUFFH;
DHBUFFL=b[2];
DHBUFFL=DHBUFFL<<8;
DHBUFFL=DHBUFFL+b[3];
box->MDRH.bit.LOW_WORD=DHBUFFL;
DLBUFFH=b[4];
DLBUFFH=DLBUFFH<<8;
DLBUFFH=DLBUFFH+b[5];
box->MDRL.bit.HI_WORD=DLBUFFH;
DLBUFFL=b[6];
DLBUFFL=DLBUFFL<<8;
DLBUFFL=DLBUFFL+' ';
box->MDRL.bit.LOW_WORD=DLBUFFL;
}
void ECanInit(void)
{
struct ECAN_REGS ECanaShadow;
EALLOW;
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
ECanaShadow.CANTIOC.bit.TXFUNC = 1;
ECanaRegs.CANTIOC.all = ECanaShadow.CANRIOC.all;
ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
ECanaShadow.CANRIOC.bit.RXFUNC = 1;
ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
EDIS;
ECanaRegs.CANME.all = 0;
/*发送邮箱的ID号*/
ECanaMboxes.MBOX0.MID.all = 0x9555AAA0;
ECanaMboxes.MBOX1.MID.all = 0x9555AAA1;
ECanaMboxes.MBOX2.MID.all = 0x9555AAA2;
ECanaMboxes.MBOX3.MID.all = 0x9555AAA3;
ECanaMboxes.MBOX4.MID.all = 0x9555AAA4;
ECanaMboxes.MBOX5.MID.all = 0x9555AAA5;
ECanaMboxes.MBOX6.MID.all = 0x9555AAA6;
ECanaMboxes.MBOX7.MID.all = 0x9555AAA7;
ECanaMboxes.MBOX8.MID.all = 0x9555AAA8;
ECanaMboxes.MBOX9.MID.all = 0x9555AAA9;
ECanaMboxes.MBOX10.MID.all = 0x9555AAAA;
ECanaMboxes.MBOX11.MID.all = 0x9555AAAB;
ECanaMboxes.MBOX12.MID.all = 0x9555AAAC;
ECanaMboxes.MBOX13.MID.all = 0x9555AAAD;
ECanaMboxes.MBOX14.MID.all = 0x9555AAAE;
ECanaMboxes.MBOX15.MID.all = 0x9555AAAF;
/*接收邮箱的ID号*/
ECanaMboxes.MBOX16.MID.all = 0x9555AAA0;
ECanaMboxes.MBOX17.MID.all = 0x9555AAA1;
ECanaMboxes.MBOX18.MID.all = 0x9555AAA2;
ECanaMboxes.MBOX19.MID.all = 0x9555AAA3;
ECanaMboxes.MBOX20.MID.all = 0x9555AAA4;
ECanaMboxes.MBOX21.MID.all = 0x9555AAA5;
ECanaMboxes.MBOX22.MID.all = 0x9555AAA6;
ECanaMboxes.MBOX23.MID.all = 0x9555AAA7;
ECanaMboxes.MBOX24.MID.all = 0x9555AAA8;
ECanaMboxes.MBOX25.MID.all = 0x9555AAA9;
ECanaMboxes.MBOX26.MID.all = 0x9555AAAA;
ECanaMboxes.MBOX27.MID.all = 0x9555AAAB;
ECanaMboxes.MBOX28.MID.all = 0x9555AAAC;
ECanaMboxes.MBOX29.MID.all = 0x9555AAAD;
ECanaMboxes.MBOX30.MID.all = 0x9555AAAE;
ECanaMboxes.MBOX31.MID.all = 0x9555AAAF;
/*0~15 is TX,16~31 is RX*/
ECanaRegs.CANMD.all = 0xFFFF0000;
/*32个邮箱使能*/
ECanaRegs.CANME.all = 0xFFFFFFFF;
/*数据长度 8个BYTE*/
ECanaMboxes.MBOX0.MCF.bit.DLC = 8;
ECanaMboxes.MBOX1.MCF.bit.DLC = 8;
ECanaMboxes.MBOX2.MCF.bit.DLC = 8;
ECanaMboxes.MBOX3.MCF.bit.DLC = 8;
ECanaMboxes.MBOX4.MCF.bit.DLC = 8;
ECanaMboxes.MBOX5.MCF.bit.DLC = 8;
ECanaMboxes.MBOX6.MCF.bit.DLC = 8;
ECanaMboxes.MBOX7.MCF.bit.DLC = 8;
ECanaMboxes.MBOX8.MCF.bit.DLC = 8;
ECanaMboxes.MBOX9.MCF.bit.DLC = 8;
ECanaMboxes.MBOX10.MCF.bit.DLC = 8;
ECanaMboxes.MBOX11.MCF.bit.DLC = 8;
ECanaMboxes.MBOX12.MCF.bit.DLC = 8;
ECanaMboxes.MBOX13.MCF.bit.DLC = 8;
ECanaMboxes.MBOX14.MCF.bit.DLC = 8;
ECanaMboxes.MBOX15.MCF.bit.DLC = 8;
ECanaMboxes.MBOX16.MCF.bit.DLC = 8;
ECanaMboxes.MBOX17.MCF.bit.DLC = 8;
ECanaMboxes.MBOX18.MCF.bit.DLC = 8;
ECanaMboxes.MBOX19.MCF.bit.DLC = 8;
ECanaMboxes.MBOX20.MCF.bit.DLC = 8;
ECanaMboxes.MBOX21.MCF.bit.DLC = 8;
ECanaMboxes.MBOX22.MCF.bit.DLC = 8;
ECanaMboxes.MBOX23.MCF.bit.DLC = 8;
ECanaMboxes.MBOX24.MCF.bit.DLC = 8;
ECanaMboxes.MBOX25.MCF.bit.DLC = 8;
ECanaMboxes.MBOX26.MCF.bit.DLC = 8;
ECanaMboxes.MBOX27.MCF.bit.DLC = 8;
ECanaMboxes.MBOX28.MCF.bit.DLC = 8;
ECanaMboxes.MBOX29.MCF.bit.DLC = 8;
ECanaMboxes.MBOX30.MCF.bit.DLC = 8;
ECanaMboxes.MBOX31.MCF.bit.DLC = 8;
/*没有远方应答帧被请求*/
ECanaMboxes.MBOX0.MCF.bit.RTR = 0;
ECanaMboxes.MBOX1.MCF.bit.RTR = 0;
ECanaMboxes.MBOX2.MCF.bit.RTR = 0;
ECanaMboxes.MBOX3.MCF.bit.RTR = 0;
ECanaMboxes.MBOX4.MCF.bit.RTR = 0;
ECanaMboxes.MBOX5.MCF.bit.RTR = 0;
ECanaMboxes.MBOX6.MCF.bit.RTR = 0;
ECanaMboxes.MBOX7.MCF.bit.RTR = 0;
ECanaMboxes.MBOX8.MCF.bit.RTR = 0;
ECanaMboxes.MBOX9.MCF.bit.RTR = 0;
ECanaMboxes.MBOX10.MCF.bit.RTR = 0;
ECanaMboxes.MBOX11.MCF.bit.RTR = 0;
ECanaMboxes.MBOX12.MCF.bit.RTR = 0;
ECanaMboxes.MBOX13.MCF.bit.RTR = 0;
ECanaMboxes.MBOX14.MCF.bit.RTR = 0;
ECanaMboxes.MBOX15.MCF.bit.RTR = 0;
ECanaMboxes.MBOX16.MCF.bit.RTR = 0;
ECanaMboxes.MBOX17.MCF.bit.RTR = 0;
ECanaMboxes.MBOX18.MCF.bit.RTR = 0;
ECanaMboxes.MBOX19.MCF.bit.RTR = 0;
ECanaMboxes.MBOX20.MCF.bit.RTR = 0;
ECanaMboxes.MBOX21.MCF.bit.RTR = 0;
ECanaMboxes.MBOX22.MCF.bit.RTR = 0;
ECanaMboxes.MBOX23.MCF.bit.RTR = 0;
ECanaMboxes.MBOX24.MCF.bit.RTR = 0;
ECanaMboxes.MBOX25.MCF.bit.RTR = 0;
ECanaMboxes.MBOX26.MCF.bit.RTR = 0;
ECanaMboxes.MBOX27.MCF.bit.RTR = 0;
ECanaMboxes.MBOX28.MCF.bit.RTR = 0;
ECanaMboxes.MBOX29.MCF.bit.RTR = 0;
ECanaMboxes.MBOX30.MCF.bit.RTR = 0;
ECanaMboxes.MBOX31.MCF.bit.RTR = 0;
nn=n+16;
j=0;
for(;n<nn;n++)
{
change(voltage);
writebox(j);
j++;
}
EALLOW;
/*邮箱屏蔽使能*/
ECanaRegs.CANMIM.all = 0xFFFFFFFF;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 1);
EALLOW;
/*(BRPREG+1)=10 feeds a 15MHz CAN clock*/
ECanaShadow.CANBTC.bit.BRP = 9;
/*150/10=15*/
ECanaShadow.CANBTC.bit.TSEG2 = 5;
ECanaShadow.CANBTC.bit.TSEG1 = 7;
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 0;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 0);
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.STM = 1;
ECanaShadow.CANMC.bit.SCM = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
}
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)
receivedata[m]=TestMbox1;
receivedata[m+1]=TestMbox2;
m=m+2;
}
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化SCIA寄存器*/
n=0;
m=0;
for(loop=0;loop<2;loop++)//循环两次每次发送16个数据
{
ECanInit();//初始化
ECanaRegs.CANTRS.all = 0x0000FFFF;//发送数据
while(ECanaRegs.CANTA.all != 0x0000FFFF);
ECanaRegs.CANTA.all = 0x0000FFFF;
for(i=16;i<32;i++)//读接收数据
{
mailbox_read(i);
}
}
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -