?? 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 + -