你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103学习笔记(2)——收音机模块TEA5767使用

[复制链接]
STMCU小助手 发布时间:2023-1-3 17:48

一、简介

TEA5767是由菲利普公司推出的一款低功耗立体声收音机接收器芯片。频率范围从76-108MHz自动数字调谐。高灵敏度,高稳定性,低噪音,收音模块。一片低功耗电调谐调频立体声收音机电路,其内部集成了中频选频和解调网络,可以做到完全免调。

电源 5V
& u1 S3 g: q) R" hI2C 总线通讯
& J. A! G1 H8 u- U, h2 v可以使用软件进行静音和消除噪音

5 j! _1 q  F% c/ n9 F# e
二、硬件连接' y9 y+ R( g' t6 p- g
功能口    引脚- q1 ^" i( _2 _
SCL    PB.6* \1 Q8 F/ X( ?, A5 [
SDA    PB.5

( U/ W9 {1 |0 y/ W
三、添加I2C驱动8 I; j( M' o$ O

3 h+ n, s( @0 ^# ~0 e

四、移植文件) n0 ~! ~9 Y3 W' x
注意:以下出现缺失common.h文件错误,去除即可。uint8改为uint8_t或unsigned char或自己宏定义
4 |9 a9 J8 ^( u: n6 n
! V* m& d* B$ a将 board_i2c.c、board_i2c.h、board_tea5767.c 、 board_tea5767.h 四个文件加入到工程

4 j) Q$ i* C( q: K2 Q7 Q

4.1 board_tea5767.c
; }; C, a$ U3 z1 \

  1. /*********************************************************************
    % R' C: z, w/ w+ M3 }
  2. * INCLUDES# E* ?9 k, a1 T3 }! g; s
  3. */
      w% L( m2 \, x: p1 T/ \8 A6 G8 T9 o8 @
  4. #include "stdlib.h"" X) [, U( ^0 X& C* b* B
  5. #include "stm32f10x.h"
      P8 y' g6 U+ j3 {2 W5 O' i) F: E
  6. ! ^7 L  e% v% C: K" h" u
  7. #include "board_i2c.h" 4 {4 S5 D  H- i; y2 L: b1 {) v
  8. #include "board_tea5767.h" 6 y/ Y3 Q7 [, [4 W
  9. #include "common.h"
    * r& l; C: r0 r# x9 r3 K
  10. 0 W# j$ u( b. V- D% ]
  11. /*********************************************************************# n8 D! ^$ l! B$ B# V/ f
  12. * GLOBAL VARIABLES
    : S  @( b$ M* v6 Y5 T
  13. */
    0 s& |7 o. {/ D( x
  14. unsigned long g_frequency = TEA5767_MIN_KHZ;
    . c% ~  K3 G) K, D+ V# Z/ J

  15. # v* ^0 z- N. l8 Z5 e- t6 w
  16. /*********************************************************************
    : x  i' x/ k% `& Z
  17. * LOCAL VARIABLES
    . _2 ^9 B! W1 e0 h! w' c& @) n' L
  18. */                                    
    " x, w9 @% I" j+ J. o
  19. static uint8 s_radioWriteData[5] = {0x31,0xA0,0x20,0x11,0x00};          // 要写入TEA5767的数据,默认存台的PLL,104.3MHz
    : t) m; E0 I) C& V% x" A
  20. static uint8 s_radioReadData[5] = {0};                                  // TEA5767读出的状态
    + t3 ?8 Z& `3 k. w7 v& N
  21. static uint32 s_pll = 0;2 j* p6 L: I8 u5 s

  22. # B' h* H: h. A5 ]4 ]" c
  23. /*********************************************************************
    . h% b9 o1 R( S' x8 l0 Q
  24. * PUBLIC FUNCTIONS
    0 {% ~+ q# g7 w. |$ s
  25. */1 B6 x: E8 V- U/ l) D- `  D
  26. /**9 {6 ]* L9 F& D; f9 A, N, c- y# y
  27. @brief 向TEA5767写入5个字节数据0 }( i6 P5 s# W7 S4 i( S
  28. @param 无. g5 N( L& X0 E: K6 u
  29. @return 无  x- ~4 l" g1 z' s! E
  30. */- @/ r% z9 h2 e9 P* W! v6 A
  31. void TEA5767_Write(void)& Y9 }; |' n. M- ~5 A' Q
  32. {        
    " D' @- \8 c/ v8 [6 r
  33.     uint8 i;
    " G9 u* C5 h) z7 }6 C2 I& F
  34.     9 Y* _, ~% i: q* _1 N# `
  35.     IIC_Start();                                                        // 发送起始信号
    3 y  j3 w: ~8 j8 ~+ l
  36.     IIC_SendByte(TEA5767_ADDR_W);                                       // TEA5767写地址
    6 O; u( B9 a5 a* y1 i
  37.     IIC_WaitAck();                                                      // 等待应答/ K& N2 D5 Q1 v3 t% W
  38.     for(i = 0; i < 5; i++)0 R% H3 W( g5 |' z8 S% R
  39.     {  a) K! `4 N" b* Z. u5 v7 Z
  40.         IIC_SendByte(s_radioWriteData);                              // 连续写入5个字节数据
    % O# s1 f0 x+ G# m- S
  41.         IIC_Ack();                                                      // 发送应答
    * s5 {/ \8 {. D0 ^& k
  42.     }* `8 @' {6 U. K% Y; ^( H8 M
  43.     IIC_Stop();                                                         // 发送停止信号   
    ; i0 X+ A& a2 x& B( ?; R% m
  44. }
    & P' s  G' D$ l6 P, r6 G

  45. 0 [7 ]3 R1 J) i$ V6 S
  46. /**" }( e% P4 P- t# z2 K& d0 i7 J
  47. @brief 读TEA5767状态
    & U% o: L. r3 ^  B4 z7 V; ^) a: Q5 E
  48. @param 无/ O# J$ E. V5 ^% {/ A( W3 j4 e! E
  49. @return 无9 E' ]* z5 K! {! c5 \
  50. */
    0 _$ f" D- _, X1 S8 m# |
  51. void TEA5767_Read(void)
    ! X* O! y& Z* Y1 N, O
  52. {
    : P% J8 r7 a8 L  P
  53.     uint8 i;- W: g9 d  Q$ T; H3 I  Q2 |, N6 P
  54.     uint8 tempLow;
    3 k% w3 ?) |) z/ w/ G- p' _
  55.     uint8 tempHigh;
    2 F  r4 y7 h! q6 U5 M2 s$ |1 r  h4 Y
  56.     s_pll = 0;1 N" R/ {) @$ z. P, H4 \" D) P
  57.     + _' y2 d; [* U* r
  58.     IIC_Start();
    7 C+ k0 E2 W* u  G2 q# A
  59.     IIC_SendByte(TEA5767_ADDR_R);                                       // TEA5767读地址  y' F* r7 ~; I5 D: o( y* D" u) |( P
  60.     IIC_WaitAck();: L3 `! A4 W" a
  61.     for(i = 0; i < 5; i++)                                              // 读取5个字节数据5 e  A5 L7 ^" R5 o0 F* p/ s, m. Y
  62.     {% f& O8 N  T3 V% o0 J: R
  63.         s_radioReadData = IIC_ReadByte();                            // 读取数据后,发送应答/ B+ ], x+ Y( v" A' h' p8 v
  64.     }
    & |( s; O6 h" W! D
  65.     IIC_Stop();
    % O2 v7 _1 z' w& u. [) ?: u! A6 E
  66.     tempLow = s_radioReadData[1];                                       // 得到s_pll低8位
    & ~9 k6 f2 Q$ ]. k4 @7 a6 {" n
  67.     tempHigh = s_radioReadData[0];                                      // 得到s_pll高6位
    6 f5 L# Y. r- i1 O% E
  68.     tempHigh &= 0x3f;
    ' D! m3 b2 K3 s+ g$ t
  69.     s_pll = tempHigh * 256 + tempLow;                                   // PLL值
    8 b9 F) q3 o, N  t  M
  70. }* |3 P" t; \& |) l5 X9 d. L+ g

  71. % c5 M0 r6 l  |# w* m
  72. /*** ^0 J, }* D6 |/ d
  73. @brief 由频率计算PLL4 ]5 z- b) y: T, _# G/ t
  74. @param 无5 l/ Q! {: }, I( n. N; p+ E
  75. @return 无
    8 w& Y: n' ~6 ~
  76. */; c) q8 d$ W! F2 I0 C  l( z) k' D/ d
  77. void TEA5767_GetPLL(void)
    2 x) {, z  e( ?
  78. {
    - R4 U) Y4 X( u! L1 D# Q
  79.     uint8 hlsi;
    1 _6 D2 @! M/ [; O% q
  80.     hlsi = s_radioWriteData[2] & 0x10;                                  // HLSI位; H+ h7 j$ j+ Z+ o% a
  81.     if(hlsi)
    % I: [9 K- l% K- g' A. t$ g5 W
  82.     {
    " T; z- s0 O2 ?2 l$ B6 D
  83.         s_pll = (uint32)((float)((g_frequency+225)*4)/(float)32.768);   // 频率单位:k
    . t" l* o, r! M' L8 [. v6 a: T
  84.     }
    * W, e% s5 }. Q) z) Q  e
  85.     else/ p( M. [2 z- L. `+ t. @; G
  86.     {
    / h- d4 K  y4 k- e& @1 F
  87.         s_pll = (uint32)((float)((g_frequency-225)*4)/(float)32.768);   // 频率单位:k) D  Q$ b' B* s, A, b" L' N" o
  88.     }/ j% q; Y3 J& ~+ C* e6 ^0 R1 x; a. z
  89. }
    : O+ i* K$ r5 P! t
  90. # G( w9 Q0 M8 r, S$ S" z
  91. /**, U. E' Y0 s9 _* D& t' {
  92. @brief 设置频率) h' D7 Y8 _. ?8 d7 I
  93. @param frequency -[in] 频率,单位:KHz! `) [5 L4 f  E$ }- L( D
  94. @return 无
    4 T0 K. }3 u9 h/ v& E: f
  95. */- {! N9 L( o+ E( {; T. i" ]
  96. void TEA5767_SetFrequency(uint32 frequency)4 D: g6 N* d4 n2 l& G
  97. {
    8 n9 x) }# ]# B2 i  R2 h8 |* J
  98.     g_frequency = frequency;
    % U# |! \! U, |- E
  99.     TEA5767_GetPLL();/ f3 f* b. J# e3 ^
  100.     s_radioWriteData[0] = s_pll / 256;
    * W4 _" g' ]/ ?- R4 L
  101.     s_radioWriteData[1] = s_pll % 256;; p9 m0 k: \. t+ R5 V
  102.     s_radioWriteData[2] = 0x20;" P0 e1 f# L3 ]5 e3 B  B& |
  103.     s_radioWriteData[3] = 0x11;
    ' @, n6 a' E, w1 x/ O
  104.     s_radioWriteData[4] = 0x00;
    5 ]) C! [* z, f: ~1 l, M
  105.     6 `. v6 I% r# \( F+ e! b1 [( w5 R
  106.     TEA5767_Write();% n! E4 q. Z" m
  107. }9 y6 P' n( [5 e/ \- q6 |; g$ A5 {
  108. , Z4 T9 ~9 q$ U1 e9 I
  109. /**' U) W! z+ G7 P9 z- s5 D% R, [
  110. @brief 由PLL计算频率
    $ Y( m/ T7 T6 _4 y9 Q7 Z
  111. @param 无
    0 \8 J% z4 |2 @
  112. @return 无& X& K- z/ [8 _( K9 c
  113. */, F& C+ S# s* q- l0 L3 O1 `
  114. uint32 TEA5767_GetFrequency(void)
    ! q: ?2 d5 R2 V0 g* e
  115. {! J% }/ h$ v% k  A( y' Q, T1 k
  116.     uint8 hlsi;
    0 {+ B# M6 v3 Z! r) w  a5 j
  117.     uint32 pll = 0;
    : N' p0 [: ^2 q, ]/ M: c5 i2 s; o
  118.     pll = s_pll;
    $ F4 }9 y& ]! I1 `: j% P
  119.     hlsi = s_radioWriteData[2] & 0x10;
    # K0 ^) k& G  `  a8 @& _
  120.     if(hlsi); e9 z0 I5 l: l4 P+ ?
  121.     {2 U  o, C# n( R; d6 B1 V2 l( j
  122.         g_frequency = (unsigned long)((float)(pll)*(float)8.192-225);   // 频率单位:KHz
    - n- K' u* J' {4 y
  123.     }
    : L- p) f4 S) r
  124.     else
    * b( e$ f5 M4 ?/ T  W( N  N
  125.     {3 F& r$ s6 k# a. t) N
  126.         g_frequency = (unsigned long)((float)(pll)*(float)8.192+225);   // 频率单位:KHz% Q5 ?  s2 ]4 P
  127.     }
    8 X$ }- ?' j" y7 l8 s
  128.     : Z4 V: [$ y( n5 S% d) \# V$ q
  129.     return g_frequency;2 R6 H1 ~1 O* }8 T! C- n- Z
  130. }( T/ T( k5 W" o7 g8 Y8 g3 B3 N
  131. 0 w8 H' R1 Q+ b/ O
  132. /**
    4 h3 x1 b  \$ G. O' e
  133. @brief 手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD% P3 c3 b  |  V: V5 @
  134. @param mode -[in] 搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
    3 v( x. q" z4 C
  135. @return 无
    8 c5 \) x  j0 c4 z9 O# x/ S" X/ y
  136. */( ~9 O& [$ _% z
  137. void TEA5767_Search(uint8 mode)
    ( L) K4 J4 W$ g' Z$ \9 K. {% Y5 ]
  138. {% s  d8 h1 @" w2 H& o0 S+ x( o
  139.     TEA5767_Read();                                                     // 读取当前频率值
      q, m1 p6 |; y6 `6 l2 v  H! S/ Q
  140.     if(mode)                                                            // 向上搜索
    ' s6 Q' E2 K1 R" h
  141.     {: M8 j/ ^5 Y2 a; M; ]* G8 L
  142.         g_frequency += 100;
    * B9 S/ t; A* w# m1 M4 P: m( X5 [6 N1 D
  143.         if(g_frequency > TEA5767_MAX_KHZ)                               // 频率达到最大值. v2 r( h% Y' h
  144.         {
    # U# |3 T. a, J: P; b
  145.             g_frequency = TEA5767_MIN_KHZ;
    * \8 ^2 `1 C, x, _
  146.         }" N. o' B. n2 N
  147.     }
    6 V$ _* o; A6 q. R2 O
  148.     else- H/ _, ^. E5 G0 R. ~+ O0 J
  149.     {
    % v* C6 p% `/ Q1 U) o
  150.         g_frequency -= 100;
    : h( M! k7 P1 [9 R
  151.         if(g_frequency < TEA5767_MIN_KHZ)
    / k# }; C  A5 i* F1 |7 y: G& ~! J- _
  152.         {8 z1 v( _# `6 L
  153.             g_frequency = TEA5767_MAX_KHZ;
    , }6 i0 k% o( D% B7 |4 Q- `' Y
  154.         }; q9 j: d" L" ^  V) C' x
  155.     }          : B: S9 k- u4 q0 e: `' \; ^
  156.     TEA5767_GetPLL();                                                   // 计算PLL值. K% m) y6 }; G) {3 _& |2 R# \
  157.     s_radioWriteData[0] = s_pll / 256;
    ! v, Z8 |; R! z$ p2 o) k: D, H
  158.     s_radioWriteData[1] = s_pll % 256;
    ! L' ~" B' f* \3 G2 Q
  159.     s_radioWriteData[2] = 0x20;
    - D7 Q( W" ^5 f
  160.     s_radioWriteData[3] = 0x11;
    + T7 L8 f" y+ W' a9 @
  161.     s_radioWriteData[4] = 0x00;" _1 z4 N9 r8 K9 R
  162.     TEA5767_Write();
    " X6 q; |& r1 ^. e  \# E
  163.     TEA5767_Read();
    % x7 K6 U: K* r/ \6 t
  164.     if(s_radioReadData[0] & 0x80)                                        // 搜台成功,RF=1,可保存其频率值待用
    ' w# ]# t9 g! k) t& D% f; M. G
  165.     {
    5 @: k8 ]) u9 E- j3 L2 D# a4 {+ g
  166.         printf(" frequency=%d\n", (int)g_frequency);6 x" `$ U! b2 d8 ?, {  U
  167.     }   
    - L# x2 k; P. o+ V9 j# ~* Z: |
  168. }# @( s/ h3 ]% f6 V2 @0 K

  169. 1 ~9 f" a# y6 ]1 L: q
  170. /**  y3 z6 x3 J: i. R
  171. @brief 自动搜索电台
    ( _6 S* a4 L2 [5 V  u
  172. @param mode -[in] 搜索方式,mode=1,频率增加搜台,频率值+0.1MHz;mode=0,频率减小搜台
    + Z7 ~) s2 _. k1 T3 D/ F
  173. @return 无2 |; h: d% N: b) w6 C* c) n" E
  174. */
    , U" H5 e& Y4 Z/ e& ]# _$ I; f; i
  175. void TEA5767_AutoSearch(uint8 mode)+ S/ w# j. j$ Y' W( D# |
  176. {
    4 E" k0 H0 T' D: H* y4 b6 ^* Y
  177.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
    & D, R4 O- Z3 H; `) r; t
  178.     uint8 radioIf = 0;                                                    // 中频计数结果
    8 ]8 O3 m- W& C4 n+ q( r% F9 Q  U
  179.     uint8 radioLev = 0;                                                    // 信号电平ADC输出" W0 q0 y" \6 J" S
  180.    
    . Y2 j' T% ?( z8 v* Y1 k; r
  181.     // 直到搜台成功,RF=1,0x31<IF<0x3E
    % I. X, |8 M* U- f5 D- F) B
  182.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
    7 i) ]% \8 ^! D
  183.     {* N% u3 J$ ^) E
  184.         if(mode)                                                        // 频率增加搜台
    ' l4 R$ g6 J4 C' q/ L8 Q
  185.         {' s. U2 d6 ?. Y9 l4 p0 q
  186.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
    3 s7 t) G6 g% H
  187.             g_frequency += 100;
    : [/ O7 a2 l# R/ g2 E' g
  188.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
    7 l0 I* B: ^! ~: V  k2 z8 d: {! F
  189.             {
    9 B; x+ G% P  C1 P2 w% m/ g$ ?" m! g
  190.                 g_frequency = TEA5767_MIN_KHZ;
    * y4 C4 t% L( }% v& Q
  191.             }6 r+ o: ~, a( _5 c, m2 I+ r
  192.         }
    $ o  b; L# u& j3 k* O1 X/ q3 d
  193.         else                                                            // 频率减小搜台2 U* b& [8 U( x7 ~& ]: _/ y4 x
  194.         {
      ]* i6 Z3 p  `# g
  195.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0: P( s1 `- ~! p# M' y
  196.             g_frequency -= 100;
    9 T, [. L# ~% _- {1 u* W
  197.             if(g_frequency < TEA5767_MIN_KHZ)9 w9 t$ U% z/ F1 _: O1 H
  198.             {
    / V  |9 V! _* b+ _
  199.                 g_frequency = TEA5767_MAX_KHZ;
    $ D; |1 l* o' H5 p& }& Q, ~
  200.             }              t6 V4 h5 X! Y
  201.         }4 Q" t: @1 u% R- L
  202.         TEA5767_GetPLL();                                                // 转换为PLL值7 H3 {9 @0 g8 J9 U$ B5 _9 h
  203.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1. ^* `" j: g6 V" r6 @/ p+ U
  204.         s_radioWriteData[1] = s_pll % 256;$ V% G9 x2 c% N, y' a
  205.         s_radioWriteData[3] = 0x11;% J/ ~! G( i1 g
  206.         s_radioWriteData[4] = 0x00;
    8 `) j! X; d" P) E) U& z# H
  207.         TEA5767_Write();                                                // 写入5个字节数据
    ' R  L5 ]8 P; I. @
  208.         TEA5767_Read();                                                    // 读取当前频率值   R5 T  t) ~: @# D$ |5 e! ]& V
  209.         radioRf = s_radioReadData[0] & 0x80;
    6 F$ f; L" d5 ]- P* B, {, g7 D1 r
  210.         radioIf = s_radioReadData[2] & 0x7F;3 `) z( L' g5 H3 O' R8 g
  211.         radioLev = s_radioReadData[3] >> 4;2 @+ {0 f. n5 |$ t4 E( l
  212.         printf(" r=%02x\n", radioRf);4 ^" E1 N9 E' T) L/ o. N
  213.         printf(" i=%02x\n", radioIf);
    7 C' T& z7 R  N& h9 V3 n
  214.         printf(" l=%d\n", radioLev);6 q, a& q. D; @  A! l
  215.         printf(" f=%d\n", (int)g_frequency);: |- E; ?- h( |; k- h* G
  216.     }
    ( z+ h1 u) o, i; G
  217.     TEA5767_GetPLL();                                                   // 转换为PLL值" p' q- A# n* {
  218.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=09 H& S6 L, C: d- }: W
  219.     s_radioWriteData[1] = s_pll % 256;1 Z/ ^- w' ^* e
  220.     s_radioWriteData[3] = 0x11;
    : H, [3 i$ c1 C! \
  221.     s_radioWriteData[4] = 0x00;
    . J2 l% V3 _9 {7 b" [9 u! i2 F
  222.     TEA5767_Write();                                                    // 写入5个字节数据/ c9 z6 ~4 l8 G6 W6 L
  223.     TEA5767_Read();                                                        // 读取当前频率值 1 |. V2 V, v! e& p7 L
  224.     printf(" frequency=%d\n", (int)g_frequency);. o3 D4 H* |+ u, n# P: P
  225. }0 Z+ k# C! R; X
  226. 7 H) ~/ a3 Y) x9 U( N
  227. /**
    9 i( f0 y2 J" T, Q8 r& ?
  228. @brief 静音
    # k! b. |6 k( v* K! O0 |# c
  229. @param mode -[in] 静音方式,mode=1,静音;mode=0,非静音
    # l8 ]+ P+ m' D
  230. @return 无: W( [& A, `! ~% B
  231. */
    4 b. ]7 g) R* d0 A6 f7 |
  232. void TEA5767_Mute(uint8 mode)% n' A- I+ d% E) w
  233. {        
    ( [% f7 q& h7 C6 ~
  234.     if(mode == TEA5767_MUTE_ON)# a' `5 e+ x( |3 D) L9 c2 Z
  235.     {
    6 G4 l" W2 z2 J  ^, P  Y
  236.         s_radioWriteData[0] = s_radioWriteData[0] | 0x80;
    8 x1 A0 C9 ^1 Z6 X4 W2 {" n
  237.     }+ M1 J; C& r4 b8 ^) |* o3 z6 B' L1 C/ S$ j
  238.     else. C% m+ f. y, [# [0 U8 A
  239.     {* b8 G9 T& z* x' a; z
  240.         s_radioWriteData[0] = s_radioWriteData[0] & 0x7F;
    6 ~. I. d- u$ Z% D. o/ \' p' t* F
  241.     }! Q& ]" T7 k7 S; Q0 \( i
  242.     % ?, H2 b, O& `% I& b
  243.     TEA5767_Write();
    5 h' Y0 n) u7 W! i! ?) J8 W0 }" }
  244. }
    % K# L/ H9 p! S% J  t# Z: S
  245. % H4 x7 U$ |( i. V; I5 Q( L+ W4 m
  246. /****************************************************END OF FILE****************************************************/
复制代码
2 L0 V' t2 `4 y3 L/ t

4.2 board_tea5767.h& Y& }7 ~% l, g( L: q9 K

  1. #ifndef _BOARD_TEA5767_H_/ D! l8 k* p- q' m. h+ W# q8 J# t
  2. #define _BOARD_TEA5767_H_
    " y/ h( R8 f4 [) V- x
  3. . V9 ~5 e+ a2 D! w/ N1 P) r4 T
  4. /*********************************************************************% q! b" ~( K. t) D* t
  5. * INCLUDES4 b& N3 w8 p  a
  6. */
    6 W! s( r, U4 _! Y) [6 n
  7. #include "stm32f10x.h"2 x4 O; |- }4 v) E

  8. ' f/ e" ~! A* X& ]& g
  9. #include "common.h"5 X3 r& L, F4 p6 @; H
  10. 0 J& |- A  n; k6 q8 ^  B
  11. /*********************************************************************; M$ ^+ S$ \+ Q7 `
  12. * DEFINITIONS
    9 D4 z% a- i" q( k& K
  13. */
    - X4 ^( X) I" ]1 h/ `
  14. #define TEA5767_ADDR_W      0xc0    // TEA5767 写地址
    ' h7 _2 X/ r( L9 C
  15. #define TEA5767_ADDR_R      0xc1    // TEA5767 读地址  d' s6 l: r( `8 k' _3 d4 s
  16. 0 F$ q/ r  ^( E# y
  17. #define TEA5767_MAX_KHZ     108000  // 最高频率 108M8 c# a; P' j) I' N
  18. #define TEA5767_MIN_KHZ     87500   // 最低频率 87.5M
    0 u3 ?! d% q6 Z7 Z2 S5 g
  19. 6 ]* s; P: [0 y) a/ U- P2 e" [
  20. #define TEA5767_MUTE_ON     1       // 非静音
    ! j9 T9 V, [7 f4 j$ M
  21. #define TEA5767_MUTE_OFF    0       // 静音0 s. m1 r& Z8 \' Q; b" z

  22. 3 x; s1 `: P# Z8 H# O' H0 T! M
  23. #define TEA5767_SEARCH_UP   1       // 向上搜索
    * H6 u9 }% z, ?6 }8 F5 h0 r/ |0 y
  24. #define TEA5767_SEARCH_DOWN 0       // 向下搜索9 ~7 L1 {9 n, V3 D
  25. 6 h6 e0 h8 e8 i8 J
  26. /*********************************************************************9 Z! n0 }2 G. l1 d2 U/ W; p
  27. * GLOBAL VARIABLES
    * ?1 }: k3 b: B8 L# n# [
  28. */9 @. N* _) J' s) B
  29. extern unsigned long g_frequency;
    * h1 H, t0 j7 n3 d; J
  30. : t8 C: U7 l* u4 `3 i8 {
  31. /*********************************************************************% y7 x2 z. n9 y/ c; K
  32. * API FUNCTIONS
      j0 {) v$ o" L
  33. */' E3 g" a" v% h0 J! a
  34. void TEA5767_Write(void);
    * ?, e! x3 T, k1 v2 X) f
  35. void TEA5767_Read(void);
    . J# ?1 Z* P" ?5 f% z5 a0 J- V% [
  36. void TEA5767_GetPLL(void);
    3 K2 u$ |3 y+ _5 P; R& Z. E2 X. R
  37. void TEA5767_SetFrequency(uint32 frequency);1 I8 L& R3 V1 M' I
  38. uint32 TEA5767_GetFrequency(void);3 ?7 G  V" h1 Y% O: \
  39. void TEA5767_Search(uint8 mode);7 T* N! I  E5 M) r( Z) x9 a
  40. void TEA5767_AutoSearch(uint8 mode);
    * Q" d- g% b3 Y- r) }
  41. void TEA5767_Mute(uint8 mode);/ |: V8 v# `# A9 Q. p' Y+ s

  42. ' Q4 x9 |: F2 G3 C, j6 I$ @
  43. #endif /* _BOARD_TEA5767_H_ */
复制代码

, K9 p! z4 s2 p3 P. A* b3 h

五、API调用
. K+ ?% Y0 y+ q2 Z3 q需包含头文件 board_tea5767.h

' ?' ?6 S/ \) u" r$ G' z

TEA5767_Write


: u) V+ ~' M- g8 O3 I4 D. m

功能    向TEA5767写入5个字节数据
0 M4 G  [- s5 \函数定义    void TEA5767_Write(void)
- F! s* }6 o2 U- b4 d% e参数    无+ v) X  _- u# [2 k: I
返回    无, s- j/ F- o8 k/ {! r. l4 m1 M
TEA5767_Read

. ^+ V" `6 s$ W) H+ C

功能    读TEA5767状态
* r& d( ]; a" x1 F7 w. A' ~函数定义    void TEA5767_Read(void)- X' |' n. e5 g* [8 N& X
参数    无
( l, M! r+ W4 G* ^4 B% V5 A' O) S返回    无
" b; J# G4 D2 f% z/ X2 f% L5 kTEA5767_GetPLL


: r* _1 Y7 m' k8 [. E

功能    由频率计算PLL
' F; m! e  t0 H' ]+ P6 l$ w函数定义    void TEA5767_GetPLL(void)
4 G$ g/ }# r8 g- W8 _参数    无" T9 c1 ]* |4 v* Y. I
返回    无
0 S- O6 X0 d- j) M% e; zTEA5767_SetFrequency


2 p8 o, q; X$ d; J, A3 l

功能    设置频率
: p8 ]; _6 K" L) p* J+ M" Q函数定义    void TEA5767_SetFrequency(uint32 frequency)% e8 A! M6 O+ ~, ^# u: \) A/ K4 d% T
参数    frequency:频率,单位:KHz
' ]: X, M" N  ]* z5 l3 [9 V返回    无& F8 n  ?5 U/ {; r# P8 Y
TEA5767_GetFrequency

. ]3 O( a, a8 I' K! |

功能    由PLL计算频率1 h9 }+ |9 y' T% }8 N- ]+ C
函数定义    uint32 TEA5767_GetFrequency(void)
8 d, y7 ]: K1 r参数    无% O7 X) T" V7 U4 Z  D
返回    当前频率8 K. I( r: y9 q" L
TEA5767_Search


2 I8 H* i( p( l9 X

功能    手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD
# N0 l, N# S8 o% A# [' n函数定义    void TEA5767_Search(uint8 mode)3 Y6 ~( S1 @' @5 N- {# T
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
  S2 N5 e( E* I! S0 A! i4 O返回    无! x' |, _9 d$ D, n( m. W
TEA5767_AutoSearch

" u9 i6 j& s0 n! c, s& L

功能    自动搜索电台
( {& b; T/ E# a2 @7 ~  `" e% y函数定义    void TEA5767_AutoSearch(uint8 mode)( F, w6 f+ Q  Q. i/ U. v- v
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
6 y# D3 y- p& k! G+ P3 ^返回    无" Z7 j0 I( O% ]& U: x5 }
TEA5767_Mute


8 {$ s/ h: Y7 a3 I3 U! q2 B6 Z+ N$ B

功能    静音
: |: v# |' J/ ^0 e. i, S/ W: ~* K函数定义    void TEA5767_Mute(uint8 mode)) E$ I0 ^  N% z
参数    mode:静音方式,mode=1,静音;mode=0,非静音% K: @! h; b  m! w
返回    无


, ?6 @5 d3 h* L. B& g4 _六、使用例子  w  h, i7 t) t2 n' _' r
6.1 手动加减台
- }$ H$ M  l9 \4 `# V% g
±0.1MHz,87.5-108MHz,循环增减

  1. TEA5767_Search(1);  // 加台) N$ z" E: N- Z8 q
  2. TEA5767_Search(0);  // 减台
复制代码


9 `$ l! L7 i, u8 A9 c$ S6.2 自动搜台
0 |- t1 D2 ]  ]: _
由于从IC中读回的频率不准,这里采用静态变量g_frequency来记录当前频率,87.5-108MHz,循环增减

  1. TEA5767_AutoSearch(1);  // 向上搜台
    5 ?$ r( A; r* \9 ~+ H# w  x$ S
  2. TEA5767_AutoSearch(0);  // 向下搜台
复制代码

/ t3 ], G8 A# g7 J9 v
参考自动搜台流程:


* p* n) c2 @# A# E% `由上面流程可知,决定参数有

rf:1=发现一个电台,0=未找到电台
2 B3 a  P4 c- l1 tif:中频计数结果,0x31<IF<0x3E则为符合电台
/ I0 p. g5 j; u  ~lev:信号电平ADC输出,可通过写入的5个字节中对应SSLadc的位(查看下面附录),下面SSLadc=7
6 P' f5 n' w3 w8 F' M6 ?+ O, Z4 z* X

  1. void TEA5767_AutoSearch(uint8 mode)  v* ?: f6 F/ X5 ]- A
  2. {4 k# m0 m5 d, c+ Y; p7 ^
  3.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台( P7 P3 ~. ~# X7 V; Q; U! N
  4.     uint8 radioIf = 0;                                                    // 中频计数结果1 a% N- [; l8 D# A: J8 E
  5.     uint8 radioLev = 0;                                                    // 信号电平ADC输出
      ]) R6 A1 W; W# w: H
  6.    
    5 z  X' H' u/ S4 T* r* h! B# r
  7.     // 直到搜台成功,RF=1,0x31<IF<0x3E
    8 o! y3 Q1 L9 |! ]) w
  8.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E))). ?( s# f0 L% N% M# z9 Y7 D4 W
  9.     {8 H; `5 U9 Y3 {' k4 s* L
  10.         if(mode)                                                        // 频率增加搜台2 J9 h  \# F; j0 R, [; g* t( d7 o3 m
  11.         {
    & H2 A! [1 s# c
  12.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
    ) E' `+ \0 m" n% S8 u) o7 G
  13.             g_frequency += 100;
    ) ?5 y8 q9 k" c+ W' `
  14.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
    + ^- b; Q3 l& t$ b/ [' m# ~7 I
  15.             {
    ! H, }3 `) X; U% F. \
  16.                 g_frequency = TEA5767_MIN_KHZ;
    / ]! F% }- F" D/ _+ s. n4 I
  17.             }
    8 P" h2 x$ |1 `8 L
  18.         }& P6 g( ?3 G" ?7 ], ?) T6 @
  19.         else                                                            // 频率减小搜台
    9 A: f. K: U3 s3 u! l
  20.         {; Q- k& S6 O- L9 r/ m( N
  21.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0/ D% J( `6 ?, c/ e1 c" r; b3 H
  22.             g_frequency -= 100;
    . c9 w/ p! z* L4 y7 m+ _. @
  23.             if(g_frequency < TEA5767_MIN_KHZ)' p" L) o0 o! n. I) ]: o
  24.             {
    ' S/ u, w" i$ ~6 A1 G5 B
  25.                 g_frequency = TEA5767_MAX_KHZ;2 D6 m4 q+ W! l
  26.             }            
    ) Q9 ^8 R/ p4 i3 H
  27.         }
    $ A. x3 Y  ^) G$ i
  28.         TEA5767_GetPLL();                                                // 转换为PLL值
    + D- i2 p. B3 G$ m$ l$ z
  29.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=19 e* A6 O; `0 x! J) G5 \; W
  30.         s_radioWriteData[1] = s_pll % 256;# u6 }. _: J; f
  31.         s_radioWriteData[3] = 0x11;# J( x+ t! h+ V6 f# ?
  32.         s_radioWriteData[4] = 0x00;* @2 W, y# w7 P$ L8 g& \6 |5 K* O
  33.         TEA5767_Write();                                                // 写入5个字节数据8 S; w9 a# |5 ^0 Z
  34.         TEA5767_Read();                                                    // 读取当前频率值 & x8 h' W- H' J8 u7 f+ m- F" N, k: G  W
  35.         radioRf = s_radioReadData[0] & 0x80;# ?/ ~# h- l/ Q# h: |
  36.         radioIf = s_radioReadData[2] & 0x7F;
    8 j4 E% ?  t; k% c' |( c) i. f3 r
  37.         radioLev = s_radioReadData[3] >> 4;
    ! c% L3 y8 @8 a. l- Z2 N+ Z5 @/ l
  38.         printf(" r=%02x\n", radioRf);- s2 F# E; O# X5 i- ]- \' f
  39.         printf(" i=%02x\n", radioIf);& V3 u$ H8 t6 j
  40.         printf(" l=%d\n", radioLev);
    . Z# o& Z: _- n2 n# t6 ?
  41.         printf(" f=%d\n", (int)g_frequency);
    . }  ?- m6 t" N" z- x, |8 X
  42.     }: F# ~' P1 t( j9 j& \
  43.     TEA5767_GetPLL();                                                   // 转换为PLL值
    . p2 @$ L% r- e! ~; J0 f  a
  44.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=03 u5 d2 q) [  Y$ g
  45.     s_radioWriteData[1] = s_pll % 256;
    ' `. ]1 ~' N, B. Z
  46.     s_radioWriteData[3] = 0x11;
    : S, N, ^4 n1 |& c' m0 b7 n
  47.     s_radioWriteData[4] = 0x00;2 S3 O' \  a7 I0 Z( U# h5 ^
  48.     TEA5767_Write();                                                    // 写入5个字节数据
    * O' t) Q" l& w! y& Z3 T# I# N, R
  49.     TEA5767_Read();                                                        // 读取当前频率值 7 o; T$ A- l9 ~5 i9 b) J
  50.     printf(" frequency=%d\n", (int)g_frequency);4 c) d! M! u# m8 Z
  51. }
