Changeset 8991

Show
Ignore:
Timestamp:
07/23/08 19:06:27
Author:
eb
Message:

split clock functions out from u2_init

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • usrp2/trunk/firmware/lib/Makefile.am

    r8366 r8991  
    2121        libu2fw.a 
    2222 
     23 
    2324libu2fw_a_SOURCES = \ 
    2425        ad9510.c \ 
    2526        ad9777.c \ 
    2627        buffer_pool.c \ 
     28        clocks.c \ 
    2729        db_basic.c \ 
    2830        db_init.c \ 
     
    4951        spi.c \ 
    5052        u2_init.c        
     53 
     54 
     55noinst_HEADERS = \ 
     56        ad9510.h \ 
     57        ad9777.h \ 
     58        ad9777_regs.h \ 
     59        bool.h \ 
     60        buffer_pool.h \ 
     61        clocks.h \ 
     62        db.h \ 
     63        db_base.h \ 
     64        dbsm.h \ 
     65        eth_mac.h \ 
     66        eth_mac_regs.h \ 
     67        eth_phy.h \ 
     68        ethernet.h \ 
     69        hal_io.h \ 
     70        hal_uart.h \ 
     71        i2c.h \ 
     72        lsadc.h \ 
     73        lsdac.h \ 
     74        mdelay.h \ 
     75        memcpy_wa.h \ 
     76        memory_map.h \ 
     77        memset_wa.h \ 
     78        nonstdio.h \ 
     79        pic.h \ 
     80        print_rmon_regs.h \ 
     81        spi.h \ 
     82        stdint.h \ 
     83        stdio.h \ 
     84        u2_init.h 
  • usrp2/trunk/firmware/lib/db_rfx.c

    r8491 r8991  
    2424#include <mdelay.h> 
    2525#include <lsdac.h> 
     26#include <clocks.h> 
     27 
    2628 
    2729bool rfx_init_rx(struct db_base *db); 
     
    444446rfx_init_tx(struct db_base *dbb) 
    445447{ 
    446   struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; 
    447   ad9510_write_reg(0x42, 0x08); // enable output 6 (db_tx_clk), CMOS 
    448   ad9510_write_reg(0x55, 0x80); // Bypass Div #6, 100 MHz clock 
    449   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     448  //struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; 
     449  clocks_enable_tx_dboard(true, 0); 
    450450  return true; 
    451451} 
     
    454454rfx_init_rx(struct db_base *dbb) 
    455455{ 
    456   struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; 
    457   ad9510_write_reg(0x43, 0x08); // enable output 7 (db_rx_clk), CMOS 
    458   ad9510_write_reg(0x57, 0x80); // Bypass Div #7, 100 MHz clock 
    459   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     456  //struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; 
     457  clocks_enable_rx_dboard(true, 0); 
    460458 
    461459  // test gain 
    462   db->base.set_gain(db,U2_DOUBLE_TO_FXPT_GAIN(45.0)); 
     460  dbb->set_gain(dbb,U2_DOUBLE_TO_FXPT_GAIN(45.0)); 
    463461  printf("set the gain\n"); 
    464462  return true; 
     
    552550  struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; 
    553551 
     552  // FIXME 
     553 
    554554  return false; 
    555555} 
  • usrp2/trunk/firmware/lib/u2_init.c

    r8579 r8991  
    2929#include "mdelay.h" 
    3030#include "ad9777.h" 
    31 #include "ad9510.h" 
     31#include "clocks.h" 
    3232#include "db.h" 
    3333 
     
    5353  spi_init(); 
    5454 
    55   // Set up basic clocking functions in AD9510 
    56   ad9510_write_reg(0x45, 0x00); // CLK2 drives distribution 
    57   ad9510_write_reg(0x3D, 0x00); // Turn on output 1 (FPGA CLK), normal levels 
    58   ad9510_write_reg(0x4B, 0x80); // Bypass divider 1 
    59   ad9510_write_reg(0x5A, 0x01); // Update Regs 
    60  
    61   spi_wait(); 
    62  
    63   // Set up PLL for 10 MHz reference 
    64   // Reg 4, A counter, Don't Care 
    65   ad9510_write_reg(0x05, 0x00);  // Reg 5, B counter MSBs, 0 
    66   ad9510_write_reg(0x06, 0x05);  // Reg 6, B counter LSBs, 5 
    67   // Reg 7, Loss of reference detect, doesn't work yet, 0 
    68  
    69 #define LOCK_TO_EXT_REF 0 
    70 #define LOCK_TO_MIMO_REF 0 
    71 #define LOCK_NONE 1 
    72 #define THEY_LOCK_TO_ME 0 
    73  
    74   timesync_regs->tick_control = 4; 
    75  
    76   // if(I WANT TO LOCK TO A REFERENCE CLOCK)  
    77   if(LOCK_TO_EXT_REF || LOCK_TO_MIMO_REF) { 
    78     // Reg 8, Charge pump on, dig lock det, positive PFD, 47 
    79     ad9510_write_reg(0x08, 0x47); 
    80   } 
    81   else { 
    82     // Reg 8, Charge pump off, dig lock det, positive PFD 
    83     ad9510_write_reg(0x08, 0x00); 
    84   } 
    85    
    86   // Reg 9, Charge pump current, 0x40=3mA, 0x00=650uA 
    87   ad9510_write_reg(0x09, 0x00); 
    88   // Reg A, Prescaler of 2, everything normal 04 
    89   ad9510_write_reg(0x0A, 0x04); 
    90   // Reg B, R Div MSBs, 0 
    91   ad9510_write_reg(0x0B, 0x00); 
    92   // Reg C, R Div LSBs, 1 
    93   ad9510_write_reg(0x0C, 0x01); 
    94   // Reg D, Antibacklash, Digital lock det, 0 
    95  
    96   ad9510_write_reg(0x5A, 0x01); // Update Regs 
    97  
    98   spi_wait(); 
    99  
    100   // Allow for clock switchover 
    101   if (LOCK_NONE) { 
    102     // Disable both ext clk inputs 
    103     output_regs->clk_ctrl = 0x10; 
    104   } 
    105   else if (LOCK_TO_EXT_REF) { 
    106     // turn on ref output and choose the SMA 
    107     output_regs->clk_ctrl = 0x1C;  
    108   } 
    109   else if (LOCK_TO_MIMO_REF) { 
    110     // Turn on ref output and choose the MIMO connector 
    111     output_regs->clk_ctrl = 0x15;   
    112   } 
    113    
    114 #define TEST_CLK 1 
    115 #define REV2 1 
    116 #define HACKED 0 
    117  
    118   // Set up other clocks 
    119   if(TEST_CLK) { 
    120     ad9510_write_reg(0x3C, 0x08); // Turn on output 0 -- Test output 
    121     ad9510_write_reg(0x49, 0x80); // Bypass divider 0 
    122   } else { 
    123     ad9510_write_reg(0x3C, 0x02); // Turn off output 0  
    124   } 
    125  
    126   if (THEY_LOCK_TO_ME) { 
    127     ad9510_write_reg(0x3E, 0x00); // Turn on output 2 (clk_exp_out), normal levels 
    128     ad9510_write_reg(0x4D, 0x00); // Turn on Div2 
    129     ad9510_write_reg(0x4C, 0x44); // Set Div2 = 10, output a 10 MHz clock 
    130   } 
    131   else { 
    132     ad9510_write_reg(0x3E, 0x02); // Turn off output 2 (clk_exp_out) 
    133     ad9510_write_reg(0x4D, 0x80); // Bypass divider 2 
    134   } 
    135    
    136   if(HACKED) {  // Using the indirect ETH Clk 
    137     ad9510_write_reg(0x41, 0x02); // Turn on output 5, LVDS 
    138     ad9510_write_reg(0x52, 0x11); // Div by 4 
    139     ad9510_write_reg(0x53, 0x0); 
    140   } 
    141   else if (REV2) { 
    142     ad9510_write_reg(0x41, 0x01); // Turn off output 5 (phy_clk) 
    143     ad9510_write_reg(0x53, 0x80); // Bypass divider 
    144   } 
    145   else { 
    146     ad9510_write_reg(0x40, 0x01); // Turn off output 4 (phy_clk) 
    147     ad9510_write_reg(0x51, 0x80); // Bypass divider 
    148   } 
    149  
    150   ad9510_write_reg(0x42, 0x01); // Turn off output 6 (db_tx_clk) 
    151   ad9510_write_reg(0x43, 0x01); // Turn off output 7 (db_rx_clk) 
    152   ad9510_write_reg(0x5A, 0x01); // Update Regs 
    153  
    154   // Enable ADCs 
    155   output_regs->adc_ctrl = ADC_CTRL_ON; 
    156    
    157   // Enable clock to ADCs and DACs 
    158   ad9510_write_reg(0x3F, 0x00); // Turn on output 3 (DAC CLK), normal levels 
    159   ad9510_write_reg(0x4F, 0x80); // Bypass Div #3 
    160   if (REV2) { 
    161     //ad9510_write_reg(0x40, 0x08); // Turn on out 4 (ADC clk), CMOS 
    162     ad9510_write_reg(0x40, 0x02); // Turn on out 4 (ADC clk), LVDS 
    163     ad9510_write_reg(0x51, 0x80); // Bypass Div #4 
    164   } else { 
    165     ad9510_write_reg(0x41, 0x08); // Turn on out 5 (ADC clk), CMOS 
    166     ad9510_write_reg(0x53, 0x80); // Bypass Div #5 
    167   } 
    168  
    169   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     55  // set up the default clocks 
     56  clocks_init(); 
    17057 
    17158  // Set up AD9777 DAC