Difference between revisions of "Quantek QT1010"

From LinuxTVWiki
Jump to: navigation, search
(alternative value)
(calculate_parameters)
 
(14 intermediate revisions by one user not shown)
Line 8: Line 8:
 
==External Links==
 
==External Links==
 
[http://www.quantek-inc.com/qt1010.html QT1010 Product page at qantek-inc.com]
 
[http://www.quantek-inc.com/qt1010.html QT1010 Product page at qantek-inc.com]
 +
 +
==Tuner registers==
 +
 +
Indexed from 0.
 +
 +
{| class="wikitable"
 +
|-
 +
! Index
 +
! Name
 +
! Description
 +
|-
 +
| 1
 +
| OP
 +
| 0x00 = start tuner with programmed registers, 0x80 = set tuner to programming mode
 +
|-
 +
| 5
 +
| VCOBAND
 +
| This controls the frequency operating range of the tuner. Low 4 bits can be 0 or 4, High 4 bits can be 1,3,5,7,9.
 +
|-
 +
| 17
 +
| LNA
 +
| 0xF0 = disable LNA hardware power, used for sleep(), 0xF9 and 0xFD used to enable hardware with LNA on/off
 +
|}
  
 
==Description of how to program the chip==
 
==Description of how to program the chip==
 +
 +
  
 
===Tuner context===
 
===Tuner context===
Line 31: Line 56:
 
===Tuner Init===
 
===Tuner Init===
 
This method has no arguments.
 
This method has no arguments.
 
  
 
* write 0x80 to tuner register 1
 
* write 0x80 to tuner register 1
Line 66: Line 90:
 
* write 0x28 to tuner register 7
 
* write 0x28 to tuner register 7
 
* write 0x0B to tuner register 8
 
* write 0x0B to tuner register 8
* write 0xFD to tuner register 17*
+
* write 0xFD to tuner register 17* (this can be 0x0D in some cases)
 
* write 0x80 to tuner register 1
 
* write 0x80 to tuner register 1
 
* write 0x80 to tuner register 1
 
* write 0x80 to tuner register 1
Line 107: Line 131:
 
* write 0x53 to tuner register 33
 
* write 0x53 to tuner register 33
 
* read tuner register 33 into reg33
 
* read tuner register 33 into reg33
* write 0xFD to tuner register 17*
+
* write 0xFD to tuner register 17*       (this can be 0x0D in some cases)
 
* write 0x34 to tuner register 5
 
* write 0x34 to tuner register 5
 
* write 0x44 to tuner register 6
 
* write 0x44 to tuner register 6
Line 229: Line 253:
 
==== set_frequency ====
 
==== set_frequency ====
  
This method has the frequency argument, called freq and in kHz.
+
This method has the frequency argument, called freq and in Hz.
  
* call set_parameters with freq and try_count equal to 0
+
* call set_parameters with freq and command equal to tune
 
* if reg35 equal to 0xE0
 
* if reg35 equal to 0xE0
** call set_parameters with freq and try_count equal to 2
+
** call set_parameters with freq and command equal to tune_next
 
* if reg35 equal to 0xFF
 
* if reg35 equal to 0xFF
** call set_parameters with freq and try_count equal to 3
+
** call set_parameters with freq and command equal to 3
 
* if reg34 equal to 0xFF
 
* if reg34 equal to 0xFF
** call set_parameters with freq and try_count equal to 1
+
** call set_parameters with freq and command equal to 1
  
 
==== set_parameters ====
 
==== set_parameters ====
arguments freq and try_count
+
arguments freq and command
  
* call calculate_parameters with freq and try_count
+
* call calculate_parameters with freq and command
 
* write 0x80 to tuner register 1
 
* write 0x80 to tuner register 1
 
* write 0x3F to tuner register 2
 
* write 0x3F to tuner register 2
  
* if try_count is equal to 1
+
* if command is equal to tune_next
 
** if reg5 is less then 0x74
 
** if reg5 is less then 0x74
 
*** set reg5_1 to reg_5 plus 0x20
 
*** set reg5_1 to reg_5 plus 0x20
Line 258: Line 282:
 
* write freq_slot6 to tuner register 11
 
* write freq_slot6 to tuner register 11
 
* write 0xE1 to tuner register 12
 
* write 0xE1 to tuner register 12
* write freq_slot7 to tuner register 10
+
* write freq_slot7 to tuner register 26
* write 0x00 to tuner register 11
+
* write 0x00 to tuner register 27
* write freq_slot8 to tuner register 12
+
* write freq_slot8 to tuner register 28
 +
* write 0xFD to tuner register 17*
 +
* write 0x91 to tuner register 18*
 +
 
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
* write 0x80 to tuner register 1
 +
 
 +
* if reg5_1 is equal to 0x34
 +
** if freq_slot12 is larger equal to 0xF0
 +
*** if freq_slot12 is less equal to 0xFA
 +
**** write freq_slot12 minus 0x20 into freq_slot12
 +
*** else
 +
**** write 0xDA into freq_slot12
 +
** else
 +
*** write 0xD0 into freq_slot12
 +
** write freq_slot12 into tmp_var1
 +
* else
 +
** write 0xD0 into tmp_var1
 +
 
 +
* write tmp_var1 to tuner register 34
 +
* write 0x00 to tuner register 30
 +
* write 0xD0 to tuner register 30
 +
 
 +
* loop 30 times
 +
** read tuner register 34
 +
** if register 34 bit 6 is set
 +
*** break out of loop
 +
 
 +
* write 0x00 to tuner register 30
 +
* read tuner register 34 into reg34
 +
* if reg34 is less equal to 0xFE
 +
** write reg34 plus 1 to tuner register 34
 +
* read tuner register 5 into reg5
 +
* read tuner register 34 into reg34
 +
* write 0xD0 to tuner register 35
 +
* write 0x00 to tuner register 30
 +
* write 0xE0 to tuner register 30
 +
 
 +
* loop 30 times
 +
** read tuner register 35
 +
** if register 35 bit 6 is set
 +
*** break out of loop
 +
 
 +
* read tuner register 35 into reg35
 +
* write 0x00 to tuner register 30
 +
* write 0xD0 to tuner register 36
 +
* write 0x00 to tuner register 30
 +
* write 0xF0 to tuner register 30
 +
 
 +
* loop 30 times
 +
** read tuner register 36
 +
** if register 36 bit 6 is set
 +
*** break out of loop
 +
 
 +
* write 0x00 to tuner register 30
 +
* write 0x7F to tuner register 20
 +
* write 0x7F to tuner register 21
 +
 
 +
* if command is equal to tune_next
 +
** if reg5 is less equalt to 0x74
 +
*** write reg5 minus 4 into reg5_3
 +
* write reg5_3 to tuner register 5
 +
* write 0x00 to tuner register 6
 +
* write 0x1F to tuner register 21
 +
* write 0xFF to tuner register 22
 +
* write 0xFF to tuner register 24
 +
 
 +
* if reg31 is greater equal to 0x50
 +
** write 0x50 into reg31
 +
* if reg32 is greater equal to 0x12
 +
** write 0x12 into reg32
 +
 
 +
* write reg31 plus freq_slot10 to tuner register 31
 +
* write reg32 plus freq_slot11 to tuner register 32
 +
* write reg33 to tuner register 33
 +
* write reg37 to tuner register 37
 +
* write reg38 to tuner register 38
 +
 
 +
* write 0x96 to tuner register 0
 +
* write 0x00 to tuner register 2
 +
* write 0x00 to tuner register 1
 +
 
 +
==== calculate_parameters ====
 +
Not complete yet*
 +
 
 +
arguments freq (in Hz) and command
 +
 
 +
* if freq is less then 60000000 or greater then 900000000
 +
** return error
 +
 
 +
* if command is equal to tune_next
 +
** write g_prev_command to cmd_tmp
 +
* else
 +
** write command to g_prev_command
 +
 
 +
* write 36125000 to IF
 +
* write 1232000000 to X
 +
* write 920000000 to Y
 +
* write ((freq + X) divided by 4) plus 500000) to Z
 +
* write (1000000 * Z) divided by 1000000 to T1
 +
* write (4000000* Z) divided by 1000000 - Y - freq to T2
 +
* write (4000000* Z) divided by 1000000 - Y - freq - IF to T3
 +
* write T3 divided by 4000000 to T4
 +
* write T3 divided by 4 to T5
 +
* write T1 modulus 8000000 divided by 1000000 to T6
 +
* write (((T5 plus 15777216 multiplied by T4) multiplied by 16) plus 500000) divided by 1000000 to T7
 +
 
 +
* write T4 to freq_slot5
 +
* write T7 truncated to 8 bits to freq_slot7
 +
* write 2 multiplied by (T7 shifted left 8) + 137 to freq_slot8
 +
 
 +
===Tuner On/Off===
 +
This method has 1 argument, curr set to either 0 or 1
 +
 
 +
==== set_tuner_off ====
 +
 
 +
* write 0x80 to tuner register 1
 +
 
 +
* if curr is 1
 +
** read tuner register 17 into tmp
 +
** write tmp logical and 0xF0 into tmp
 +
** write tmp to tuner register 17
 +
* write 0x7F to tuner register 2
 +
* read tuner register 5 into tmp
 +
* write tmp logical or 0xF into tmp
 +
* write tmp to tuner register 5
 +
* write 0xFF to tuner register 6
 +
 
 +
* write 0x00 to tuner register 1
 +
 
 +
==== set_tuner_on ====
 +
 
 +
* write 0x80 to tuner register 1
  
 +
* write 0x00 to tuner register 2
 +
* read tuner register 5 into tmp
 +
* write tmp logical and 0xF0 into tmp
 +
* write tmp to tuner register 5
 +
* write 0x00 to tuner register 6
  
 +
* write 0x00 to tuner register 1
 
[[Category:Tuners]]
 
[[Category:Tuners]]

Latest revision as of 13:56, 2 March 2010

The Quantek QT1010 is a wideband tuner chip.

Features

  • 48MHz-860MHz frequency range (bands I, II, III, IV).
  • 30MHz-60MHz IF output range.
  • NTSC, PAL, SECAM broadcast formats.
  • DVB-C, DVB-T, ATSC and ISDB-T support.

External Links

QT1010 Product page at qantek-inc.com

Tuner registers

Indexed from 0.

Index Name Description
1 OP 0x00 = start tuner with programmed registers, 0x80 = set tuner to programming mode
5 VCOBAND This controls the frequency operating range of the tuner. Low 4 bits can be 0 or 4, High 4 bits can be 1,3,5,7,9.
17 LNA 0xF0 = disable LNA hardware power, used for sleep(), 0xF9 and 0xFD used to enable hardware with LNA on/off

Description of how to program the chip

Tuner context

The tuner has a global context for some variables. They can be used anytime in the init and set methods.

  • reg31
  • reg32
  • reg34
  • reg34_1
  • reg34_2
  • reg34_3
  • reg34_4
  • reg34_5
  • reg34_6
  • reg34_7
  • reg34_8
  • reg37
  • reg38

Tuner Init

This method has no arguments.

  • write 0x80 to tuner register 1
  • write 0x84 to tuner register 13
  • write 0xB4 to tuner register 14* (or 0xB7 might work better on some older devices)
  • write 0x23 to tuner register 42
  • write 0xDC to tuner register 44
  • write 0x40 to tuner register 37
  • write 0x00 to tuner register 30
  • write 0x81 to tuner register 30
  • loop 30 times
    • read tuner register 37 into reg37
    • if reg37 bit 8 is set
      • break out of loop
  • read tuner register 37 into reg37
  • write 0x00 to tuner register 30
  • write 0x23 to tuner register 42
  • write 0x70 to tuner register 43
  • write 0x08 to tuner register 38
  • write 0x00 to tuner register 30
  • write 0x82 to tuner register 30
  • loop 30 times
    • read tuner register 38 into reg38
    • if reg38 bit 5 is set
      • break out of loop
  • read tuner register 38 into reg38
  • write 0x00 to tuner register 30
  • write 0x14 to tuner register 5
  • write 0x44 to tuner register 6
  • write 0x28 to tuner register 7
  • write 0x0B to tuner register 8
  • write 0xFD to tuner register 17* (this can be 0x0D in some cases)
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x0D to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • write 0x40 to tuner register 6
  • write 0xF0 to tuner register 22
  • write 0x38 to tuner register 2
  • write 0x19 to tuner register 3
  • write 0x20 to tuner register 31
  • write 0xE0 to tuner register 32
  • write 0x00 to tuner register 30
  • write 0x84 to tuner register 30
  • loop 30 times
    • read tuner register 31 into reg31
    • if register 31 bit 7 is set
      • break out of loop
  • read tuner register 31 into reg31
  • read tuner register 32 into reg32
  • write 0x00 to tuner register 30
  • write 0x3F to tuner register 2
  • write 0x53 to tuner register 33
  • read tuner register 33 into reg33
  • write 0xFD to tuner register 17* (this can be 0x0D in some cases)
  • write 0x34 to tuner register 5
  • write 0x44 to tuner register 6
  • write 0x31 to tuner register 7
  • write 0x08 to tuner register 8
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_1
  • write 0x32 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_2
  • write 0x33 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30


  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_3
  • write 0x34 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_4
  • write 0x35 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30


  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_5
  • write 0x36 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_6
  • write 0x37 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30


  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_7
  • write 0x38 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34_8
  • write 0x39 to tuner register 7
  • write 0xD0 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0xD0 to tuner register 30
  • read tuner register 34 into reg34

Tuner set frequency

The frequency set method has one sub-method and one subsub-method.

set_frequency

This method has the frequency argument, called freq and in Hz.

  • call set_parameters with freq and command equal to tune
  • if reg35 equal to 0xE0
    • call set_parameters with freq and command equal to tune_next
  • if reg35 equal to 0xFF
    • call set_parameters with freq and command equal to 3
  • if reg34 equal to 0xFF
    • call set_parameters with freq and command equal to 1

set_parameters

arguments freq and command

  • call calculate_parameters with freq and command
  • write 0x80 to tuner register 1
  • write 0x3F to tuner register 2
  • if command is equal to tune_next
    • if reg5 is less then 0x74
      • set reg5_1 to reg_5 plus 0x20
  • write reg5_1 to tuner register 5
  • write 0x44 to tuner register 6
  • write freq_slot2 to tuner register 7
  • write freq_slot1 to tuner register 8
  • write freq_slot4 to tuner register 9
  • write freq_slot5 to tuner register 10
  • write freq_slot6 to tuner register 11
  • write 0xE1 to tuner register 12
  • write freq_slot7 to tuner register 26
  • write 0x00 to tuner register 27
  • write freq_slot8 to tuner register 28
  • write 0xFD to tuner register 17*
  • write 0x91 to tuner register 18*
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • write 0x80 to tuner register 1
  • if reg5_1 is equal to 0x34
    • if freq_slot12 is larger equal to 0xF0
      • if freq_slot12 is less equal to 0xFA
        • write freq_slot12 minus 0x20 into freq_slot12
      • else
        • write 0xDA into freq_slot12
    • else
      • write 0xD0 into freq_slot12
    • write freq_slot12 into tmp_var1
  • else
    • write 0xD0 into tmp_var1
  • write tmp_var1 to tuner register 34
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 30
  • loop 30 times
    • read tuner register 34
    • if register 34 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • read tuner register 34 into reg34
  • if reg34 is less equal to 0xFE
    • write reg34 plus 1 to tuner register 34
  • read tuner register 5 into reg5
  • read tuner register 34 into reg34
  • write 0xD0 to tuner register 35
  • write 0x00 to tuner register 30
  • write 0xE0 to tuner register 30
  • loop 30 times
    • read tuner register 35
    • if register 35 bit 6 is set
      • break out of loop
  • read tuner register 35 into reg35
  • write 0x00 to tuner register 30
  • write 0xD0 to tuner register 36
  • write 0x00 to tuner register 30
  • write 0xF0 to tuner register 30
  • loop 30 times
    • read tuner register 36
    • if register 36 bit 6 is set
      • break out of loop
  • write 0x00 to tuner register 30
  • write 0x7F to tuner register 20
  • write 0x7F to tuner register 21
  • if command is equal to tune_next
    • if reg5 is less equalt to 0x74
      • write reg5 minus 4 into reg5_3
  • write reg5_3 to tuner register 5
  • write 0x00 to tuner register 6
  • write 0x1F to tuner register 21
  • write 0xFF to tuner register 22
  • write 0xFF to tuner register 24
  • if reg31 is greater equal to 0x50
    • write 0x50 into reg31
  • if reg32 is greater equal to 0x12
    • write 0x12 into reg32
  • write reg31 plus freq_slot10 to tuner register 31
  • write reg32 plus freq_slot11 to tuner register 32
  • write reg33 to tuner register 33
  • write reg37 to tuner register 37
  • write reg38 to tuner register 38
  • write 0x96 to tuner register 0
  • write 0x00 to tuner register 2
  • write 0x00 to tuner register 1

calculate_parameters

Not complete yet*

arguments freq (in Hz) and command

  • if freq is less then 60000000 or greater then 900000000
    • return error
  • if command is equal to tune_next
    • write g_prev_command to cmd_tmp
  • else
    • write command to g_prev_command
  • write 36125000 to IF
  • write 1232000000 to X
  • write 920000000 to Y
  • write ((freq + X) divided by 4) plus 500000) to Z
  • write (1000000 * Z) divided by 1000000 to T1
  • write (4000000* Z) divided by 1000000 - Y - freq to T2
  • write (4000000* Z) divided by 1000000 - Y - freq - IF to T3
  • write T3 divided by 4000000 to T4
  • write T3 divided by 4 to T5
  • write T1 modulus 8000000 divided by 1000000 to T6
  • write (((T5 plus 15777216 multiplied by T4) multiplied by 16) plus 500000) divided by 1000000 to T7
  • write T4 to freq_slot5
  • write T7 truncated to 8 bits to freq_slot7
  • write 2 multiplied by (T7 shifted left 8) + 137 to freq_slot8

Tuner On/Off

This method has 1 argument, curr set to either 0 or 1

set_tuner_off

  • write 0x80 to tuner register 1
  • if curr is 1
    • read tuner register 17 into tmp
    • write tmp logical and 0xF0 into tmp
    • write tmp to tuner register 17
  • write 0x7F to tuner register 2
  • read tuner register 5 into tmp
  • write tmp logical or 0xF into tmp
  • write tmp to tuner register 5
  • write 0xFF to tuner register 6
  • write 0x00 to tuner register 1

set_tuner_on

  • write 0x80 to tuner register 1
  • write 0x00 to tuner register 2
  • read tuner register 5 into tmp
  • write tmp logical and 0xF0 into tmp
  • write tmp to tuner register 5
  • write 0x00 to tuner register 6
  • write 0x00 to tuner register 1