radiotrack.rst 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. .. SPDX-License-Identifier: GPL-2.0
  2. The Radiotrack radio driver
  3. ===========================
  4. Author: Stephen M. Benoit <[email protected]>
  5. Date: Dec 14, 1996
  6. ACKNOWLEDGMENTS
  7. ----------------
  8. This document was made based on 'C' code for Linux from Gideon le Grange
  9. ([email protected] or [email protected]) in 1994, and elaborations from
  10. Frans Brinkman ([email protected]) in 1996. The results reported here are from
  11. experiments that the author performed on his own setup, so your mileage may
  12. vary... I make no guarantees, claims or warranties to the suitability or
  13. validity of this information. No other documentation on the AIMS
  14. Lab (http://www.aimslab.com/) RadioTrack card was made available to the
  15. author. This document is offered in the hopes that it might help users who
  16. want to use the RadioTrack card in an environment other than MS Windows.
  17. WHY THIS DOCUMENT?
  18. ------------------
  19. I have a RadioTrack card from back when I ran an MS-Windows platform. After
  20. converting to Linux, I found Gideon le Grange's command-line software for
  21. running the card, and found that it was good! Frans Brinkman made a
  22. comfortable X-windows interface, and added a scanning feature. For hack
  23. value, I wanted to see if the tuner could be tuned beyond the usual FM radio
  24. broadcast band, so I could pick up the audio carriers from North American
  25. broadcast TV channels, situated just below and above the 87.0-109.0 MHz range.
  26. I did not get much success, but I learned about programming ioports under
  27. Linux and gained some insights about the hardware design used for the card.
  28. So, without further delay, here are the details.
  29. PHYSICAL DESCRIPTION
  30. --------------------
  31. The RadioTrack card is an ISA 8-bit FM radio card. The radio frequency (RF)
  32. input is simply an antenna lead, and the output is a power audio signal
  33. available through a miniature phone plug. Its RF frequencies of operation are
  34. more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast
  35. band). Although the registers can be programmed to request frequencies beyond
  36. these limits, experiments did not give promising results. The variable
  37. frequency oscillator (VFO) that demodulates the intermediate frequency (IF)
  38. signal probably has a small range of useful frequencies, and wraps around or
  39. gets clipped beyond the limits mentioned above.
  40. CONTROLLING THE CARD WITH IOPORT
  41. --------------------------------
  42. The RadioTrack (base) ioport is configurable for 0x30c or 0x20c. Only one
  43. ioport seems to be involved. The ioport decoding circuitry must be pretty
  44. simple, as individual ioport bits are directly matched to specific functions
  45. (or blocks) of the radio card. This way, many functions can be changed in
  46. parallel with one write to the ioport. The only feedback available through
  47. the ioports appears to be the "Stereo Detect" bit.
  48. The bits of the ioport are arranged as follows:
  49. .. code-block:: none
  50. MSb LSb
  51. +------+------+------+--------+--------+-------+---------+--------+
  52. | VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune |
  53. | (+) | (-) | | Detect | Audio | (bit) | (latch) | Update |
  54. | | | | Enable | Enable | | | Enable |
  55. +------+------+------+--------+--------+-------+---------+--------+
  56. ==== ==== =================================
  57. VolA VolB Description
  58. ==== ==== =================================
  59. 0 0 audio mute
  60. 0 1 volume + (some delay required)
  61. 1 0 volume - (some delay required)
  62. 1 1 stay at present volume
  63. ==== ==== =================================
  64. ==================== ===========
  65. Stereo Detect Enable Description
  66. ==================== ===========
  67. 0 No Detect
  68. 1 Detect
  69. ==================== ===========
  70. Results available by reading ioport >60 msec after last port write.
  71. 0xff ==> no stereo detected, 0xfd ==> stereo detected.
  72. ============================= =============================
  73. Radio to Audio (path) Enable Description
  74. ============================= =============================
  75. 0 Disable path (silence)
  76. 1 Enable path (audio produced)
  77. ============================= =============================
  78. ===== ===== ==================
  79. TuneA TuneB Description
  80. ===== ===== ==================
  81. 0 0 "zero" bit phase 1
  82. 0 1 "zero" bit phase 2
  83. 1 0 "one" bit phase 1
  84. 1 1 "one" bit phase 2
  85. ===== ===== ==================
  86. 24-bit code, where bits = (freq*40) + 10486188.
  87. The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid.
  88. The bits are shifted in LSb first.
  89. ================== ===========================
  90. Tune Update Enable Description
  91. ================== ===========================
  92. 0 Tuner held constant
  93. 1 Tuner updating in progress
  94. ================== ===========================
  95. PROGRAMMING EXAMPLES
  96. --------------------
  97. .. code-block:: none
  98. Default: BASE <-- 0xc8 (current volume, no stereo detect,
  99. radio enable, tuner adjust disable)
  100. Card Off: BASE <-- 0x00 (audio mute, no stereo detect,
  101. radio disable, tuner adjust disable)
  102. Card On: BASE <-- 0x00 (see "Card Off", clears any unfinished business)
  103. BASE <-- 0xc8 (see "Default")
  104. Volume Down: BASE <-- 0x48 (volume down, no stereo detect,
  105. radio enable, tuner adjust disable)
  106. wait 10 msec
  107. BASE <-- 0xc8 (see "Default")
  108. Volume Up: BASE <-- 0x88 (volume up, no stereo detect,
  109. radio enable, tuner adjust disable)
  110. wait 10 msec
  111. BASE <-- 0xc8 (see "Default")
  112. Check Stereo: BASE <-- 0xd8 (current volume, stereo detect,
  113. radio enable, tuner adjust disable)
  114. wait 100 msec
  115. x <-- BASE (read ioport)
  116. BASE <-- 0xc8 (see "Default")
  117. x=0xff ==> "not stereo", x=0xfd ==> "stereo detected"
  118. Set Frequency: code = (freq*40) + 10486188
  119. foreach of the 24 bits in code,
  120. (from Least to Most Significant):
  121. to write a "zero" bit,
  122. BASE <-- 0x01 (audio mute, no stereo detect, radio
  123. disable, "zero" bit phase 1, tuner adjust)
  124. BASE <-- 0x03 (audio mute, no stereo detect, radio
  125. disable, "zero" bit phase 2, tuner adjust)
  126. to write a "one" bit,
  127. BASE <-- 0x05 (audio mute, no stereo detect, radio
  128. disable, "one" bit phase 1, tuner adjust)
  129. BASE <-- 0x07 (audio mute, no stereo detect, radio
  130. disable, "one" bit phase 2, tuner adjust)