CAN/OBD-II2010. 10. 4. 10:31

안녕하세요 제가 can통신 소스를 짜고 있습니다

 

수신단을 만들고 있는데요

 

수많은 ID를 가진 데이타들이 연속적으로 들어올 때 다른 ID를 가진 데이타들은 필터링해버리고

 

제가 원하는 ID를 가진 데이타만 받으려고 합니다 기본적으로 emax에서 준 소프트웨어를 이용하고 있는데요



 

void can_rx_set(char obj, unsigned long id, char ide, unsigned char dlc, unsigned long idmask, unsigned char rtrIdemask)
{
 CANPAGE = obj<<4;  // set MOb number

 CANSTMOB = 0x00;  // clear status

 if(ide== STD)   // standard
 {
  CANIDT1= (unsigned char)(id>>3);
  CANIDT2= (unsigned char)(id<<5);

  CANIDM1= (unsigned char)(idmask>>3);
  CANIDM2= (unsigned char)(idmask<<5);
  CANIDM4=0;

  CANCDMOB &= ~0x10; // clear IDE =0, standard 11 bits

  usart1_transmit_string("\rRx Standard Set\n");
 }
 else     // extended
 {
  CANIDT1= (unsigned char)(id>>21);
  CANIDT2= (unsigned char)(id>>13);
  CANIDT3= (unsigned char)(id>>5);
  CANIDT4= (unsigned char)(id<<3);

  CANIDM1= (unsigned char)(idmask>>21);
  CANIDM2= (unsigned char)(idmask>>13);
  CANIDM3= (unsigned char)(idmask>>5);
  CANIDM4= (unsigned char)(idmask<<3);

  CANCDMOB |= 0x10; // set IDE =1, extended 29 bits

  usart1_transmit_string("\rRx Extended Set\n");
 }
 CANCDMOB |= (dlc & 0x0f);  // set data length

 CANIDM4 |= (unsigned char)(rtrIdemask & 0x07);
// CANIDM4 &= ~0x04;  // RTRMSK= 1/0 enable comparison (Data receive)
// CANIDM4 &= ~0x02;  // recommended
// CANIDM4 &= ~0x01;  // IDEMSK= 1/0 enable comparison (IDE receive)

 CANCDMOB |= 0x80;  // receive enable
}

여기서

can_rx_set(3, 0x7DF, EXT, 8, 0x00000000, 0x00); 로하면 모든 mod에서 오는 모든 ID를 가진 데이타들이 받아지더군요

저기서

can_rx_set(3, 0x7DF, EXT, 8, 0x1fffffff, 0x05); 로하면 0x7DF의 ID만 가진 데이터만 받아진다고 하는데 아에 아무것도 안받아지네요

뭐가 잘못됬는지 소스상으로 뭐가 잘못된건지 ㅜㅜ 아시는분 계시면 가르쳐주세요~





'CAN/OBD-II' 카테고리의 다른 글

차량용 CAN , KWP-2000 에 대한 보쉬의 PT 자료  (1) 2010.11.03
개발용 AT90CAN128 CPU 보드  (1) 2010.10.04
투싼IX 의 CAN 신호 추출  (13) 2010.09.30
전압분배 계산기  (0) 2010.09.29
AT90CAN128 Filtering Check Tool  (0) 2010.09.29
Posted by 초동