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

📄 can-me.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;
    //以下为对邮箱进行配置
    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 + -