Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 
0003 The Radiotrack radio driver
0004 ===========================
0005 
0006 Author: Stephen M. Benoit <benoits@servicepro.com>
0007 
0008 Date:  Dec 14, 1996
0009 
0010 ACKNOWLEDGMENTS
0011 ----------------
0012 
0013 This document was made based on 'C' code for Linux from Gideon le Grange
0014 (legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from
0015 Frans Brinkman (brinkman@esd.nl) in 1996.  The results reported here are from
0016 experiments that the author performed on his own setup, so your mileage may
0017 vary... I make no guarantees, claims or warranties to the suitability or
0018 validity of this information.  No other documentation on the AIMS
0019 Lab (http://www.aimslab.com/) RadioTrack card was made available to the
0020 author.  This document is offered in the hopes that it might help users who
0021 want to use the RadioTrack card in an environment other than MS Windows.
0022 
0023 WHY THIS DOCUMENT?
0024 ------------------
0025 
0026 I have a RadioTrack card from back when I ran an MS-Windows platform.  After
0027 converting to Linux, I found Gideon le Grange's command-line software for
0028 running the card, and found that it was good!  Frans Brinkman made a
0029 comfortable X-windows interface, and added a scanning feature.  For hack
0030 value, I wanted to see if the tuner could be tuned beyond the usual FM radio
0031 broadcast band, so I could pick up the audio carriers from North American
0032 broadcast TV channels, situated just below and above the 87.0-109.0 MHz range.
0033 I did not get much success, but I learned about programming ioports under
0034 Linux and gained some insights about the hardware design used for the card.
0035 
0036 So, without further delay, here are the details.
0037 
0038 
0039 PHYSICAL DESCRIPTION
0040 --------------------
0041 
0042 The RadioTrack card is an ISA 8-bit FM radio card.  The radio frequency (RF)
0043 input is simply an antenna lead, and the output is a power audio signal
0044 available through a miniature phone plug.  Its RF frequencies of operation are
0045 more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast
0046 band).  Although the registers can be programmed to request frequencies beyond
0047 these limits, experiments did not give promising results.  The variable
0048 frequency oscillator (VFO) that demodulates the intermediate frequency (IF)
0049 signal probably has a small range of useful frequencies, and wraps around or
0050 gets clipped beyond the limits mentioned above.
0051 
0052 
0053 CONTROLLING THE CARD WITH IOPORT
0054 --------------------------------
0055 
0056 The RadioTrack (base) ioport is configurable for 0x30c or 0x20c.  Only one
0057 ioport seems to be involved.  The ioport decoding circuitry must be pretty
0058 simple, as individual ioport bits are directly matched to specific functions
0059 (or blocks) of the radio card.  This way, many functions can be changed in
0060 parallel with one write to the ioport.  The only feedback available through
0061 the ioports appears to be the "Stereo Detect" bit.
0062 
0063 The bits of the ioport are arranged as follows:
0064 
0065 .. code-block:: none
0066 
0067         MSb                                                         LSb
0068         +------+------+------+--------+--------+-------+---------+--------+
0069         | VolA | VolB | ???? | Stereo | Radio  | TuneA | TuneB   | Tune   |
0070         |  (+) |  (-) |      | Detect | Audio  | (bit) | (latch) | Update |
0071         |      |      |      | Enable | Enable |       |         | Enable |
0072         +------+------+------+--------+--------+-------+---------+--------+
0073 
0074 
0075 ====  ====  =================================
0076 VolA  VolB  Description
0077 ====  ====  =================================
0078 0        0  audio mute
0079 0        1  volume +    (some delay required)
0080 1        0  volume -    (some delay required)
0081 1        1  stay at present volume
0082 ====  ====  =================================
0083 
0084 ====================    ===========
0085 Stereo Detect Enable    Description
0086 ====================    ===========
0087 0                       No Detect
0088 1                       Detect
0089 ====================    ===========
0090 
0091 Results available by reading ioport >60 msec after last port write.
0092 
0093   0xff ==> no stereo detected,  0xfd ==> stereo detected.
0094 
0095 =============================   =============================
0096 Radio to Audio (path) Enable    Description
0097 =============================   =============================
0098 0                               Disable path (silence)
0099 1                               Enable path  (audio produced)
0100 =============================   =============================
0101 
0102 =====  =====  ==================
0103 TuneA  TuneB  Description
0104 =====  =====  ==================
0105 0       0     "zero" bit phase 1
0106 0       1     "zero" bit phase 2
0107 1       0     "one" bit phase 1
0108 1       1     "one" bit phase 2
0109 =====  =====  ==================
0110 
0111 
0112 24-bit code, where bits = (freq*40) + 10486188.
0113 The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid.
0114 The bits are shifted in LSb first.
0115 
0116 ==================      ===========================
0117 Tune Update Enable      Description
0118 ==================      ===========================
0119 0                       Tuner held constant
0120 1                       Tuner updating in progress
0121 ==================      ===========================
0122 
0123 
0124 PROGRAMMING EXAMPLES
0125 --------------------
0126 
0127 .. code-block:: none
0128 
0129         Default:        BASE <-- 0xc8  (current volume, no stereo detect,
0130                                         radio enable, tuner adjust disable)
0131 
0132         Card Off:       BASE <-- 0x00  (audio mute, no stereo detect,
0133                                         radio disable, tuner adjust disable)
0134 
0135         Card On:        BASE <-- 0x00  (see "Card Off", clears any unfinished business)
0136                         BASE <-- 0xc8  (see "Default")
0137 
0138         Volume Down:    BASE <-- 0x48  (volume down, no stereo detect,
0139                                         radio enable, tuner adjust disable)
0140                         wait 10 msec
0141                         BASE <-- 0xc8  (see "Default")
0142 
0143         Volume Up:      BASE <-- 0x88  (volume up, no stereo detect,
0144                                         radio enable, tuner adjust disable)
0145                         wait 10 msec
0146                         BASE <-- 0xc8  (see "Default")
0147 
0148         Check Stereo:   BASE <-- 0xd8  (current volume, stereo detect,
0149                                         radio enable, tuner adjust disable)
0150                         wait 100 msec
0151                         x <-- BASE     (read ioport)
0152                         BASE <-- 0xc8  (see "Default")
0153 
0154                         x=0xff ==> "not stereo", x=0xfd ==> "stereo detected"
0155 
0156         Set Frequency:  code = (freq*40) + 10486188
0157                         foreach of the 24 bits in code,
0158                         (from Least to Most Significant):
0159                         to write a "zero" bit,
0160                         BASE <-- 0x01  (audio mute, no stereo detect, radio
0161                                         disable, "zero" bit phase 1, tuner adjust)
0162                         BASE <-- 0x03  (audio mute, no stereo detect, radio
0163                                         disable, "zero" bit phase 2, tuner adjust)
0164                         to write a "one" bit,
0165                         BASE <-- 0x05  (audio mute, no stereo detect, radio
0166                                         disable, "one" bit phase 1, tuner adjust)
0167                         BASE <-- 0x07  (audio mute, no stereo detect, radio
0168                                         disable, "one" bit phase 2, tuner adjust)