打印
[AVR单片机]

AT90CAN128不能发送

[复制链接]
1733|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dxx_0922|  楼主 | 2007-7-13 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AVR新人求助!
我将CAN的接收和发送脚短接。 
主要TXOK置1就发,但发不出去。(TKOK一直为0) 
那位高手帮我看看,指点指点。谢谢! 
uchar num_channel; 
uchar num_data; 
/*----------------------------------------------------------------- 
*函数名:CANint 
*功能    :initialize AT90CAN32 CAN 
*参数    :non 
-----------------------------------------------------------------*/ 
void CANint() 
{   //uchar num_channel; 
   CANGCON   |= (1<<SWRES);            //reset CAN controller by software 
   /* reset all mailboxes */ 
   for (num_channel = 0; num_channel < 15; num_channel++) 
  { 
   CANPAGE  = num_channel << 4; 
   CANCDMOB = CH_DISABLE; 
   CANSTMOB  = 0; 
   CANIDT1  = 0; 
   CANIDT2  = 0; 
   CANIDT3  = 0; 
   CANIDT4  = 0; 
   CANIDM1  = 0; 
   CANIDM2  = 0; 
   CANIDM3  = 0; 
   CANIDM4  = 0; 
   for (num_data = 0; num_data < 8; num_data++) CANMSG = 0; 
  } 
  /* setup bit timing at 500k with 12 MHz crystal*/ 
  CANBT1  = 0x02; 
  CANBT2  = 0x08; 
  CANBT3  = 0x25; 
  CANGCON |=  MSK_CANGCON_ENA;      //start CAN  
  /* Channel 0: identifier = 11bits. CANIDT=0x123 */ 
  CANIDT1 = 0x24; 
  CANIDT2 = 0x60; 
  /* Channel 0: mask = 11bits. 0x7F0 */ 
    CANIDM1 = 0xFE; 
    CANIDM2 &= ~0xE0; 
    CANIDM4 = 0; 
    /* Channel 0 configuration */ 
    CANIDT4 &=~0x04;                             /* clear bit rtr in CANIDT4. */ 
    CANCDMOB |= DLC_MAX;                         /* Reception 8 bytes.*/ 
    CANCDMOB |= CH_RxENA;                                     /* Reception enabled without buffer.*/ 
     /* Channel 1 init */                                                             
   CANPAGE = (1 << 4);                          /* CHNB=0x01; select channel 1 */    
   CANSTMOB  = 0x00;                            /* reset channel status */           
   CANCDMOB = CH_DISABLE;                       /* reset control and dlc register */ 
   /* Channel 1: identifier = 11bits. CANIDT=0x123 */ 
    CANIDT1 = 0x24; 
    CANIDT2 = 0x60; 
     /* Channel 1: mask = 11bits. 0x7F0 */ 
    CANIDM1 = 0xFE; 
    CANIDM2 &= ~0xE0; 
    CANIDM4 = 0; 
    /* interrupt configuration */ 
   CANIE2 |= 0x09;                     //开MOB3 & MOB0信箱接收中断(接收邮箱)   
    CANPAGE  = 0x00;   
    CANCDMOB |= 0x80;                  //MOB0接收使能 
    CANGIE |= ((1<<ENRX)|(1<<ENIT));              /* Can_Rx & IT enable */ 
}  

SIGNAL( CANIT_vect )  
{    //LEDtest = ~LEDtest; 
    uchar rxnum_i; 
    CANGIE &= ~(1<<ENRX);                  //关接收中断****  
    CANPAGE = 0x00;                        // 
    for(rxnum_i = 0; rxnum_i < 8; rxnum_i++)  
    {   can_receivedata[rxnum_i]=CANMSG;       //取得8个字节的数据  
       R_test = can_receivedata[rxnum_i]; 
    }  
    CANPAGE = 0x00;  
    CANSTMOB &= ~(1<<RXOK);                //清中断标志****  
    CANCDMOB = 0x98;                       //接收使能   
    CANGIE |= (1<<ENRX);                   //开中断  
    CanReceiveEndFlag=1; 

/*----------------------------------------------------------------- 
*函数名:CANTX 
*功能    :transmit data 
*参数    : non 
-----------------------------------------------------------------*/ 
void CANTX() 
{   uchar txnum_i; 
   CANPAGE = 0x10; 
   if(CANSTMOB & (1 << TXOK))                         //need to transmit 
      {   LEDtest = ~LEDtest; 
         CANSTMOB &= ~(1 << TXOK);                     //clear transmit flag 
         for(txnum_i = 0; txnum_i < 8; txnum_i ++)                        //send data 
           {   CANMSG = can_transdata[txnum_i]; 
           } 
         CANCDMOB = 0x58;                                  //frame send 
           CANGIE |=(1 << ENRX);                           //open intermit 
      } 

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

1

粉丝