复制代码
! z- @6 o5 R1 P( v0 p# W7 a0 S. h" y

6.3 软件静音' m$ [% ?: w7 [+ x& P2 @

  1. TEA5767_Mute(TEA5767_MUTE_ON);      // 收音机静音  {$ x+ Y! R7 z/ A! x" ~! x
  2. TEA5767_Mute(TEA5767_MUTE_OFF);         // 收音机开启收听
复制代码

8 U; B/ J% o6 f( U7 u
七、附录) i+ ]( R$ _6 x4 s6 J
7.1 写数据

  @8 ^; Z& p0 ^5 j( A3 i0 m向TEA5767 写入数据时,地址的最低位是0,即写地址是C0。读出数据时地址的最低位是1,即读地址是C1。TEA5767的控制寄存器要写入5个字节,每次写入数据时必须严格按照下列顺序进行:& ?/ R9 ]5 g' e- k" [7 O' g$ \
地址、字节1、字节2、字节3、字节4、字节5。


- v. g# i$ c* v# c& j+ _

每个字节的最高位首先发送。在时钟的下降沿后写入的数据生效。上电复位后,设置为静音,所有其它位均被置低,必须写入控制字初始化芯片。


9 v1 a2 |1 ?+ p: Z1 P* z% m" z

TEA5767内部有一个5个字节的控制寄存器,在IC上电复位后必须通过总线接口向其中写入适当的控制字,它才能够正常工作。每个数据字节各位的功能含义见表4到表14。

' T4 \; H- H6 c1 l& E

表4 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
/ q4 b2 @  l- ~% NMUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8% s. M2 _* a6 k# _. w& i/ b
表5 数据字节1各位的说明

% R. i% n1 w( V. r

BIT    SYMBOL    说明1 a( E1 Y# @* ~6 U/ n; v/ N
7    MUTE    若MUTE=1 左右声道静音;若 MUTE=0 左右声道非静音
! V- z5 [; W2 N1 ~/ Z8 W6    SM    搜索模式;若SM=1 搜索模式;若 SM=0 非搜索模式
" M5 Y6 k6 P, X8 ]% ?5 [, G5 to 0    PLL(13:8)    预置或搜索电台的频率数据高6位; u% o- ]. D" J  C6 ^( {9 _
表6 数据字节2的格式


/ k# t/ G; Y' c; ^

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)3 o) M2 m( q% [$ O/ k* K
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
% k, T( A7 J. \- p  r表7 数据字节2各位的说明


4 q" Z. k8 m7 T/ ~% ?: L5 f# r

BIT    SYMBOL    说明
. ]! I5 z3 ~( t7 D& x& j7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位- f7 K$ I' ^  \, s9 B; K
表8 数据字节3的格式


$ ]$ x& w* A, j; A

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
- J7 Y: }1 B# b2 V+ O% p9 H- |* Y0 g' ZSUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1$ k# K$ V/ f' q. d! M5 d: v8 j2 g
表9 数据字节3各位的说明

' _, ]9 [9 T* P7 X- I

BIT    SYMBOL    说明3 [6 f1 q. R: x. H' G' F
7    SUD    若 SUD=1 向上搜索;) B2 i5 v# b% ?
若 SUD=0 向下搜索
, @$ X. \2 ~+ [$ T6 H6 and 5    SSL[1:0]    搜索停止电平:见表10-11
- O6 R5 k3 X' v7 S0 v- s6 U4    HLSI    若 HLSI=1 高端本振注入;. X8 M- D3 M  j3 U
若 HLSI=0 低端本振注入
" L3 X7 e; F  M4 v3    MS    若 MS=1 强制单声道;
: o+ U8 U" A( u0 M6 X若 MS=0 开立体声& Q. s) ?5 ?# ]9 E4 G* i4 z/ K
2    ML    若 ML=1 左声道静音强制单声道;2 @% x# b; Q/ L5 ?6 V
若 ML=0 左声道非静音* ~1 f" s; i# {
1    MR    若 MR=1 右声道静音强制单声道;1 M; Z& F8 @4 X, R3 E
若 MR=0 右声道非静音
. [2 a9 f9 A% G0    SWP1    软件可编程输出口1:若 SWP1=1 SWPOR1为高;# i) j. _6 c& E& ]
若 SWP1=0 SWPOR1为低
) D; G/ O& |/ M0 v$ ^表10 搜索停止电平设定

  Y) m5 U7 G7 F) ?/ {

SSL1    SSL0    搜索停止电平
6 W+ }( [, r. h4 l6 z, ~4 ]& L6 P7 v0    0    不搜索6 e& f* O  b7 a! |9 o' ?
0    1    低电平 ADC output=5
4 C5 Q0 s9 q3 d: k1 Y4 T: o1    0    中电平ADC output=7
0 T" P8 L1 ^( {( ~1    1    高电平ADC output=10
( R& U, w& I1 B$ H$ U' v& F表11 数据字节4的格式

) b6 i1 f' s* L) J. V

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)( P4 R7 D4 t2 a2 Q
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI
, o, M9 w* f9 Z* _& h表12 数据字节4各位的说明


% Q) _* M# e0 R! w& o4 E9 P

BIT    SYMBOL    说明8 A" m3 c. Z$ s( l9 {. G! |
7    SWP2    软件可编程输出口2:若 SWP2=1 口2为高;) ]: _1 O% N+ ^
若 SWP2=0口2为低, f8 j- f- @  b# p
6    STBY    若 STBY=1 待机模式;! k/ ^* B+ h; s" h$ Z$ h& h8 ~
若 STBY=0 非待机模式, q0 [; e1 X5 ?; @7 q
5    BL    若 BL=1 日本FM波段;
/ |! T; v5 ^5 p4 A: T0 `& @( u1 Y若 BL=0 美/欧 FM 波段" w, a( T# L/ L4 H( A
4    XTAL    若 XTAL=1 fxtal=32.768KHz;* J3 _+ K7 W) J6 X, [. _; B4 C& F
若 XTAL=0 fxtal=13MHz) U4 n: w* Z- D9 V1 V, }
3    SMUTE    若SMUTE=1 软件静音开;) C5 _- A- @0 k6 @9 H" {
若 MUTE=0 软件静音关
+ ~# C% T8 A* y5 U& g* y2 z2    HCC    若 HCC=1高音切割开;
" I' h2 E4 H: `' u4 q  D5 R若 HCC=0高音切割关8 A# o' p  H( Q
1    SNC    若 SNC =1立体声噪声消除开;
" z, U; j/ m1 i0 M7 _, b若 SNC=0立体声噪声消除关( j: I; F! `. h( k% t8 T' x1 D
0    SI    若SI=1 引脚SWPORT1 作ready flag输出标志;
4 ]5 T/ h+ \2 K$ ?  H0 i# M若 SI=0 引脚SWOPRT1 作软件可编程输出口
* `5 Y: e9 k* k' `表13 数据字节5的格式


# x: @! y7 Q- ^! X. c) L! P

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
7 Y" F; q/ G6 [. OPLLREF    DTC    -    -    -    -    -    -
! u0 _' @0 y* K$ }( m  h: e& R4 l表14 数据字节5各位的说明

+ x* C+ J' [, d

BIT    SYMBOL    说明$ z( T, E5 C' Z7 o4 P6 G  k, E
7    PLLREF    若 PLLREF=1 则6.5 MHz 参考频率 PLL可用;; g# c: V5 `+ `' d: I3 u# W
若 PLLREF=0 则6.5 MHz参考频率 PLL不可用6 L  V2 j. N) \2 K7 c
6    DTC    若DTC=1 the 去加重时间常数为75μs;
% q  e( ]& T6 @2 S2 O6 k若 DTC=0 the 去加重时间常数为50μs9 `# S# N  ?% N  V  w% X% ~$ e5 ^
5 to 0    -    不用管它

1 D( b- }& m# H/ @, e* r
7.2 读数据* q8 R1 T2 Y" N0 Z" Z9 ?5 M  C
和写数据类似,从TEA5767 读出数据时,也要按照“地址、字节1、字节2、字节3、字节4、字节5”这样的顺序读出,读地址是C1。读出的5个字节的含义见表16到表25中的说明。

: p; H6 C/ l7 Y

表15 读模式

数据字节1    数据字节2    数据字节3    数据字节4    数据字节5

, e- m& r/ \, G! l4 P. i3 A0 a
表16 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
9 |; ?3 Q1 h9 ^& O7 Y& _) U# Y, _1 JRF    BLF    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8

5 D: B0 {( O. _0 g1 x3 H
表17 数据字节1各位的说明

BIT    SYMBOL    说明  E  y  o+ W$ K7 Y! Q. `. q
7    RF    若RF=1 则发现了一个电台或搜索到头;
/ c7 s) m& d0 k$ `# T3 V若 RF=0 未找到电台
9 }* r# y2 ^/ H6    BLF    若BLF=1 搜索到头;
( |2 ]9 w. r+ W! t7 U) m若 BLF=0 未搜索到头+ B  W3 f1 x) z- n& V
5 to 0    PLL[13:8]    搜索或预置的电台频率值的高6位


9 z3 E0 L! c7 f& ?表18 数据字节2的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB), R* h# d) a6 m  Y7 i4 O# b
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0


/ [8 A' J- A/ k$ }* R3 B表19 数据字节2各位的说明

BIT    SYMBOL    说明$ `' U& W5 B! \3 C3 @/ [
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位

' g1 y0 B# J8 r3 p
表20 数据字节3的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
! v; Q: L( |, @% p4 H# }STEREO    IF6    IF5    IF4    IF3    IF2    IF1    IF0

1 }3 t5 u# H. d4 f; m/ B
表21 数据字节3各位的说明

BIT    SYMBOL    说明5 z9 `- I6 q* @
7    STEREO    若 STEREO=1 为立体声;+ b1 J; ]+ [# x8 ?- r+ v
若 STEREO=0 为单声道
; f) _3 @, `+ V+ \  f6 to 0    IF[6:0]    中频计数结果

( d$ t  t8 y. g0 s
表22 数据字节4的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
9 Q" }* {# g) L+ MLEV3    LEV2    LEV1    LEV0    CI3    CI2    CI1    CI0


; t2 w' E) U; a/ \0 ]表23 数据字节4各位的说明

BIT    SYMBOL    说明7 L% a; K4 j  Z5 s4 W
7 to 4    LEV[3:0]    信号电平ADC 输出9 m/ `6 \" \' f/ u  Q
3 to 1    CI[3:1]    芯片标记; 设置为0
/ V. s) \( P! X7 I, z" L. Z0    -    该位为 0

5 ~/ S) P4 s( l9 Y: d! O( Y$ v" m
表24 数据字节5的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)& C1 O* I1 A7 F0 ]7 J, I
0    0    0    0    0    0    0    0

' ]) Z( {+ U( i# c! j$ @; Z' q
表25 数据字节5各位的说明

BIT    SYMBOL    说明  H6 N0 Y' C! ]8 y' ^
7 to 0    -    供以后备用的字节;设置为0


3 ^* ~2 k$ ^% Q4 C8 F) ~5 y4 m7 g  O7.3 举例
5 Q- i: f( s% I: _* z根据上面的算法,以106.8的天津交通台为例,它的PLL为32d1H,第一个字节的BIT7=0非静音,BIT6=0不搜索,第三个字节的BIT4=0低本振,第四个字节的BIT5=0欧美制式,BIT4=1用32768晶振,其余位的设置无所谓,可任意。各字节值见表27~31。


5 @. d0 A2 t; R# g

表27字节1:0x32

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
! ^9 T8 T+ L7 U3 `3 B6 E+ v" SMUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL86 i$ E' }0 x% i
0    0    1    1    0    0    1    0* f  n; K6 @$ p% ^/ W! w7 ^  S6 r5 J
非静音    非搜索    3        2      

      
3 g9 f9 I% G$ J4 c, l* ?/ i表28字节2:0xd1

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
  m* A8 `3 `  B& p& K1 q. V$ iPLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
& s* k0 m+ o. j1 ?+ A/ [1    1    0    1    0    0    0    1& W, x' c  _# P3 D' M6 ]& @
d                1         

   
( A9 q4 ^$ i9 C, F表29字节3:0xc0

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
5 v# t- ?/ y' R: B" L3 X, s+ VSUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1% K0 t0 N( c& O, M
1    1    0    0    0    0    0    0
1 U0 V1 U9 {' Z1 o; Z8 C1 m向上搜索    搜索停止中电平        低本振    立体声    非静音        随便

# S, [  X3 q9 }
表30字节4:0x17

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)  i/ B3 F$ z- M  {
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI5 k2 }# c: S7 H! ?% S( u
0    0    0    1    0    1    1    1
) e4 Z4 Q. Y( t, u任意(不用)    非待机    欧美    32.768    非软件静音    高音切割    除噪声    SWP1=RF

1 u% ^2 l0 M2 T! m4 m
表31字节5:0x00

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)! c$ t+ o1 _. B$ D
PLLREF    DTC    -    -    -    -    -    -
4 [# f; W7 b/ O. i0    0    0    0    0    0    0    0* A* ], P' P, W
不用6.5M    50μs                        ; N" H! e7 L5 |4 b1 {% ^7 \3 t! a
据此给出的控制字是:0x32,0xd1,0xC0,0x17,0x00,将这个控制字写入TEA5767就可以了。

————————————————, i, G4 x8 ]+ O7 N5 e- q1 ^
版权声明:Leung_ManWah

收藏 评论0 发布时间:2023-1-3 17:48

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版