void InitSysCtrl() //初始化DSP系统设置
{
EALLOW;
SysCtrlRegs.WDCR= 0x00E8; //0x00E8 禁止看门狗,预定标系数Prescaler=1
SysCtrlRegs.PLLCR.all = 0x000A; //PLL控制器寄存器,SYSCLKOUT=CLKIN=150MHZ
for(i= 0; i< 5000; i++){} //等待PLL稳定
//HISPCP/LOSPCP预定标寄存器
SysCtrlRegs.HISPCP.all= 0x0001; //高速外设时钟设置寄存器,HSPCLK=SYSCLKOUT/2=75MHz
SysCtrlRegs.LOSPCP.all= 0x0002; //慢速外设时钟设置寄存器,LSPCLK=SYSCLKOUT/4=37.5MHz
//外设时钟使能,不用的外设时钟应关闭
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
EDIS;
}
void IOinit()
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0000; //全部配置为一般IO口
GpioMuxRegs.GPADIR.all=0xC300; //配置GPIOA8,A9,A14,A15为输出
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1; //配置GPIOF6为CANTX
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; //配置GPIOF7为CANRX
GpioMuxRegs.GPFMUX.all=0x0030; //设置F4和F5为SCIA外设通信端口
EDIS;
GpioDataRegs.GPADAT.all=0x0; //配置GPIOA0-A6为0
}
void InitECan(void)
{
EALLOW;
ECanaRegs.CANTIOC.bit.TXFUNC = 1; //配置eCAN的TX、RX分别为发送、接收脚
ECanaRegs.CANRIOC.bit.RXFUNC = 1;
ECanaRegs.CANMC.bit.STM=0; //配置CAN为正常模式
ECanaRegs.CANMC.bit.SCB=1; //=1:HECC模式,0-31邮箱可用;=0:SCC模式,0-15邮箱可用
ECanaRegs.CANMC.bit.DBO=1; //首先接受或发送数据的低位字节
//RTR位在复位后状态不定,因此在程序进行初始化的时候必须对该位赋值
ECanaMboxes.MBOX0.MCF.bit.RTR = 0; //无远程帧请求
ECanaMboxes.MBOX16.MCF.bit.RTR = 0;
//信息控制寄存器指定了要发送的字节数和发送优先级
//CAN初始化时应将其所有位初始化为0
ECanaMboxes.MBOX0.MCF.all = 0x00000000;
ECanaMboxes.MBOX1.MCF.all = 0x00000000;
ECanaMboxes.MBOX2.MCF.all = 0x00000000;
ECanaMboxes.MBOX3.MCF.all = 0x00000000;
ECanaMboxes.MBOX4.MCF.all = 0x00000000;
ECanaMboxes.MBOX5.MCF.all = 0x00000000;
ECanaMboxes.MBOX6.MCF.all = 0x00000000;
ECanaMboxes.MBOX7.MCF.all = 0x00000000;
ECanaMboxes.MBOX8.MCF.all = 0x00000000;
ECanaMboxes.MBOX9.MCF.all = 0x00000000;
ECanaMboxes.MBOX10.MCF.all = 0x00000000;
ECanaMboxes.MBOX11.MCF.all = 0x00000000;
ECanaMboxes.MBOX12.MCF.all = 0x00000000;
ECanaMboxes.MBOX13.MCF.all = 0x00000000;
ECanaMboxes.MBOX14.MCF.all = 0x00000000;
ECanaMboxes.MBOX15.MCF.all = 0x00000000;
ECanaMboxes.MBOX16.MCF.all = 0x00000000;
ECanaMboxes.MBOX17.MCF.all = 0x00000000;
ECanaMboxes.MBOX18.MCF.all = 0x00000000;
ECanaMboxes.MBOX19.MCF.all = 0x00000000;
ECanaMboxes.MBOX20.MCF.all = 0x00000000;
ECanaMboxes.MBOX21.MCF.all = 0x00000000;
ECanaMboxes.MBOX22.MCF.all = 0x00000000;
ECanaMboxes.MBOX23.MCF.all = 0x00000000;
ECanaMboxes.MBOX24.MCF.all = 0x00000000;
ECanaMboxes.MBOX25.MCF.all = 0x00000000;
ECanaMboxes.MBOX26.MCF.all = 0x00000000;
ECanaMboxes.MBOX27.MCF.all = 0x00000000;
ECanaMboxes.MBOX28.MCF.all = 0x00000000;
ECanaMboxes.MBOX29.MCF.all = 0x00000000;
ECanaMboxes.MBOX30.MCF.all = 0x00000000;
ECanaMboxes.MBOX31.MCF.all = 0x00000000;
ECanaRegs.CANTA.all =0xFFFFFFFF; //发送应答寄存器写1清零
ECanaRegs.CANRMP.all =0xFFFFFFFF; //接收消息挂起寄存器写1清零
ECanaRegs.CANGIF0.all =0xFFFFFFFF; //清除所有中断标志位
ECanaRegs.CANGIF1.all =0xFFFFFFFF;
//------------------------------------
ECanaRegs.CANGIM.all =0x00000001; //中断0(ECAN0INT)使能
ECanaRegs.CANMIM.all =0x00010000; //16号邮箱中断使能
ECanaRegs.CANMIL.all =0x00000000; //在ECAN0INT(中断0)产生邮箱中断
//------------------------------------
//配置位定时参数
ECanaRegs.CANMC.bit.CCR =1; //CCR=1,改变配置请求
while(ECanaRegs.CANES.bit.CCE!=1){}; //等待CCE置位,CPU必须等待CCE=1后才能对CANBTC寄存器进行操作
ECanaRegs.CANBTC.bit.SAM=0; //can模块采样3个值并进行多数表决
ECanaRegs.CANBTC.bit.BRP =19; //CAN总线波特率设为500Kbps
ECanaRegs.CANBTC.bit.TSEG2=2;
ECanaRegs.CANBTC.bit.TSEG1=10;
ECanaRegs.CANMC.bit.CCR =0; //配置CCR=0,CPU请求正常模式
while(ECanaRegs.CANES.bit.CCE!=0){}; //等待CCE清零,若被清零则表明CAN模块已经配置完毕
ECanaRegs.CANME.all=0; //屏蔽所有邮箱,在对MSGIDs写操作之前
EDIS;
} |