Changeset 9780

Show
Ignore:
Timestamp:
10/11/08 18:26:16
Author:
matt
Message:

refactored divider setting on rxdb clk, txdb clk, and test clk

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gnuradio/trunk/usrp2/firmware/apps/txrx.c

    r9528 r9780  
    3636#include <stdlib.h> 
    3737#include <string.h> 
    38  
     38#include "clocks.h" 
    3939 
    4040#define FW_SETS_SEQNO   1       // define to 0 or 1 (FIXME must be 1 for now) 
  • gnuradio/trunk/usrp2/firmware/lib/clocks.c

    r9778 r9780  
    5353  // Set up other clocks 
    5454 
    55   clocks_enable_test_clk(false); 
     55  clocks_enable_test_clk(false, 0); 
    5656  clocks_enable_tx_dboard(false, 0); 
    5757  clocks_enable_rx_dboard(false, 0); 
     
    129129} 
    130130 
    131 void 
    132 clocks_enable_test_clk(bool enable
     131int inline 
     132clocks_gen_div(int divisor
    133133{ 
    134   if (enable){ 
    135     ad9510_write_reg(0x3C, 0x08); // Turn on output 0 -- Test output 
    136     ad9510_write_reg(0x49, 0x80); // Bypass divider 0 
     134  int L,H; 
     135  L = (divisor>>1)-1; 
     136  H = divisor-L-2; 
     137  return (L<<4)|H; 
     138
     139 
     140#define CLOCK_OUT_EN 0x08 
     141#define CLOCK_OUT_DIS_CMOS 0x01 
     142#define CLOCK_OUT_DIS_PECL 0x02 
     143#define CLOCK_DIV_DIS 0x80 
     144#define CLOCK_DIV_EN 0x00 
     145 
     146void  
     147clocks_enable_XXX_clk(bool enable, int divisor, int reg_en, int reg_div, int val_off) 
     148
     149  if(enable) { 
     150    ad9510_write_reg(reg_en,CLOCK_OUT_EN);     // Turn on output, normal levels 
     151    if(divisor>1) { 
     152      ad9510_write_reg(reg_div,clocks_gen_div(divisor)); // Set divisor 
     153      ad9510_write_reg(reg_div+1,CLOCK_DIV_EN);   // Enable divider 
     154    } 
     155    else { 
     156      ad9510_write_reg(reg_div+1,CLOCK_DIV_DIS);  // Disable Divider 
     157    } 
    137158  } 
    138159  else { 
    139     ad9510_write_reg(0x3C, 0x02); // Turn off output 0  
     160    ad9510_write_reg(reg_en,val_off);  // Power off output (val different for PECL/CMOS) 
     161    ad9510_write_reg(reg_div+1,CLOCK_DIV_DIS);  // Bypass Divider to power it down 
    140162  } 
    141   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     163  ad9510_write_reg(0x5A, 0x01); // Update Regs 
    142164} 
    143165 
     166void 
     167clocks_enable_test_clk(bool enable, int divisor) 
     168{ 
     169  clocks_enable_XXX_clk(enable,divisor,0x3C,0x48,CLOCK_OUT_DIS_PECL); 
     170} 
    144171 
    145172void 
    146173clocks_enable_rx_dboard(bool enable, int divisor) 
    147174{ 
    148   if (enable){ 
    149     ad9510_write_reg(0x43, 0x08); // enable output 7 (db_rx_clk), CMOS 
    150  
    151     if (divisor == 0){ 
    152       ad9510_write_reg(0x57, 0x80); // Bypass Div #7, 100 MHz clock 
    153     } 
    154     else { 
    155       // FIXME Matt, do something with divisor... 
    156     } 
    157   } 
    158   else { 
    159     ad9510_write_reg(0x43, 0x01); // Turn off output 7 (db_rx_clk) 
    160   } 
    161   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     175  clocks_enable_XXX_clk(enable,divisor,0x43,0x56,CLOCK_OUT_DIS_CMOS); 
    162176} 
    163  
    164177 
    165178void 
    166179clocks_enable_tx_dboard(bool enable, int divisor) 
    167180{ 
    168   if (enable){ 
    169     ad9510_write_reg(0x42, 0x08);    // enable output 6 (db_tx_clk), CMOS 
    170     if (divisor == 0) { 
    171       ad9510_write_reg(0x55, 0x80);  // Bypass Div #6, 100 MHz clock 
    172     } 
    173     else { 
    174       // FIXME Matt, do something with divisor 
    175     } 
    176   } 
    177   else { 
    178     ad9510_write_reg(0x42, 0x01); // Turn off output 6 (db_tx_clk) 
    179   } 
    180   ad9510_write_reg(0x5A, 0x01); // Update Regs 
     181  clocks_enable_XXX_clk(enable,divisor,0x42,0x54,CLOCK_OUT_DIS_CMOS); 
    181182} 
  • gnuradio/trunk/usrp2/firmware/lib/clocks.h

    r9528 r9780  
    4747 * \brief Enable or disable test clock (extra clock signal) 
    4848 */ 
    49 void clocks_enable_test_clk(bool enable); 
     49void clocks_enable_test_clk(bool enable, int divisor); 
    5050 
    5151/*! 
  • gnuradio/trunk/usrp2/firmware/lib/u2_init.c

    r9708 r9780  
    6767  clocks_init(); 
    6868 
    69   // clocks_enable_test_clk(true); 
     69  // clocks_enable_test_clk(true,1); 
    7070 
    7171  // Enable ADCs