Beispiel #1
0
// -------------------------------------------------------------
CAN_Frame CAN_K2X::read()
{
  unsigned long int startMillis;
  CAN_Frame msg;
  msg.timeout = CAN_TIMEOUT_T3;

  startMillis = msg.timeout ? millis() : 0;

  while ( !available() )
  {
    if ( !msg.timeout || (msg.timeout <= (millis() - startMillis)) )
    {
      // early EXIT nothing here
      msg.valid = false;
      return msg;
    }
    yield();
  }

  // get identifier and dlc
  msg.length = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb));
  msg.extended = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE) ? 1 : 0;
  msg.id  = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK);
  if (!msg.extended)
  {
    msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO;
  }
Beispiel #2
0
// -------------------------------------------------------------
int FlexCAN::read(CAN_message_t &msg)
{
  unsigned long int startMillis;

  startMillis = msg.timeout? millis() : 0;

  while( !available() ) {
    if ( !msg.timeout || (msg.timeout<=(millis()-startMillis)) ) {
      // early EXIT nothing here
      return 0;
    }
    yield();
  }

  // get identifier and dlc
  msg.len = FLEXCAN_get_length(FLEXCAN0_MBn_CS(rxb));
  msg.ext = (FLEXCAN0_MBn_CS(rxb) & FLEXCAN_MB_CS_IDE)? 1:0;
  msg.id  = (FLEXCAN0_MBn_ID(rxb) & FLEXCAN_MB_ID_EXT_MASK);
  if(!msg.ext) {
    msg.id >>= FLEXCAN_MB_ID_STD_BIT_NO;
  }