123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- NOTES ON RADIOTRACK CARD CONTROL
- by Stephen M. Benoit (benoits@servicepro.com) Dec 14, 1996
- ----------------------------------------------------------------------------
- Document version 1.0
- ACKNOWLEDGMENTS
- ----------------
- This document was made based on 'C' code for Linux from Gideon le Grange
- (legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from
- Frans Brinkman (brinkman@esd.nl) in 1996. The results reported here are from
- experiments that the author performed on his own setup, so your mileage may
- vary... I make no guarantees, claims or warranties to the suitability or
- validity of this information. No other documentation on the AIMS
- Lab (http://www.aimslab.com/) RadioTrack card was made available to the
- author. This document is offered in the hopes that it might help users who
- want to use the RadioTrack card in an environment other than MS Windows.
- WHY THIS DOCUMENT?
- ------------------
- I have a RadioTrack card from back when I ran an MS-Windows platform. After
- converting to Linux, I found Gideon le Grange's command-line software for
- running the card, and found that it was good! Frans Brinkman made a
- comfortable X-windows interface, and added a scanning feature. For hack
- value, I wanted to see if the tuner could be tuned beyond the usual FM radio
- broadcast band, so I could pick up the audio carriers from North American
- broadcast TV channels, situated just below and above the 87.0-109.0 MHz range.
- I did not get much success, but I learned about programming ioports under
- Linux and gained some insights about the hardware design used for the card.
- So, without further delay, here are the details.
- PHYSICAL DESCRIPTION
- --------------------
- The RadioTrack card is an ISA 8-bit FM radio card. The radio frequency (RF)
- input is simply an antenna lead, and the output is a power audio signal
- available through a miniature phone plug. Its RF frequencies of operation are
- more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast
- band). Although the registers can be programmed to request frequencies beyond
- these limits, experiments did not give promising results. The variable
- frequency oscillator (VFO) that demodulates the intermediate frequency (IF)
- signal probably has a small range of useful frequencies, and wraps around or
- gets clipped beyond the limits mentioned above.
- CONTROLLING THE CARD WITH IOPORT
- --------------------------------
- The RadioTrack (base) ioport is configurable for 0x30c or 0x20c. Only one
- ioport seems to be involved. The ioport decoding circuitry must be pretty
- simple, as individual ioport bits are directly matched to specific functions
- (or blocks) of the radio card. This way, many functions can be changed in
- parallel with one write to the ioport. The only feedback available through
- the ioports appears to be the "Stereo Detect" bit.
- The bits of the ioport are arranged as follows:
- MSb LSb
- +------+------+------+--------+--------+-------+---------+--------+
- | VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune |
- | (+) | (-) | | Detect | Audio | (bit) | (latch) | Update |
- | | | | Enable | Enable | | | Enable |
- +------+------+------+--------+--------+-------+---------+--------+
- VolA . VolB [AB......]
- -----------
- 0 0 : audio mute
- 0 1 : volume + (some delay required)
- 1 0 : volume - (some delay required)
- 1 1 : stay at present volume
- Stereo Detect Enable [...S....]
- --------------------
- 0 : No Detect
- 1 : Detect
- Results available by reading ioport >60 msec after last port write.
- 0xff ==> no stereo detected, 0xfd ==> stereo detected.
- Radio to Audio (path) Enable [....R...]
- ----------------------------
- 0 : Disable path (silence)
- 1 : Enable path (audio produced)
- TuneA . TuneB [.....AB.]
- -------------
- 0 0 : "zero" bit phase 1
- 0 1 : "zero" bit phase 2
- 1 0 : "one" bit phase 1
- 1 1 : "one" bit phase 2
- 24-bit code, where bits = (freq*40) + 10486188.
- The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid.
- The bits are shifted in LSb first.
- Tune Update Enable [.......T]
- ------------------
- 0 : Tuner held constant
- 1 : Tuner updating in progress
- PROGRAMMING EXAMPLES
- --------------------
- Default: BASE <-- 0xc8 (current volume, no stereo detect,
- radio enable, tuner adjust disable)
- Card Off: BASE <-- 0x00 (audio mute, no stereo detect,
- radio disable, tuner adjust disable)
- Card On: BASE <-- 0x00 (see "Card Off", clears any unfinished business)
- BASE <-- 0xc8 (see "Default")
- Volume Down: BASE <-- 0x48 (volume down, no stereo detect,
- radio enable, tuner adjust disable)
- * wait 10 msec *
- BASE <-- 0xc8 (see "Default")
- Volume Up: BASE <-- 0x88 (volume up, no stereo detect,
- radio enable, tuner adjust disable)
- * wait 10 msec *
- BASE <-- 0xc8 (see "Default")
- Check Stereo: BASE <-- 0xd8 (current volume, stereo detect,
- radio enable, tuner adjust disable)
- * wait 100 msec *
- x <-- BASE (read ioport)
- BASE <-- 0xc8 (see "Default")
- x=0xff ==> "not stereo", x=0xfd ==> "stereo detected"
- Set Frequency: code = (freq*40) + 10486188
- foreach of the 24 bits in code,
- (from Least to Most Significant):
- to write a "zero" bit,
- BASE <-- 0x01 (audio mute, no stereo detect, radio
- disable, "zero" bit phase 1, tuner adjust)
- BASE <-- 0x03 (audio mute, no stereo detect, radio
- disable, "zero" bit phase 2, tuner adjust)
- to write a "one" bit,
- BASE <-- 0x05 (audio mute, no stereo detect, radio
- disable, "one" bit phase 1, tuner adjust)
- BASE <-- 0x07 (audio mute, no stereo detect, radio
- disable, "one" bit phase 2, tuner adjust)
- ----------------------------------------------------------------------------
|