Добрый день! Уважаемые форумчане, возникла следующая проблема. Надо передать посылку по 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;
}
}