Imported Upstream version 3.0
[debian/gnuradio] / gnuradio-core / src / lib / io / sdr_1000.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2003 Free Software Foundation, Inc.
4  * 
5  * This file is part of GNU Radio
6  * 
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  * 
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Radio; see the file COPYING.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #include <sdr_1000.h>
24 #include <ppio.h>
25
26 sdr_1000_base::sdr_1000_base (int which_pp)
27 {
28   d_ppio = make_ppio (which_pp);
29   d_shadow[0] = 0;
30   d_shadow[1] = 0;
31   d_shadow[2] = 0;
32   d_shadow[3] = 0;
33   reset ();
34 }
35
36 sdr_1000_base::~sdr_1000_base ()
37 {
38 }
39
40 void
41 sdr_1000_base::reset ()
42 {
43   d_ppio->lock ();
44   d_ppio->write_control (0x0F);
45   d_ppio->unlock ();
46   write_latch (L_EXT,  0x00, 0xff);
47   write_latch (L_BAND, 0x00, 0xff);
48   write_latch (L_DDS0, 0x80, 0xff);     // hold DDS in reset
49   write_latch (L_DDS1, 0x00, 0xff);
50 }
51
52   
53 void
54 sdr_1000_base::write_latch (int which, int value, int mask)
55 {
56   if (!(0 <= which && which <= 3))
57     return;
58   
59   d_ppio->lock ();
60   d_shadow[which] = (d_shadow[which] & ~mask) | (value & mask);
61   d_ppio->write_data (d_shadow[which]);
62   d_ppio->write_control (0x0F ^ (1 << which));
63   d_ppio->write_control (0x0F);
64   d_ppio->unlock ();
65 }