📄 can-me.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;
//以下为对邮箱进行配置
ECanaMboxes.MBOX0.MCF.all = 0x00000000;
ECanaMboxes.MBOX1.MCF.all = 0x00000000;
ECanaRegs.CANTA.all = 0xFFFFFFFF;
ECanaRegs.CANRMP.all = 0xFFFFFFFF;
ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
ECanaRegs.CANGIF1.all = 0xFFFFFFFF;
ECanaRegs.CANME.all = 0;//所有的邮箱不使能
// ECanaRegs.CANMD.all = 0x80000000;//邮箱指向寄存器,邮箱15配置为发送,31配置为接受
ECanaRegs.CANMD.bit.MD0=0;
ECanaRegs.CANMD.bit.MD1=1;
// ECanaMboxes.MBOX0.MID.all = 0x90000002;
ECanaMboxes.MBOX0.MID.all= 0x00000002;
/*接收邮箱的ID号*/
//ECanaMboxes.MBOX15.MID.all = 0x90000002;
ECanaMboxes.MBOX1.MID.all= 0x00000002;
ECanaMboxes.MBOX0.MDRL.bit.LOW_WORD=1;
ECanaMboxes.MBOX0.MCF.bit.DLC = 8; /*数据长度 8个BYTE*/
ECanaMboxes.MBOX1.MCF.bit.DLC = 8;
/*没有远方应答帧被请求*/
ECanaMboxes.MBOX0.MCF.bit.RTR = 0;
ECanaMboxes.MBOX1.MCF.bit.RTR = 0;
ECanaRegs.CANME.bit.ME0=1;// 使能邮箱0
ECanaRegs.CANME.bit.ME1=1;// 使能邮箱1
// EDIS;
EALLOW;
ECanaRegs.CANMC.bit.STM =0;//不使能自检模式
ECanaRegs.CANMC.bit.SCM = 0;//处于scc模式
ECanaRegs.CANMC.bit.DBO=1;//首先接受或发送数据的低位字节
EDIS;
EALLOW;
ECanaRegs.CANMIM.bit.MIM1=1; //使能邮箱1
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 + -