Не работает CAN на AT90CAN64

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Не работает CAN на AT90CAN64

Сообщение Prosperous »

Добрый день! Уважаемые форумчане, возникла следующая проблема. Надо передать посылку по CAN. Все проинициализировал, отладил через JTAG, во все приведенные ниже регистры все записывается. Передачу разрешаю, а на выходе ниче нет. Похоже я что то не учел. Подскажите, пожалуйста, где косяк. Буду очень признателен.

Код: Выделить всё

void ResetAllMailbox (void) 
{
  unsigned char num_channel;

  for (num_channel = 0; num_channel < 15; num_channel++)
  {
    CANPAGE  = (num_channel<<4); 
    CANSTMOB = 0;
    CANCDMOB = 0;
    CANIDT4  = 0;
    CANIDT3  = 0;
    CANIDT2  = 0;
    CANIDT1  = 0;
    CANIDM4  = 0;
    CANIDM3  = 0;
    CANIDM2  = 0;
    CANIDM1  = 0;
 }

RX_Buf_Count = 0;	
   
CANBT1=0x00; 
CANBT2=0x04;  
CANBT3=0x13; 
CANTCON=0x7C; 

     CANGIE=0x00;
    CANEN2=0x0f;
    CANEN1=0x00; 
    CANIE2=0x00;
    CANIE1=0x00; 
    CANHPMOB=0x00; 
    CANGCON |= 0x02;

}


void CAN_Init(unsigned char CAN_Page_Num)
{
unsigned char num_data;
	ResetAllMailbox () 
	for (num_data = 0; num_data < CAN_PACK_LEN; num_data++)
      CANMSG = 0;

	switch(CAN_Page_Num)
	  {
    	//MOB0=TX
		case 0: case 3:
		  {
		СANSTMOB = 0x00;  
    		CANCDMOB = 0x08; 
    		CANIDT4 = 0x00;                                                   
    		CANIDT3 = 0x00;                                                              
    		CANIDT2 = 0x20;                                                          
    		CANIDT1 = 0x44; 
			break;
		  }
		//MOB1=RX
		case 1:
		  {
			CANSTMOB = 0x00;  
    		CANCDMOB = 0x08; 
    		CANIDT4 = 0x00;                                                  
    		CANIDT3 = 0x00;                                                              
    		CANIDT2 = 0x20;                                                           
    		CANIDT1 = 0x06;  
    		CANIDM4  = 0x00;                                                             
    		CANIDM3  = 0x00;                                                            
    		CANIDM2  = 0xE0;                                                      
    		CANIDM1  = 0xFF;
			break;
		  }
    	//MOB2=TX
		case 2:
		  {
			CANSTMOB = 0x00;
    		CANCDMOB = 0x08; 
    		CANIDT4 = 0x00;                                                       
    		CANIDT3 = 0x00;                                                              
    		CANIDT2 = 0x20;                                                             
    		CANIDT1 = 0xC4; 
			break;
		  }
		}
	                                               
}


void Send_Data_To_CAN (unsigned char CAN_Page_Num,  short int Pack_Len)
{

    if(CAN_Page_Num <= CAN_PAGE_MAX_NUM)
	  {
		CANPAGE = CAN_Page_Num << 4;
		CAN_Init(CAN_Page_Num);
	                              
    	        	for(unsigned char i = 0; i < Pack_Len; i++)
        	    CANMSG = buffer[i];
        
            CANCDMOB = 0x48; 
    	
      }
}

Реклама
Prosperous
Встал на лапы
Сообщения: 129
Зарегистрирован: Ср янв 18, 2012 19:37:10

Re: Не работает CAN на AT90CAN64

Сообщение Prosperous »

вобщем, вопрос снимается. Все работает, просто у контроллера кварц отвалился, поэтому на выходе ниче и не было.
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»