может кто подскажет что не так. у меня все время флаг form error выдает. а где я ни так что то сделал не понимаю всё по даташиту вроде.
CODE
void can_tx()
{
DDRA.1=1;
PORTA.1=1;
//CANIDT1=0x0f;
//тут
CANPAGE = 0x01;
CANCDMOB = 0;
CANSTMOB=0;
CANIDT1 = 0xFF; // IDT
CANIDT2 = 0xE0; //IDT
CANIDT3 = 0; // IDE
CANIDT4 = 0; // запрос удалеено передачи 00000101
//CANIDM1 = 0;
//CANIDM2 = 0;
//CANIDM3 = 0;
//CANIDM4 = 0;
CANMSG=0b00000001;
// conmob1 conmob0 RPVL IDE DLC3..0
// 0 1 0 0 0001
CANCDMOB = 0b01000001; // РАЗРЕШИТЬ ПЕРЕДАЧЮ ОТВЕТ НЕ НУЖЕН IDE=0(НЕРАСШИРЕННЫЙ) + DLC=1(ДЛИННА СООБЩЕНИЯ)
if (BERR==1){printf("Bit Error ");}
if (SERR==1){printf("Stuff Error ");}
if (CERR==1){printf("CRC Error ");}
if (FERR==1){printf("Form Error ");}
if (AERR==1){printf("Ackknowledgement Error busy ");}
if (TXBSY==1){printf("Tx busy ");}
while (CANGSTA & (1<<TXBSY));
DDRA.1=0;
PORTA.1=0;
}
void can_rx()
{
char tem;
DDRA.1=1;
PORTA.1=1;
CANPAGE = 0x70;
CANCDMOB = 0;
CANSTMOB=0;
CANIDT1 = 0;//b11111111; // IDT
CANIDT2 = 0;//b11100000; //IDT
CANIDT3 = 0; // IDE
CANIDT4 = 0;
CANIDM1 = 0;
CANIDM2 = 0; //маска
CANIDM3 = 0;
CANIDM4 = 0;
tem=CANMSG;
CANCDMOB=0b10000001;
//printf("CAN=",CANMSG);
putchar(tem);
DDRA.1=0;
PORTA.1=0;
if (CANSTMOB & (1<<RXOK)){
DDRA.3=1;
PORTA.3=1;
}
else
{
DDRA.4=1;
PORTA.4=1;
}
if (BERR==1){printf("Bit Error");}
if (SERR==1){printf("Stuff Error");}
if (CERR==1){printf("CRC Error");}
if (FERR==1){printf("Form Error");}
if (AERR==1){printf("Ackknowledgement Error busy");}
if (RXBSY==1){printf("rx busy");}
if (CANMSG!=0){
DDRA.2=1;
PORTA.2=1;
}
}
{
DDRA.1=1;
PORTA.1=1;
//CANIDT1=0x0f;
//тут
CANPAGE = 0x01;
CANCDMOB = 0;
CANSTMOB=0;
CANIDT1 = 0xFF; // IDT
CANIDT2 = 0xE0; //IDT
CANIDT3 = 0; // IDE
CANIDT4 = 0; // запрос удалеено передачи 00000101
//CANIDM1 = 0;
//CANIDM2 = 0;
//CANIDM3 = 0;
//CANIDM4 = 0;
CANMSG=0b00000001;
// conmob1 conmob0 RPVL IDE DLC3..0
// 0 1 0 0 0001
CANCDMOB = 0b01000001; // РАЗРЕШИТЬ ПЕРЕДАЧЮ ОТВЕТ НЕ НУЖЕН IDE=0(НЕРАСШИРЕННЫЙ) + DLC=1(ДЛИННА СООБЩЕНИЯ)
if (BERR==1){printf("Bit Error ");}
if (SERR==1){printf("Stuff Error ");}
if (CERR==1){printf("CRC Error ");}
if (FERR==1){printf("Form Error ");}
if (AERR==1){printf("Ackknowledgement Error busy ");}
if (TXBSY==1){printf("Tx busy ");}
while (CANGSTA & (1<<TXBSY));
DDRA.1=0;
PORTA.1=0;
}
void can_rx()
{
char tem;
DDRA.1=1;
PORTA.1=1;
CANPAGE = 0x70;
CANCDMOB = 0;
CANSTMOB=0;
CANIDT1 = 0;//b11111111; // IDT
CANIDT2 = 0;//b11100000; //IDT
CANIDT3 = 0; // IDE
CANIDT4 = 0;
CANIDM1 = 0;
CANIDM2 = 0; //маска
CANIDM3 = 0;
CANIDM4 = 0;
tem=CANMSG;
CANCDMOB=0b10000001;
//printf("CAN=",CANMSG);
putchar(tem);
DDRA.1=0;
PORTA.1=0;
if (CANSTMOB & (1<<RXOK)){
DDRA.3=1;
PORTA.3=1;
}
else
{
DDRA.4=1;
PORTA.4=1;
}
if (BERR==1){printf("Bit Error");}
if (SERR==1){printf("Stuff Error");}
if (CERR==1){printf("CRC Error");}
if (FERR==1){printf("Form Error");}
if (AERR==1){printf("Ackknowledgement Error busy");}
if (RXBSY==1){printf("rx busy");}
if (CANMSG!=0){
DDRA.2=1;
PORTA.2=1;
}
}