dspic30f的CAN通讯问题

2019-03-25 19:13发布

今天调试的时候发数据CAN卡能接受到,但是CAN卡发的数据却接受不到,可能是什么原因?通讯部分程序如下。
void DELAY(void)
{
  for(i=5;--i;)
  continue;
}

void __attribute__((__interrupt__)) _T1Interrupt(void);
void __attribute__((__interrupt__)) _T4Interrupt(void);
void __attribute__((__interrupt__)) _ADCInterrupt(void);
void __attribute__((__interrupt__)) _INT0Interrupt(void);
//void __attribute__((__interrupt__)) _INT1Interrupt(void);
//void __attribute__((__interrupt__)) _INT2Interrupt(void);
void __attribute__((__interrupt__)) _C1Interrupt(void);
//

void initial(void)
{
IPC0=0X0000;//所有中断源被禁止
IPC1=0X0000;//所有中断源被禁止
IPC2=0X0000;//所有中断源被禁止
IPC3=0X0000;//所有中断源被禁止
IPC4=0X0000;//所有中断源被禁止
IPC5=0X0000;//所有中断源被禁止

PORTEbits.RE0=1;
TRISEbits.TRISE8=1;
IPC0bits.INT0IP=4;
IFS0bits.INT0IF=0;
IEC0bits.INT0IE=1;
INTCON2=0X000E;   

//TMR1
T1CON=0X0000;     
TMR1=0X0000;      
PR1=0XDFFF;      
IPC0bits.T1IP=2;
IFS0bits.T1IF=0;
IEC0bits.T1IE=1;
// T1CONbits.TON=1;

//开关输入
TRISEbits.TRISE1=1;
TRISFbits.TRISF6=1;
TRISCbits.TRISC14=1;
TRISCbits.TRISC13=1;

//TMR4
T4CON=0X0000;   
TMR4=0X0000;      
PR4=0X0FFF;
IPC5bits.T4IP=5;
IFS1bits.T4IF=0;
IEC1bits.T4IE=1;
T4CONbits.TON=1;
//

//AD
TRISBbits.TRISB0=1;
TRISBbits.TRISB1=1;
TRISBbits.TRISB2=1;
ADPCFG=0XFFF8;  
ADCON1=0X00E0;     
ADCSSL=0X0000;
ADCSSLbits.CSSL0=1;
ADCSSLbits.CSSL1=1;
ADCSSLbits.CSSL2=1;

ADCON3=0X0F05,
ADCON2=0X0408;   

IPC2bits.ADIP=3;
IFS0bits.ADIF=0;
IEC0bits.ADIE=1;
ADCON1bits.ADON=1;
ADCON1bits.ASAM=1;

//
TRISEbits.TRISE0=0;
TRISDbits.TRISD2=0;


PR3=0X03E8;
OC3R=0X01F4;        
OC3RS=0X01F4;      
PWMOUT3();

//
//can set
TRISF=0X0001;                                 
canset1();
canset2();
canset3();
T1CONbits.TON=1;
}

//
//can set
void canset1(void)
{
  C1CTRLbits.REQOP=4;
  while(C1CTRLbits.OPMODE!=0x4){}
  C1RX0CON=0x0000; //

  C1RXF0SID=0x0000;
  C1RXF0EIDH=0x0000;
  C1RXF0EIDL=0x0000;
  C1RXM0SID=0x0000;
  C1RXM0EIDH=0x0000;
  C1RXM0EIDL=0x0000;

  C1CTRLbits.CANCKS=0;
C1CFG1bits.SJW=1-1;     
C1CFG1bits.BRP=4;   
//C1CFG2=0x024c;      
C1CFG2bits.PRSEG=3-1;
C1CFG2bits.SEG1PH=2-1;
C1CFG2bits.SAM=0;
C1CFG2bits.SEG2PHTS=1;
C1CFG2bits.SEG2PH=2-1;
C1CFG2bits.WAKFIL=0;                 
}
//

void canset2(void)
{
  C1CTRLbits.REQOP=4;             //配置模式
  while(C1CTRLbits.OPMODE!=0x4){}
  C1CTRLbits.CANCAP=1;
  C1TX0CON=0x0003;//最高报文优先级
}

//设置正常工作模式
void canset3(void)
{
  C1CTRLbits.REQOP=0;             //设置正常工作模式

  IPC6bits.C1IP=1;
// C1INTFbits.RX0IF=0;
  C1INTF=0X0000;                  //接收缓存器0 1中断标识
  IFS1bits.C1IF=0;
  IEC1bits.C1IE=1;
  C1INTE=0X0003;                  //接收缓存器0 1使能中断
  while(C1CTRLbits.OPMODE!=0X0000){}
}
//设置正常工作模式2
void canset4(void)
{
  C1CTRLbits.REQOP=0;             //设置正常工作模式
  while(C1CTRLbits.OPMODE!=0X0000){}
}

