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

📄 ecan.c

📁 调试成功的C语言PWM信号(F2812)
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File


void InitECan(void)
{

 struct ECAN_REGS ECanaShadow;
/*禁止看门狗功能*/
//SysCtrlRegs.WDCR=0x006F;
//使能CAN模块时钟*/
//SysCtrlRegs.PCLKCR.all=0x4000;
/*设置PLL倍频系数*/
//SysCtrlRegs.PLLCR.bit.DIV=0x000A;
//设置PLLx10(/2),输入时钟为30MHz.SYSCLOCKOUT=150MHZ.
//for (i=0;i<100000;i++)//等待PLL稳定
//{asm("NOP");}
EALLOW;
//配置GPIO引脚为ECAN功能
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;
//配置ECAN的RX和TX分别为ECAN的接受和发送引脚
ECanaRegs.CANTIOC.bit.TXFUNC=1;
ECanaRegs.CANRIOC.bit.RXFUNC=1;
//配置ECAN为增强型模式,32个邮箱全部用
ECanaRegs.CANMC.bit.SCB=1;
//初始化所有邮箱控制域为0
ECanaMboxes.MBOX0.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX1.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX2.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX3.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX4.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX5.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX6.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX7.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX8.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX9.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX10.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX11.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX12.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX13.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX14.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX15.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX16.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX17.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX18.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX19.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX20.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX21.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX22.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX23.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX24.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX25.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX26.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX27.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX28.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX29.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX30.MSGCTRL.all=0x00000000;
ECanaMboxes.MBOX30.MSGCTRL.all=0x00000000;
// 清除TAn,RMPn,GIFn位
/*清除所有TAn位,写1可以清0*/
ECanaRegs.CANTA.all=0xFFFFFFFF;
/*清除所有RMP位,写1可以清0*/
ECanaRegs.CANRMP.all=0xFFFFFFFF;
/*清除所有中断标识位*/
ECanaRegs.CANGIF0.all=0xFFFFFFFF;
ECanaRegs.CANGIF1.all=0xFFFFFFFF;
ECanaRegs.CANMIM.bit.MIM0=1;
ECanaRegs.CANMIM.bit.MIM3=1;
ECanaRegs.CANGIM.bit.I0EN=1;
ECanaRegs.CANGIM.bit.I1EN=1;
ECanaRegs.CANMIL.bit.MIL3=0;
/*配置位时序参数,也就是配置CAN通讯速率,只有在初始化模式才可以对它进行赋值*/
ECanaRegs.CANMC.bit.CCR=1;  //set CCR=1;
while(ECanaRegs.CANES.bit.CCE==!1){}//wait CCE=1;
ECanaRegs.CANBTC.bit.BRPREG=39;
ECanaRegs.CANBTC.bit.TSEG2REG=2;
ECanaRegs.CANBTC.bit.TSEG1REG=10;
ECanaRegs.CANMC.bit.CCR=0;     //set CCR=0;
while(ECanaRegs.CANES.bit.CCE==!0){};//wait CCE=0,进入标准模式
EDIS;
/******************/
/* CAN 发送程序*/
/******************/
//写MSGID 区域

 ECanaShadow.CANTRS.all=0;
 ECanaShadow.CANTRS.bit.TRS0=0;

 ECanaRegs.CANTRS.all=ECanaShadow.CANTRS.all;
 ECanaRegs.CANME.all=0;//在对MSGID进行操作之前要对邮箱进行屏蔽
 ECanaMboxes.MBOX0.MSGID.all=0x9FFFFFFF;
 ECanaMboxes.MBOX3.MSGID.all=0x00000000;
  //writ the DLC 

 ECanaMboxes.MBOX0.MSGCTRL.bit.DLC=8;

 //configure Mailbox 0 as TX
 ECanaShadow.CANMD.all=ECanaRegs.CANMD.all;
 ECanaShadow.CANMD.bit.MD0=0;
 ECanaRegs.CANMD.all=ECanaShadow.CANMD.all;

//configure Mailbox 3 as RX
 ECanaShadow.CANMD.all=ECanaRegs.CANMD.all;
 ECanaShadow.CANMD.bit.MD3=1;
 ECanaRegs.CANMD.all=ECanaShadow.CANMD.all;

//ECanaRegs.CANMD.bit.MD0=0;


 //enable mailbox 0,3
 ECanaShadow.CANME.all=ECanaRegs.CANME.all;
 ECanaShadow.CANME.bit.ME0=1;
 ECanaRegs.CANME.all=ECanaShadow.CANME.all;

 ECanaShadow.CANME.all=ECanaRegs.CANME.all;
 ECanaShadow.CANME.bit.ME3=1;
 ECanaRegs.CANME.all=ECanaShadow.CANME.all;

//ECanaRegs.CANME.bit.ME0=1;



 //writ the data to RAM of mailboxk
 ECanaMboxes.MBOX0.MDL.all=0x01234567;
 ECanaMboxes.MBOX0.MDH.all=0x89abcdef;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -