📄 2407user.h
字号:
tmp|=0x0100;
tmp&=0xFFFE;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP1
case IOPF1:
{
tmp=*PFDATDIR;
tmp|=0x0200;
tmp&=0xFFFD;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP2
case IOPF2:
{
tmp=*PFDATDIR;
tmp|=0x0400;
tmp&=0xFFFB;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP3
case IOPF3:
{
tmp=*PFDATDIR;
tmp|=0x0800;
tmp&=0xFFF7;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP4
case IOPF4:
{
tmp=*PFDATDIR;
tmp|=0x1000;
tmp&=0xFFEF;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP5
case IOPF5:
{
tmp=*PFDATDIR;
tmp|=0x2000;
tmp&=0xFFDF;
*PFDATDIR=tmp;
break;
}
#endif
#ifdef _USEIOP6
case IOPF6:
{
tmp=*PFDATDIR;
tmp|=0x4000;
tmp&=0xFFBF;
*PFDATDIR=tmp;
break;
}
#endif
}
}
////////////////////////////////////////////////////////////////////////////////////CAN Module
#ifdef _USECAN
#ifdef _USEMBX0
#define MBX0 41
#endif
#ifdef _USEMBX1
#define MBX1 42
#endif
#ifdef _USEMBX2
#define MBX2 43
#endif
#ifdef _USEMBX3
#define MBX3 44
#endif
#ifdef _USEMBX4
#define MBX4 45
#endif
#ifdef _USEMBX5
#define MBX5 46
#endif
#define DIRSEND 47
#define DIRRECV 48
void clr_mbx(unsigned int mbxid)
{
switch(mbxid)
{
#ifdef _USEMBX0
case MBX0:
*CANMCR|=0x0100;
*CANMBX0A=0x0000;
*CANMBX0B=0x0000;
*CANMBX0C=0x0000;
*CANMBX0D=0x0000;
*CANMCR=0x0480;
break;
#endif
#ifdef _USEMBX1
case MBX1:
*CANMCR|=0x0100;
*CANMBX1A=0x0000;
*CANMBX1B=0x0000;
*CANMBX1C=0x0000;
*CANMBX1D=0x0000;
*CANMCR=0x0480;
break;
#endif
#ifdef _USEMBX2
case MBX2:
*CANMCR|=0x0100;
*CANMBX2A=0x0000;
*CANMBX2B=0x0000;
*CANMBX2C=0x0000;
*CANMBX2D=0x0000;
*CANMCR=0x0480;
break;
#endif
#ifdef _USEMBX3
case MBX3:
*CANMCR|=0x0100;
*CANMBX3A=0x0000;
*CANMBX3B=0x0000;
*CANMBX3C=0x0000;
*CANMBX3D=0x0000;
*CANMCR=0x0480;
break;
#endif
#ifdef _USEMBX4
case MBX4:
*CANMCR|=0x0100;
*CANMBX4A=0x0000;
*CANMBX4B=0x0000;
*CANMBX4C=0x0000;
*CANMBX4D=0x0000;
*CANMCR=0x0480;
break;
#endif
#ifdef _USEMBX5
case MBX5:
*CANMCR|=0x0100;
*CANMBX5A=0x0000;
*CANMBX5B=0x0000;
*CANMBX5C=0x0000;
*CANMBX5D=0x0000;
*CANMCR=0x0480;
break;
#endif
}
}
void init_can(unsigned int bcr1,unsigned int bcr2,unsigned int intmask/*interrupt mask*/)//Set BCR1 BCR2 and int mask register
{
*MCRB|=0x00C0;
*CANIFR=0xFFFF;
*CANIMR=intmask;
*CANMCR|=0x1000;
*CANMDER=0x0000;
while(*CANGSR&0x0010==0)continue;
*CANBCR2=bcr2;
*CANBCR1=bcr1;
*CANMCR&=0xEFFF;
while(*CANGSR&0x0010!=0)continue;
}
void init_mbxsend(unsigned int mbxid/*which mailbox's gonna to send*/,unsigned int frameidl,unsigned int frameidh/*message id*/)//Set data frame id, 8 byte
{
#ifdef EXTID
switch(mbxid)
{
#ifdef _USEMBX2
case MBX2:
{
*CANMDER&=0xFFFB;
*CANMCR|=0x0100;
*CANMSGID2L=frameidl;
*CANMSGID2H=frameidh;
//*CANMSGID2H&=0xDFFF;
//*CANMSGID2H|=0xC000;
*CANMSGCTRL2=0x0008;
*CANMBX2A=0x0000;
*CANMBX2B=0x0000;
*CANMBX2C=0x0000;
*CANMBX2D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0004;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
*CANMDER&=0xFFF7;
*CANMCR|=0x0100;
*CANMSGID3L=frameidl;
*CANMSGID3H=frameidh;
//*CANMSGID3H&=0xDFFF;
//*CANMSGID3H|=0xC000;
*CANMSGCTRL3=0x0008;
*CANMBX3A=0x0000;
*CANMBX3B=0x0000;
*CANMBX3C=0x0000;
*CANMBX3D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0008;
break;
}
#endif
#ifdef _USEMBX4
case MBX4:
{
*CANMDER&=0xFFEF;
*CANMCR|=0x0100;
*CANMSGID4L=frameidl;
*CANMSGID4H=frameidh;
//*CANMSGID4H&=0xDFFF;
//*CANMSGID4H|=0xC000;
*CANMSGCTRL4=0x0008;
*CANMBX4A=0x0000;
*CANMBX4B=0x0000;
*CANMBX4C=0x0000;
*CANMBX4D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0010;
break;
}
#endif
#ifdef _USEMBX5
case MBX5:
{
*CANMDER&=0xFFDF;
*CANMCR|=0x0100;
*CANMSGID5L=frameidl;
*CANMSGID5H=frameidh;
//*CANMSGID5H&=0xDFFF;
//*CANMSGID5H|=0xC000;
*CANMSGCTRL5=0x0008;
*CANMBX5A=0x0000;
*CANMBX5B=0x0000;
*CANMBX5C=0x0000;
*CANMBX5D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0020;
break;
}
#endif
}
#else
switch(mbxid)
{
#ifdef _USEMBX2
case MBX2:
{
*CANMDER&=0xFFFB;
*CANMCR|=0x0100;
*CANMSGID2H=frameidh;
//*CANMSGID2H&=0x4FFF;
//*CANMSGID2H|=0x4000;
*CANMSGID2L=frameidl;
*CANMSGCTRL2=0x0008;
*CANMBX2A=0x0000;
*CANMBX2B=0x0000;
*CANMBX2C=0x0000;
*CANMBX2D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0004;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
*CANMDER&=0xFFF7;
*CANMCR|=0x0100;
*CANMSGID3H=frameidh;
//*CANMSGID3H&=0x4FFF;
//*CANMSGID3H|=0x4000;
*CANMSGID3L=frameidl;
*CANMSGCTRL3=0x0008;
*CANMBX3A=0x0000;
*CANMBX3B=0x0000;
*CANMBX3C=0x0000;
*CANMBX3D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0008;
break;
}
#endif
#ifdef _USEMBX4
case MBX4:
{
*CANMDER&=0xFFEF;
*CANMCR|=0x0100;
*CANMSGID4H=frameidh;
//*CANMSGID4H&=0x4FFF;
//*CANMSGID4H|=0x4000;
*CANMSGID4L=frameidl;
*CANMSGCTRL4=0x0008;
*CANMBX4A=0x0000;
*CANMBX4B=0x0000;
*CANMBX4C=0x0000;
*CANMBX4D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0010;
break;
}
#endif
#ifdef _USEMBX5
case MBX5:
{
*CANMDER&=0xFFDF;
*CANMCR|=0x0100;
*CANMSGID5H=frameidh;
//*CANMSGID5H&=0x4FFF;
//*CANMSGID5H|=0x4000;
*CANMSGID5L=frameidl;
*CANMSGCTRL5=0x0008;
*CANMBX5A=0x0000;
*CANMBX5B=0x0000;
*CANMBX5C=0x0000;
*CANMBX5D=0x0000;
*CANMCR=0x0480;
*CANIMR=0xFFFF;
*CANIFR=0xFFFF;
*CANMDER|=0x0020;
break;
}
#endif
}
#endif
}
void can_send(unsigned int mbxid,unsigned int* pdata)//Send data
{
if(!pdata) return;
switch(mbxid)
{
#ifdef _USEMBX2
case MBX2:
{
*CANMDER&=0xFFFB;
*CANMCR|=0X0100;
*CANMBX2A=pdata[0];
*CANMBX2B=pdata[1];
*CANMBX2C=pdata[2];
*CANMBX2D=pdata[3];
*CANMCR=0x0480;
*CANMDER&=0xFFBF;
*CANMDER|=0x0004;
*CANTCR=0x0010;
while(*CANTCR&0x1000==0)continue;
*CANTCR=0x1000;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
*CANMDER&=0xFFF7;
*CANMCR|=0X0100;
*CANMBX3A=pdata[0];
*CANMBX3B=pdata[1];
*CANMBX3C=pdata[2];
*CANMBX3D=pdata[3];
*CANMCR=0x0480;
*CANMDER&=0xFF7F;
*CANMDER|=0x0008;
*CANTCR=0x0020;
while(*CANTCR&0x2000==0)continue;
*CANTCR=0x2000;
break;
}
#endif
#ifdef _USEMBX4
case MBX4:
{
*CANMDER&=0xFFEF;
*CANMCR|=0X0100;
*CANMBX4A=pdata[0];
*CANMBX4B=pdata[1];
*CANMBX4C=pdata[2];
*CANMBX4D=pdata[3];
*CANMCR=0x0480;
*CANMDER|=0x0010;
*CANTCR=0x0040;
while(*CANTCR&0x4000==0)continue;
*CANTCR=0x4000;
break;
}
#endif
#ifdef _USEMBX5
case MBX5:
{
*CANMDER&=0xFFDF;
*CANMCR|=0X0100;
*CANMBX5A=pdata[0];
*CANMBX5B=pdata[1];
*CANMBX5C=pdata[2];
*CANMBX5D=pdata[3];
*CANMCR=0x0480;
*CANMDER|=0x0020;
*CANTCR=0x0080;
while(*CANTCR&0x8000==0)continue;
*CANTCR=0x8000;
break;
}
#endif
}
}
void init_mbxrecv(unsigned int mbxid,unsigned int frameidrl,unsigned int frameidrh,unsigned int maskl,unsigned int maskh)//Receive data,standard frame
{
#ifdef EXTID
switch(mbxid)
{
#ifdef _USEMBX0
case MBX0:
{
*CANMDER&=0xFFFE;
*CANMCR|=0x0100;
*CANLAM0H=maskh;
*CANLAM0L=maskl;
//*CANLAM0H|=0x8000;
*CANMSGID0L=frameidrl;
*CANMSGID0H=frameidrh;
//*CANMSGID0H&=0xDFFF;
//*CANMSGID0H|=0xC000;
*CANMBX0A=0x0000;
*CANMBX0B=0x0000;
*CANMBX0C=0x0000;
*CANMBX0D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0001;
break;
}
#endif
#ifdef _USEMBX1
case MBX1:
{
*CANMDER&=0xFFFD;
*CANMCR|=0x0100;
*CANLAM0H=maskh;
*CANLAM0L=maskl;
//*CANLAM0H|=0x8000;
*CANMSGID1L=frameidrl;
*CANMSGID1H=frameidrh;
//*CANMSGID1H&=0xDFFF;
//*CANMSGID1H|=0xC000;
*CANMBX1A=0x0000;
*CANMBX1B=0x0000;
*CANMBX1C=0x0000;
*CANMBX1D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0002;
break;
}
#endif
#ifdef _USEMBX2
case MBX2:
{
*CANMDER&=0xFFFB;
*CANMCR|=0x0100;
*CANLAM1H=maskh;
*CANLAM1L=maskl;
//*CANLAM1H|=0x8000;
*CANMSGID2L=frameidrl;
*CANMSGID2H=frameidrh;
//*CANMSGID2H&=0xDFFF;
//*CANMSGID2H|=0xC000;
*CANMBX2A=0x0000;
*CANMBX2B=0x0000;
*CANMBX2C=0x0000;
*CANMBX2D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0044;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
*CANMDER&=0xFFF7;
*CANMCR|=0x0100;
*CANLAM1H=maskh;
*CANLAM1L=maskl;
//*CANLAM1H|=0x8000;
*CANMSGID3L=frameidrl;
*CANMSGID3H=frameidrh;
//*CANMSGID3H&=0xDFFF;
//*CANMSGID3H|=0xC000;
*CANMBX3A=0x0000;
*CANMBX3B=0x0000;
*CANMBX3C=0x0000;
*CANMBX3D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0088;
break;
}
#endif
}
#else
switch(mbxid)
{
#ifdef _USEMBX0
case MBX0:
{
*CANMDER&=0xFFFE;
*CANMCR|=0x0100;
*CANLAM0H=maskh;
//*CANLAM0H=(*CANLAM0H)<<2;
//*CANLAM0H&=0x7FFF;
*CANLAM0L=maskl;
*CANMSGID0H=frameidrh;
//*CANMSGID0H&=0x4FFF;
//*CANMSGID0H|=0x4000;
*CANMSGID0L=frameidrl;
*CANMBX0A=0x0000;
*CANMBX0B=0x0000;
*CANMBX0C=0x0000;
*CANMBX0D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0001;
break;
}
#endif
#ifdef _USEMBX1
case MBX1:
{
*CANMDER&=0xFFFD;
*CANMCR|=0x0100;
*CANLAM0H=maskh;
//*CANLAM0H=(*CANLAM0H)<<2;
//*CANLAM0H&=0x7FFF;
*CANLAM0L=maskl;
*CANMSGID1H=frameidrh;
//*CANMSGID1H&=0x4FFF;
//*CANMSGID1H|=0x4000;
*CANMSGID1L=frameidrl;
*CANMBX1A=0x0000;
*CANMBX1B=0x0000;
*CANMBX1C=0x0000;
*CANMBX1D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0002;
break;
}
#endif
#ifdef _USEMBX2
case MBX2:
{
*CANMDER&=0xFFFB;
*CANMCR|=0x0100;
*CANLAM1H=maskh;
//*CANLAM1H=(*CANLAM1H)<<2;
//*CANLAM1H&=0x7FFF;
*CANLAM1L=maskl;
*CANMSGID2H=frameidrh;
//*CANMSGID2H&=0x4FFF;
//*CANMSGID2H|=0x4000;
*CANMSGID2L=frameidrl;
*CANMBX2A=0x0000;
*CANMBX2B=0x0000;
*CANMBX2C=0x0000;
*CANMBX2D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0044;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
*CANMDER&=0xFFF7;
*CANMCR|=0x0100;
*CANLAM1H=maskh;
//*CANLAM1H=(*CANLAM1H)<<2;
//*CANLAM1H&=0x7FFF;
*CANLAM1L=maskl;
*CANMSGID3H=frameidrh;
//*CANMSGID3H&=0x4FFF;
//*CANMSGID3H|=0x4000;
*CANMSGID3L=frameidrl;
*CANMBX3A=0x0000;
*CANMBX3B=0x0000;
*CANMBX3C=0x0000;
*CANMBX3D=0x0000;
*CANMCR=0x0480;
*CANMDER|=0x0088;
break;
}
#endif
}
#endif
}
void can_recv(unsigned int mbxidr,unsigned int *pdatar)//Set in the int routine
{
switch(mbxidr)
{
#ifdef _USEMBX0
case MBX0:
{
while(*CANRCR&0x0010==0)continue;
pdatar[0]=*CANMBX0A;
pdatar[1]=*CANMBX0B;
pdatar[2]=*CANMBX0C;
pdatar[3]=*CANMBX0D;
*CANRCR=0x0010;
break;
}
#endif
#ifdef _USEMBX1
case MBX1:
{
while(*CANRCR&0x0020==0)continue;
pdatar[0]=*CANMBX1A;
pdatar[1]=*CANMBX1B;
pdatar[2]=*CANMBX1C;
pdatar[3]=*CANMBX1D;
*CANRCR=0x0020;
break;
}
#endif
#ifdef _USEMBX2
case MBX2:
{
while(*CANRCR&0x0040==0)continue;
pdatar[0]=*CANMBX2A;
pdatar[1]=*CANMBX2B;
pdatar[2]=*CANMBX2C;
pdatar[3]=*CANMBX2D;
*CANRCR=0x0040;
break;
}
#endif
#ifdef _USEMBX3
case MBX3:
{
while(*CANRCR&0x0080==0)continue;
pdatar[0]=*CANMBX3A;
pdatar[1]=*CANMBX3B;
pdatar[2]=*CANMBX3C;
pdatar[3]=*CANMBX3D;
*CANRCR=0x0080;
break;
}
#endif
}
}
#endif
/////////////////////////////////////////////////////////////////////////////////////////timer
#ifdef _USETIMER
#ifdef _USET1
#define T1 48
#endif
#ifdef _USET2
#define T2 49
#endif
#ifdef _USET3
#define T3 50
#endif
#ifdef _USET4
#define T4 51
#endif
void init_timer(unsigned int timer,unsigned int p/*cycle p*/,int adc)
{
switch(timer)
{
#ifdef _USET1
case T1:
{
if(adc)
*GPTCONA|=0x0100;
*EVAIMRA|=0x0080;
*EVAIFRA&=0x0080;
*T1CON=0xF60C;
*T1PR=p;
*T1CNT=0x0000;
break;
}
#endif
#ifdef _USET2
case T2:
{
if(adc)
*GPTCONA|=0x0400;
*EVAIMRB|=0x0001;
*EVAIFRB&=0x0001;
*T2CON=0xF60C;
*T2PR=p;
*T2CNT=0x0000;
break;
}
#endif
#ifdef _USET3
case T3:
{
if(adc)
*GPTCONB|=0x0100;
*EVBIMRA|=0x0080;
*EVBIFRA&=0x0080;
*T3CON=0xF60C;
*T3PR=p;
*T3CNT=0x0000;
break;
}
#endif
#ifdef _USET4
case T4:
{
if(adc)
*GPTCONB|=0x0400;
*EVBIMRB|=0x0001;
*EVBIFRB&=0x0001;
*T4CON=0xF60C;
*T4PR=p;
*T4CNT=0x0000;
break;
}
#endif
}
}
void start_t(unsigned int timer)
{
switch(timer)
{
#ifdef _USET1
case T1:
*T1CON|=0x0040;
break;
#endif
#ifdef _USET2
case T2:
*T2CON|=0x0040;
break;
#endif
#ifdef _USET3
case T3:
*T3CON|=0x0040;
break;
#endif
#ifdef _USET4
case T4:
*T4CON|=0x0040;
break;
#endif
}
}
#endif
#ifdef _USERS232
void rs232init(unsigned int sysclk)
{
unsigned int uWork;
unsigned int BRR;
unsigned long int tmp1,tmp2;
uWork=*MCRA;
uWork|=0x03; /* use SCITXD,SCIRXD */
*MCRA=uWork;
*SCICCR=0x07; /* 8位字符,1停止位,无校验*/
*SCICTL1=0x03; /* 使能发送和接收 */
*SCICTL2=0x00; /* 禁止接收和发送中断 */
tmp1=sysclk*10000;
tmp2=96*8;
BRR=tmp1/tmp2-1; /* 波特率,32MHz 8字 */
*SCIHBAUD=(BRR&0xFF00)>>8;
*SCILBAUD=BRR&0x00FF;
*SCICTL1=0x23; /* 使能发送和接收,复位SCI */
}
void rs232send(unsigned char *prtxdata,unsigned int nSize,unsigned int nDelay)
{
unsigned int tmp;
int i;
DISABLE_INT;
for (i=0;i<nSize;i++)
{
do
{
tmp=*SCICTL2;
}while(tmp&0x00C0!=0x00C0); /*查询发送*/
*SCITXBUF=*(prtxdata+i);
delay(nDelay);
}
ENABLE_INT;
}
#endif
#ifdef _USESPI
void init_spi(int IsMaster/*主从模式*/,int IsUpTrigger/*触发模式*/,int spibrr/*波特率*/,int BitLen/*发送字长*/,int intlevel)
{
if(IsUpTrigger)
*SPICCR=0x0F&BitLen;
else
{
*SPICCR=0x0F&BitLen;
*SPICCR|=0x40;
}
if(IsMaster)
*SPICTL=0x0017;
else *SPICTL=0x0013;
*SPIBRR=spibrr;
*MCRB|=0x003C;
//*MCRC&=0xFFFE;
if(intlevel==INT1)
*SPIPRI=0xBF;
if(intlevel==INT5)
*SPIPRI=0xFF;
*SPICCR|=0x80;
}
void spi_send(int txbuf)
{
int flag;
*SPITXBUF=txbuf;
while(1)
{
flag=*SPISTS&0x40;
if(flag==0x40)break;
}
*SPIRXBUF=*SPIRXBUF;
}
int get_spi_rxbuf()
{
int rxbuf;
rxbuf=*SPIRXBUF;
return rxbuf;
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -