예제 #1
0
파일: platform.c 프로젝트: shiohuang/bsp430
int
iBSP430eui64 (hBSP430eui64 eui64)
{
  sBSP430onewireSerialNumber serial;
  memset(eui64->bytes, 0xFF, sizeof(eui64->bytes));
  if (0 != iBSP430onewireReadSerialNumber(&xBSP430surfDS1825, &serial)) {
    return -1;
  }
  eui64->bytes[0] = 0xFF & (PEOPLEPOWERCO_OUI >> 16);
  eui64->bytes[1] = 0xFF & (PEOPLEPOWERCO_OUI >> 8);
  eui64->bytes[2] = 0xFF & (PEOPLEPOWERCO_OUI >> 0);
  /* The full OSIAN Device Identifier detail is not used for the
   * derived EUI-64; a zero in the middle two bytes indicates an
   * unregistered device with no specific capabilities or purpose. */
  eui64->bytes[3] = 0;
  eui64->bytes[4] = 0;
  eui64->bytes[5] = serial.id[3];
  eui64->bytes[6] = serial.id[4];
  eui64->bytes[7] = serial.id[5];
  return 0;
}
예제 #2
0
파일: main.c 프로젝트: hodiapa/bsp430
void main ()
{
  int rc;
  unsigned long uptime_ticks_per_sec;
  const struct sBSP430onewireBus * bus = &ds18b20;

  vBSP430platformInitialize_ni();

  (void)iBSP430consoleInitialize();
  cprintf("\nHere we go...\n");

  uptime_ticks_per_sec = ulBSP430uptimeConversionFrequency_Hz_ni();
  cprintf("Uptime now %lu with frequency %lu Hz\n",
          ulBSP430uptime_ni(), uptime_ticks_per_sec);

  cprintf("Monitoring DS18xx on %s.%u bit %x\n",
          xBSP430portName(BSP430_PORT_HAL_GET_PERIPH_HANDLE(APP_DS18B20_PORT_HAL)) ?: "P?",
          iBSP430portBitPosition(APP_DS18B20_BIT),
          APP_DS18B20_BIT);

  do {
    rc = iBSP430onewireReadSerialNumber(bus, &serial);
    if (0 != rc) {
      cprintf("ERROR: Failed to read serial number from DS18B20: %d\n", rc);
      BSP430_CORE_DELAY_CYCLES(BSP430_CLOCK_NOMINAL_MCLK_HZ);
    }
  } while (0 != rc);
  cprintf("DS18B20 serial number: %02x%02x%02x%02x%02x%02x\n",
          serial.id[0], serial.id[1], serial.id[2],
          serial.id[3], serial.id[4], serial.id[5]);

  while (1) {
    int rc;
    unsigned long start_tck;
    unsigned long end_tck;
    unsigned int duration_ms;
    unsigned int delay_count = 0;
    int t_c;

    start_tck = ulBSP430uptime_ni();
    rc = -1;
    if (0 == iBSP430onewireRequestTemperature_ni(bus)) {
      /* Wait for read to complete.  Each read is nominally 61
       * microseconds.  Conversion time can be as long as 750 ms if
       * 12-bit resolution is used.  (12-bit resolution is the
       * default.) */
      while (! iBSP430onewireReadBit_ni(bus)) {
        ++delay_count;
      }
      rc = iBSP430onewireReadTemperature_ni(bus, &t_c);
    }
    end_tck = ulBSP430uptime_ni();
    duration_ms = 1000 * (end_tck - start_tck) / uptime_ticks_per_sec;

    if (0 == rc) {
      cprintf("Temperature %d dCel or %d d[degF] in %u ms\n",
              (10 * t_c) / 16, BSP430_ONEWIRE_xCel_TO_ddegF(t_c), duration_ms);
    } else {
      cprintf("Measurement failed in %u ms\n", duration_ms);
    }

    /* You'd want to do this if you were going to sleep here */
    vBSP430onewireShutdown_ni(bus);
  }
}