⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can-mebeiffen1.c

📁 瑞泰DSP2812开发板的can通讯源代码
💻 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 + -