//
void chudian(void)
{

if(PORTEbits.RE1==1)
  { k1=1;}
else
  { k1=0;}
if(PORTFbits.RF6==1)
   {k2=1;}
else
  { k2=0;}
if(PORTCbits.RC14==1)
   {k3=1;}
else
  { k3=0;}
if(PORTCbits.RC13==1)
  { k4=1;}
else
  { k4=0;}
}
//
void _INT0Interrupt(void)
{
DELAY();
IFS0bits.INT0IF=0;
IEC0bits.INT0IE=0;
PORTEbits.RE0=0;                 //故障指示灯亮
IEC0bits.INT0IE=1;
}

//
void fasong(void)
{
C1TX0CONbits.TXREQ=1;           //启动发送

while (C1TX0CONbits.TXREQ==1)   //等待发送完成
   {for (ii=0;ii<200;ii++){}
   }
}

//
void _T1Interrupt(void)
{
T1CONbits.TON=0;
IEC0bits.T1IE=0;
IFS0bits.T1IF=0;
//IEC1bits.C1IE=0;
ticount="TICOUNT+1;
TICOUNT=3;

" if (TICOUNT==1)
{
d1fabuffer01="0x0061;
" c1tx0b1="D1fabuffer01;
" c1tx0b2="D1fabuffer02;
" c1tx0b3="D1fabuffer03;
" c1tx0b4="D1fabuffer04;"  
canset2();

C1TX0SIDbits.TXIDE=1;
C1TX0SIDbits.SRR=0;
C1TX0SIDbits.SID10_6=0;  
C1TX0SIDbits.SID5_0=0;      
C1TX0EIDbits.EID17_14=0;   
C1TX0EIDbits.EID13_6=385;      
C1TX0DLCbits.EID5_0=36;         
C1TX0DLCbits.DLC=8;        
C1TX0DLCbits.TXRTR=0;
C1TX0DLCbits.TXRB0=1;
C1TX0DLCbits.TXRB1=1;

canset4();
fasong();
}

else if(TICOUNT==2)
{
// d2fabuffer01="0X1000;
//" d2fabuffer02="0X2000;
//" d2fabuffer03="0X3000;
//" d2fabuffer04="0X4000;

" d2fabuffer01="0x0062;
" c1tx0b1="D2fabuffer01;
" c1tx0b2="D2fabuffer02;
" c1tx0b3="D2fabuffer03;
" c1tx0b4="D2fabuffer04;"  
canset2();

C1TX0SIDbits.TXIDE=1;
C1TX0SIDbits.SRR=0;
C1TX0SIDbits.SID10_6=0;      
C1TX0SIDbits.SID5_0=0;         
C1TX0EIDbits.EID17_14=0;   
C1TX0EIDbits.EID13_6=385;   
C1TX0DLCbits.EID5_0=37;         
C1TX0DLCbits.DLC=8;            
C1TX0DLCbits.TXRTR=0;
C1TX0DLCbits.TXRB0=1;
C1TX0DLCbits.TXRB1=1;

canset4();
fasong();
}

//else if(TICOUNT==3)
else
{
//DCfabuffer01=0X0123;
//DCfabuffer02=0X0321;
//DCfabuffer03=0X0213;
//DCfabuffer04=0X0312;
dcfabuffer01="0x1000;

" c1tx0b1="DCfabuffer01;
" c1tx0b2="DCfabuffer02;
" c1tx0b3="DCfabuffer03;
" c1tx0b4="DCfabuffer04;"  
canset2();

C1TX0SIDbits.TXIDE=1;
C1TX0SIDbits.SRR=0;
C1TX0SIDbits.SID10_6=0;        /
C1TX0SIDbits.SID5_0=0;         
C1TX0EIDbits.EID17_14=1;   
C1TX0EIDbits.EID13_6=64;      
C1TX0DLCbits.EID5_0=17;      
C1TX0DLCbits.DLC=8;            
C1TX0DLCbits.TXRTR=0
C1TX0DLCbits.TXRB0=1;
C1TX0DLCbits.TXRB1=1;  

canset4();
fasong();
ticount="0;
}
"
/*
else

{
dpfabuffer01="0X00CA;
" dpfabuffer02="0X00A1;
" dpfabuffer03="0X00C6;
" dpfabuffer04="0X00B1;"

c1tx0b1="DPfabuffer01;
" c1tx0b2="DPfabuffer02;
" c1tx0b3="DPfabuffer03;
" c1tx0b4="DPfabuffer04;"  
canset2();

C1TX0SIDbits.TXIDE=0;         
C1TX0SIDbits.SRR=0;            
C1TX0SIDbits.SID10_6=20;      
C1TX0SIDbits.SID5_0=1;         

C1TX0DLCbits.DLC=8;           
C1TX0DLCbits.TXRTR=0;
C1TX0DLCbits.TXRB0=1;
C1TX0DLCbits.TXRB1=1;

canset4();
fasong();
ticount="0;
}"
*/
C1INTFbits.TX0IF=0;
IEC0bits.T1IE=1;
T1CONbits.TON=1;
// IEC1bits.C1IE=1;
}
//

void _T4Interrupt(void)
{
IEC1bits.T4IE=0;
T4CONbits.TON=0;
IFS1bits.T4IF=0;
chudian();
IEC1bits.T4IE=1;
T4CONbits.TON=1;

} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。