📄 can-mebeiffen1.c
字号:
#include "DSP28_Device.h"
//---------------------------------------------------------------------------
// InitECan:
//---------------------------------------------------------------------------
// This function initializes to a known state.
//
void InitECan(void)
{
//struct ECAN_REGS ECanaShadow;
EALLOW;//配置io口为cantx,canrx
ECanaRegs.CANTIOC.bit.TXFUNC = 1; //cantx 配置为发送
ECanaRegs.CANRIOC.bit.RXFUNC = 1; //canrx 配置为接受
ECanaRegs.CANMC.bit.CCR = 1;//cpu请求变换配置
EDIS;
while(ECanaRegs.CANES.bit.CCE != 1);{;}//判断cpu对配置寄存器进行了写操作
EALLOW;
ECanaRegs.CANBTC.bit.SAM=0; //can模块采样3个值并进行多数表决
/*(BRPREG+1)=10 feeds a 15MHz CAN clock*/
ECanaRegs.CANBTC.bit.BRP = 19;
ECanaRegs.CANBTC.bit.TSEG2 = 5;
ECanaRegs.CANBTC.bit.TSEG1 = 7;//见p601,500k的比特率
ECanaRegs.CANMC.bit.CCR = 0;//cpu请求通常的操作
EDIS;
while(ECanaRegs.CANES.bit.CCE != 0){;}; //判断cpu对配置寄存器进行了写操作
// EALLOW;
//以下为对邮箱进行配置
ECanaRegs.CANME.all = 0;//所有的邮箱不使能
ECanaRegs.CANMD.all = 0x80000000;//邮箱指向寄存器,邮箱15配置为发送,31配置为接受
ECanaMboxes.MBOX15.MCF.bit.TPL=31;//邮箱15具有最大的发送优先级
/*发送邮箱的ID号*/
// ECanaRegs.CANMC.bit.CDR=1;
// ECanaMboxes.MBOX0.MID.all = 0x90000002;
ECanaMboxes.MBOX15.MID.all= 0x90000002;
/*接收邮箱的ID号*/
//ECanaMboxes.MBOX15.MID.all = 0x90000002;
ECanaMboxes.MBOX31.MID.all= 0x90000002;
// ECanaRegs.CANMC.bit.CDR=0;
ECanaMboxes.MBOX15.MCF.bit.DLC = 8; /*数据长度 8个BYTE*/
ECanaMboxes.MBOX31.MCF.bit.DLC = 8;
/*没有远方应答帧被请求*/
ECanaMboxes.MBOX15.MCF.bit.RTR = 0;
ECanaMboxes.MBOX31.MCF.bit.RTR = 0;
ECanaRegs.CANME.all = 0x80008000;//使能邮箱15和31
// EDIS;
EALLOW;
/*邮箱屏蔽使能*/
ECanaRegs.CANMC.bit.STM =0;//自检模式
ECanaRegs.CANMC.bit.SCM = 1;
ECanaRegs.CANMC.bit.DBO=1;//首先接受或发送数据的低位字节
EDIS;
EALLOW;
ECanaRegs.CANMIM.bit.MIM31=1;
// ECanaRegs.CANMIM.all = 0x80000000; //使能邮箱31的中断,如果接受邮箱有相同的id,那么邮箱数大的接受,小的不接受
ECanaRegs.CANMIL.all = 0;//在中断线0上产生邮箱中断
ECanaRegs.CANGIF0.all = 0xFFFFFFFF;//清除can全局中断标志0寄存器
ECanaRegs.CANGIM.bit.I0EN = 1;//使能ecan0int线全局使能
ECanaRegs.CANGIM.bit.I1EN = 1;//使能ecan1int线全局使能
ECanaRegs.CANGIM.all = 0x3ff07;//全局中断屏蔽寄存器全使能
EDIS;
PieCtrl.PIEIER9.bit.INTx6 = 1; //使能can中断
PieCtrl.PIEIER9.bit.INTx5 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -