Exemple #1
0
int
main(void)
{
  u2_init();

  puts("\nburn_dbsrx_eeprom\n");

  hal_set_leds(0, ~0);	// all off

  int i2c_addr = I2C_ADDR_RX_A;
  int dbid = read_dboard_eeprom(i2c_addr);
  bool ok;
  const char *msg = 0;

  switch (dbid){
  case -1:
    msg = "No RX daughterboard found";
    goto bad;

  case -2:
    msg = "Invalid RX EEPROM contents";
    goto bad;

  case USRP_DBID_DBS_RX_WITH_CLOCK_MOD:
    msg = "RX Daughterboard already reports being a DBS RX w/ CLOCK_MOD";
    goto good;

  case USRP_DBID_DBS_RX:
    // Says it's a DBS_RX, attempt to burn the EEPROM
    ok = eeprom_write(i2c_addr, 0,
		      dbs_rx_rev2_eeprom, sizeof(dbs_rx_rev2_eeprom));
    if (ok){
      msg = "Successfully programmed db as DBS RX Rev 2.1";
      goto good;
    }
    else {
      msg = "Failed to write daugherboard eeprom";
      goto bad;
    }

  default:
    msg = "Daughterboard is not a DBS RX; ignored";
    goto bad;
  }
  
 good:
  puts(msg);
  hal_set_leds(LED_VALS, LED_MASK);
  while (1)
    ;

 bad:
  puts(msg);
  while(1){
    hal_toggle_leds(LED_VALS);
    mdelay(50);
  }
}
Exemple #2
0
/*
 * Called when eth phy state changes (w/ interrupts disabled)
 */
void link_changed_callback(int speed){
    printf("\neth link changed: speed = %d\n", speed);
    if (speed != 0){
        hal_set_leds(LED_RJ45, LED_RJ45);
        pkt_ctrl_set_routing_mode(PKT_CTRL_ROUTING_MODE_MASTER);
        send_gratuitous_arp();
    }
    else{
        hal_set_leds(0x0, LED_RJ45);
        pkt_ctrl_set_routing_mode(PKT_CTRL_ROUTING_MODE_SLAVE);
    }
}
Exemple #3
0
int
main(void)
{
  u2_init();

  // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output
  //hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111");
  //hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111");

  putstr("\ntx_only\n");
  
  // Control LEDs
  hal_set_leds(0x0, 0x3);

  if (USE_BUFFER_INTERRUPT)
    pic_register_handler(IRQ_BUFFER,   buffer_irq_handler);

  pic_register_handler(IRQ_OVERRUN,  overrun_irq_handler);
  pic_register_handler(IRQ_UNDERRUN, underrun_irq_handler);

  //pic_register_handler(IRQ_TIMER, timer_irq_handler);
  //hal_set_timeout(timer_delta);

  ethernet_register_link_changed_callback(link_changed_callback);

  ethernet_init();

  // initialize double buffering state machine for DSP RX -> Ethernet
  dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0,
	    &dsp_rx_recv_args, &dsp_rx_send_args,
	    dbsm_nop_inspector);

  // setup receive from ETH
  // bp_receive_to_buf(CPU_RX_BUF, PORT_ETH, 1, 0, BP_LAST_LINE);

#if 0
  if (hwconfig_simulation_p()){
    // If we're simulating, pretend that we got a start command from the host
    u2_mac_addr_t host = {{ 0x00, 0x0A, 0xE4, 0x3E, 0xD2, 0xD5 }};
    start_rx_cmd(&host);
  }
#endif

  start_tx_transfers();		// send constant buffers to DSP TX

  while(1){
    if (!USE_BUFFER_INTERRUPT)
      buffer_irq_handler(0);
  }
}
Exemple #4
0
/*
 * We ought to arrange for this to be called before main, but for now,
 * we require that the user's main call u2_init as the first thing...
 */
bool
u2_init(void)
{
  hal_disable_ints();
  hal_io_init();

  // init spi, so that we can switch over to the high-speed clock
  spi_init();

  // set up the default clocks
  clocks_init();

  hal_uart_init();

  // init i2c so we can read our rev
  pic_init();	// progammable interrupt controller
  i2c_init();
  hal_enable_ints();

  // flash all leds to let us know board is alive
  hal_set_led_src(0x0, 0x1f); /* software ctrl */
  hal_set_leds(0x0, 0x1f);    mdelay(300);
  hal_set_leds(LED_E, LED_E); mdelay(300);
  hal_set_leds(LED_C, LED_C); mdelay(300);
  hal_set_leds(LED_A, LED_A); mdelay(300);
  for (int i = 0; i < 3; i++){ //blink all
    static const int blinks = LED_E | LED_C | LED_A;
    hal_set_leds(0x0,    0x1f); mdelay(100);
    hal_set_leds(blinks, 0x1f); mdelay(100);
  }
  hal_set_led_src(0x1f & ~LED_D, 0x1f); /* hardware ctrl */
  hal_set_leds(LED_D, 0x1f);  // Leave one on

#if 0
  // test register readback
  int rr, vv;
  vv = ad9777_read_reg(0);
  printf("ad9777 reg[0] = 0x%x\n", vv);
  
  for (rr = 0x04; rr <= 0x0d; rr++){
    vv = ad9510_read_reg(rr);
    printf("ad9510 reg[0x%x] = 0x%x\n", rr, vv);
  }
#endif

  output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN);

  return true;
}