9.1.7. Radiotrack 無線電驅動程式¶
作者:Stephen M. Benoit <benoits@servicepro.com>
日期:1996 年 12 月 14 日
9.1.7.1. 致謝¶
本文件基於 Gideon le Grange(legrang@active.co.za 或 legrang@cs.sun.ac.za)於 1994 年編寫的 Linux 'C' 程式碼,以及 Frans Brinkman(brinkman@esd.nl)於 1996 年編寫的詳細說明。 這裡報告的結果是作者在他自己的設定上進行的實驗得出的,因此您的結果可能會有所不同...... 我對這些資訊的適用性或有效性不做任何保證、宣告或擔保。 作者沒有獲得 AIMS Lab(http://www.aimslab.com/)RadioTrack 卡的任何其他文件。 提供本文件是為了幫助希望在 MS Windows 以外的環境中使用 RadioTrack 卡的使用者。
9.1.7.2. 為什麼要編寫本文件?¶
我有一張 RadioTrack 卡,當時我執行的是 MS-Windows 平臺。 轉換為 Linux 後,我找到了 Gideon le Grange 的命令列軟體來執行該卡,發現它很棒! Frans Brinkman 製作了一個舒適的 X-windows 介面,並添加了掃描功能。 出於破解的目的,我想看看調諧器是否可以調諧到超出通常的 FM 廣播頻段的頻率,這樣我就可以接收到北美廣播電影片道的音訊載波,這些頻道位於 87.0-109.0 MHz 範圍的下方和上方。 我沒有取得太大的成功,但我瞭解瞭如何在 Linux 下程式設計 ioport,並對該卡使用的硬體設計有了一些瞭解。
因此,事不宜遲,以下是詳細資訊。
9.1.7.3. 物理描述¶
RadioTrack 卡是一張 ISA 8 位 FM 無線電卡。 射頻 (RF) 輸入只是一個天線引線,輸出是透過微型電話插頭提供的功率音訊訊號。 它的射頻工作頻率或多或少地限制在 87.0 到 109.0 MHz(商業 FM 廣播頻段)之間。 雖然可以對暫存器進行程式設計以請求超出這些限制的頻率,但實驗沒有給出有希望的結果。 解調中頻 (IF) 訊號的可變頻率振盪器 (VFO) 可能具有較小的有用頻率範圍,並且超出上述限制時會迴繞或被削波。
9.1.7.4. 使用 IOPORT 控制卡¶
RadioTrack(基本)ioport 可配置為 0x30c 或 0x20c。 似乎只涉及一個 ioport。 ioport 解碼電路一定非常簡單,因為各個 ioport 位直接與無線電卡的特定功能(或塊)匹配。 這樣,可以透過一次寫入 ioport 並行更改許多功能。 透過 ioport 提供的唯一反饋似乎是“立體聲檢測”位。
ioport 的位排列如下
MSb LSb
+------+------+------+--------+--------+-------+---------+--------+
| VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune |
| (+) | (-) | | Detect | Audio | (bit) | (latch) | Update |
| | | | Enable | Enable | | | Enable |
+------+------+------+--------+--------+-------+---------+--------+
VolA |
VolB |
描述 |
|---|---|---|
0 |
0 |
音訊靜音 |
0 |
1 |
音量 +(需要一些延遲) |
1 |
0 |
音量 -(需要一些延遲) |
1 |
1 |
保持當前音量 |
立體聲檢測啟用 |
描述 |
|---|---|
0 |
未檢測到 |
1 |
檢測到 |
在上次埠寫入後 >60 毫秒讀取 ioport 時,結果可用。
0xff ==> 未檢測到立體聲,0xfd ==> 檢測到立體聲。
無線電到音訊(路徑)啟用 |
描述 |
|---|---|
0 |
停用路徑(靜音) |
1 |
啟用路徑(產生音訊) |
TuneA |
TuneB |
描述 |
|---|---|---|
0 |
0 |
“零”位階段 1 |
0 |
1 |
“零”位階段 2 |
1 |
0 |
“一”位階段 1 |
1 |
1 |
“一”位階段 2 |
24 位程式碼,其中 bits = (freq*40) + 10486188。最高有效 11 位必須為 1010 xxxx 0x0 才能有效。 這些位首先按 LSb 移入。
調整更新啟用 |
描述 |
|---|---|
0 |
調諧器保持恆定 |
1 |
調諧器正在更新 |
9.1.7.5. 程式設計示例¶
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)