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); } }
/* * 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); } }
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); } }
/* * 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; }