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

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

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

一、简介

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

电源 5V
' T# M3 S: z0 G. i5 J" TI2C 总线通讯& \1 ]. x' U0 P! f; {9 W+ g
可以使用软件进行静音和消除噪音


1 x, J. `+ {) w& ~" h! V: ?* D二、硬件连接$ d4 l8 x+ Q2 v4 o$ Z4 X
功能口    引脚9 t, Q; Z& ^/ M  t
SCL    PB.6
2 @* u! o4 W- V9 Y* GSDA    PB.5


, O' L0 s+ @7 m: L三、添加I2C驱动- P+ e4 S- p& `1 G& Z$ q: N


3 M& N9 C. e0 d6 p+ S! p$ \) k

四、移植文件
8 F! T# ?3 J- |* D注意:以下出现缺失common.h文件错误,去除即可。uint8改为uint8_t或unsigned char或自己宏定义5 r& B) H3 D, |

9 o+ Z7 _5 v2 M7 d- ^) \0 {' f将 board_i2c.c、board_i2c.h、board_tea5767.c 、 board_tea5767.h 四个文件加入到工程


6 k& |9 i6 k4 S: |( k0 b

4.1 board_tea5767.c: c9 y" i4 T1 ?" I

  1. /*********************************************************************! T- a4 G3 x5 R' X0 p
  2. * INCLUDES+ j! ?0 s" ~4 [; f3 a' a$ N" y
  3. */5 Y5 v4 z1 [# ~- q7 b5 y  L: {( O
  4. #include "stdlib.h"
    % q0 ?' N/ N0 U* b2 P* h
  5. #include "stm32f10x.h"
    $ L" v) T8 g8 a% J" Y- H5 o
  6. : Y* y& X9 f# \
  7. #include "board_i2c.h" ) T& f+ o, a6 F/ |. ]+ E
  8. #include "board_tea5767.h" 7 ], m( d/ r) W8 c& D
  9. #include "common.h"- d3 x& x3 o8 w7 F/ M7 @

  10. # ]7 a+ b5 W( J5 [+ k
  11. /*********************************************************************
    % z9 n/ w, P1 @/ g
  12. * GLOBAL VARIABLES7 C! _  j4 K* n. G
  13. */
    2 ^/ _( I  O  i% f, v! K' o
  14. unsigned long g_frequency = TEA5767_MIN_KHZ;
    4 h8 g) U; M8 V6 y
  15. 2 L3 M9 q4 L# W# l5 w
  16. /*********************************************************************
    7 e( I" V+ \4 [
  17. * LOCAL VARIABLES+ ^1 _) h/ h: K7 i4 }) a& n2 y
  18. */                                     * M, [+ w5 f" [) U+ f" t
  19. static uint8 s_radioWriteData[5] = {0x31,0xA0,0x20,0x11,0x00};          // 要写入TEA5767的数据,默认存台的PLL,104.3MHz" d) u0 y$ n5 H6 @8 e! C# n) l
  20. static uint8 s_radioReadData[5] = {0};                                  // TEA5767读出的状态
    8 w+ d- y- Z* j1 w- B
  21. static uint32 s_pll = 0;; `# A: Y$ L8 s5 K3 d, G

  22. 4 O6 n. n( ?5 |; g- \$ D" C" B4 d/ a
  23. /*********************************************************************
    , n# ~3 C' O" \5 k
  24. * PUBLIC FUNCTIONS( G3 e& z. L$ n& I: G! @
  25. */
    $ K: {% d3 d& ~# f
  26. /**
    8 _! v2 ~9 o: ~  j  P6 f
  27. @brief 向TEA5767写入5个字节数据- J3 S5 G. D* [
  28. @param 无' _' D8 L8 @1 t  M4 @) m
  29. @return 无
    " r8 Y" i9 f% _4 E! E
  30. */
    $ d/ o: y4 V( ]
  31. void TEA5767_Write(void)
    * y6 N5 u9 q& |1 o6 d9 c+ ]( d! e
  32. {        
    6 j7 c- `, D8 g" q% a4 Y7 q/ H
  33.     uint8 i;' A. _9 y6 n, C7 E$ c( ~: x$ E
  34.     7 N6 Y, F* u' c9 Y  z( Y
  35.     IIC_Start();                                                        // 发送起始信号' A9 K/ H9 c) ]1 ~; U- l% c
  36.     IIC_SendByte(TEA5767_ADDR_W);                                       // TEA5767写地址
    - k; ^% R- c$ w( H! F0 o
  37.     IIC_WaitAck();                                                      // 等待应答! Q" }0 v/ e5 u) r* y
  38.     for(i = 0; i < 5; i++)) l4 J  z) l4 q1 ^4 v
  39.     {6 O- o: w( B0 V$ W0 t2 b
  40.         IIC_SendByte(s_radioWriteData);                              // 连续写入5个字节数据
    , |0 ^  i/ V( F* ?: c/ |
  41.         IIC_Ack();                                                      // 发送应答- s; v8 e8 H5 v% i. @! D
  42.     }
    ! K  N1 K& I( O# F3 q
  43.     IIC_Stop();                                                         // 发送停止信号   . W/ m' z, `% S' Q2 n9 _- E
  44. }
    9 U  y' t: W! g, T7 v3 e

  45. 3 F# M7 h: S/ m+ `
  46. /**
    ! r( Y) p! L. Q6 R1 E  v
  47. @brief 读TEA5767状态2 ]3 a$ |' L7 I5 B3 l, q" T5 s! K* R
  48. @param 无" [! k8 b" D+ c7 [
  49. @return 无! r5 ]. Y1 U0 L! g* v! e1 U! l- `3 Z
  50. */3 a! [* x, H/ n: B: |# P
  51. void TEA5767_Read(void): @0 c9 _$ ~1 l% E9 t+ x3 F
  52. {
    # v/ u7 `0 O* e9 a; ^9 i% D3 \
  53.     uint8 i;0 @, n) u3 v' I, B( n
  54.     uint8 tempLow;3 \" E# M7 l  d, J0 u; F
  55.     uint8 tempHigh;
    , c% s. C$ ~, w+ I- O
  56.     s_pll = 0;  l! ^- x/ v' n" A
  57.    
    * W- U: {: |# G8 ?' v
  58.     IIC_Start();/ ~* y  @6 X; Z0 @6 ]$ j
  59.     IIC_SendByte(TEA5767_ADDR_R);                                       // TEA5767读地址3 c2 X, Z3 H' U, j. T
  60.     IIC_WaitAck();+ j' G  s1 J. C* Z
  61.     for(i = 0; i < 5; i++)                                              // 读取5个字节数据/ M& O0 x  u2 y+ n; e2 v0 A$ s2 P
  62.     {5 S2 g7 K0 a" F0 l1 G4 N
  63.         s_radioReadData = IIC_ReadByte();                            // 读取数据后,发送应答
    % A: n# S8 G0 m7 Q$ |/ q2 x
  64.     }
    8 A: j* R3 v) K" p! D* _
  65.     IIC_Stop();' }% X: I, E, G2 W1 w. E
  66.     tempLow = s_radioReadData[1];                                       // 得到s_pll低8位 " H; F6 O! c3 R- o' u4 e
  67.     tempHigh = s_radioReadData[0];                                      // 得到s_pll高6位
    5 u# H  }. t& c# n7 E8 q/ H
  68.     tempHigh &= 0x3f;& n- p; k! f& G3 m- c* m
  69.     s_pll = tempHigh * 256 + tempLow;                                   // PLL值 7 j! e0 `3 d2 E: s, h
  70. }& u8 o8 x% s$ k- E% b! s
  71.   F/ g7 H! Z7 O1 q, J
  72. /**
    ( V' m- D6 A, \4 C& K6 v" ^+ O! S/ D8 O
  73. @brief 由频率计算PLL
    - b1 i2 o2 P9 W4 T) Z
  74. @param 无- N0 y! {0 t8 E
  75. @return 无6 Y. O" |# n* v) q
  76. */
      b. ~4 `- c" O# X& G8 g4 R# E
  77. void TEA5767_GetPLL(void)
    9 g, T7 J% B; z) v3 d7 H; F; O
  78. {
    , j1 I2 A, p& F5 g* q# m+ j' a
  79.     uint8 hlsi;
    ; O2 F. ^+ H0 d, l9 x* y7 z
  80.     hlsi = s_radioWriteData[2] & 0x10;                                  // HLSI位6 v7 b& B1 j3 c* w6 |* ?( |
  81.     if(hlsi)
    # A4 \- s+ M3 X* k+ U
  82.     {
    , O6 D) b5 z, Q; H- s- |8 k' H* ~
  83.         s_pll = (uint32)((float)((g_frequency+225)*4)/(float)32.768);   // 频率单位:k" H4 ]% v* j# B$ v0 N& x' p
  84.     }: X/ B  [! L# `$ K6 n
  85.     else
    ; j$ V/ ]: q. x: N+ k. b6 x% \9 y4 x6 H6 o
  86.     {
    * L0 H5 h5 B* B/ e3 e& J
  87.         s_pll = (uint32)((float)((g_frequency-225)*4)/(float)32.768);   // 频率单位:k8 {0 |! b8 }) z( n5 n& C: C0 H
  88.     }
    / y& X3 k' t6 e, w4 Z
  89. }
    / \. m" g3 l+ `0 O$ q6 V
  90. * Y5 Z' m  h, m  b  @8 H
  91. /**
    ( i* p, ~& z, T* m8 D& o
  92. @brief 设置频率) h! w! f- ]  q7 d6 z
  93. @param frequency -[in] 频率,单位:KHz
    . f! s, A0 d: s: Z/ i5 S
  94. @return 无
    2 |' f- h" |; T8 T& x# j$ o/ I
  95. */
    * ?% G. [/ e2 S- V$ J
  96. void TEA5767_SetFrequency(uint32 frequency)
    0 g) L& j+ G: u! Z8 J4 G% k, ^
  97. {
    ! B( |- q$ o( ?5 R. ], G
  98.     g_frequency = frequency;# `5 e( `4 R4 d# n. Y
  99.     TEA5767_GetPLL();4 B" z9 o0 t3 _1 f
  100.     s_radioWriteData[0] = s_pll / 256;: I! O" Q8 G1 g- B- K$ B' E9 G" W
  101.     s_radioWriteData[1] = s_pll % 256;
    * s5 k  w* w( {/ T6 y" z. P8 I+ o4 q
  102.     s_radioWriteData[2] = 0x20;
    9 i7 a+ y& c/ I  @7 f2 A; x
  103.     s_radioWriteData[3] = 0x11;
    6 L" w8 B2 c. U
  104.     s_radioWriteData[4] = 0x00;
    7 w# `# D( q  `$ |1 m
  105.     9 o7 T( ?" s; o
  106.     TEA5767_Write();6 g' b5 r' I  V& D) d
  107. }/ E* b# ~9 }+ H) @: ~' S. L$ u( ]
  108. ; q5 k" h, J% N8 n$ ]+ W! h9 w0 d
  109. /**
    0 _0 E, W3 \1 G* l6 U9 n7 O+ \
  110. @brief 由PLL计算频率
    ) Y" B2 r. X# @* D! M% L( s
  111. @param 无9 y2 J/ x, k3 f! c1 I  E
  112. @return 无
      K0 y& b( j) ]& Y! b
  113. */
    : S' Z4 v; O  u7 Z$ j
  114. uint32 TEA5767_GetFrequency(void)  _+ l9 R4 Q; i2 e/ ~0 G
  115. {; |; S) Q  i) w% [" L/ v6 B* p
  116.     uint8 hlsi;
    * w/ {  P! ~4 t3 g3 D; S
  117.     uint32 pll = 0;  c2 e9 W- ~% {) N. d/ h4 b
  118.     pll = s_pll;
    " U3 G8 t, F  {! O) d% t% U
  119.     hlsi = s_radioWriteData[2] & 0x10;+ w8 x; u) [' _
  120.     if(hlsi)
    9 G3 h: B5 \( u2 H. e8 Q
  121.     {4 v" ]4 |/ y. w  K2 t
  122.         g_frequency = (unsigned long)((float)(pll)*(float)8.192-225);   // 频率单位:KHz5 \9 [( g8 N* p$ r2 s
  123.     }
    4 L, Q$ S; n, t  p* ~' T3 C4 s/ c) R
  124.     else
    & i0 q6 I& b0 q& Z3 N. c
  125.     {" }0 o" w+ I, Z, y
  126.         g_frequency = (unsigned long)((float)(pll)*(float)8.192+225);   // 频率单位:KHz$ ~9 V; \  c( c
  127.     }2 f9 ^1 \/ B/ u) m
  128.    
    3 u. U6 N. p/ a9 B/ i$ l9 v8 D& x
  129.     return g_frequency;
    ( m5 o- j* M/ V+ k. ~9 ]
  130. }
    & Z3 Z6 j: [( @5 t! G
  131. ! w( A/ J8 e6 ?* d
  132. /**0 k) |1 `) w3 M! ?7 B% s9 G& P
  133. @brief 手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD4 u" D! \" i$ ^
  134. @param mode -[in] 搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz, T9 T8 c/ P6 [( ~6 d7 E% O
  135. @return 无
    ; L$ P' s! Y& R" F( a
  136. */
    ! \, P! g1 Z8 b$ {9 ?$ ?
  137. void TEA5767_Search(uint8 mode)- F8 k  |; U, p$ G
  138. {
    5 O6 R7 x  d6 Q: X8 O/ p
  139.     TEA5767_Read();                                                     // 读取当前频率值 " S3 s3 a- p/ F  [6 F1 D6 E' w
  140.     if(mode)                                                            // 向上搜索% g2 U# ]2 Z7 I1 F- Z
  141.     {
    7 q, z- r1 a3 B5 s' f  h" }
  142.         g_frequency += 100;( f* v6 t: P7 \0 S+ \8 u( d1 J
  143.         if(g_frequency > TEA5767_MAX_KHZ)                               // 频率达到最大值
    9 S) c2 r0 `$ S5 |
  144.         {
    - U/ d6 m! ?5 t- b1 S
  145.             g_frequency = TEA5767_MIN_KHZ;
    * e, a$ N* {5 I7 m
  146.         }
    4 }! h  e. d0 D* A
  147.     }
    . W$ H3 Q0 w- t4 x7 C$ d
  148.     else
    $ U# |$ ~; u' K, |: H
  149.     {
      T- z% x8 l2 Y6 O) I5 n
  150.         g_frequency -= 100;
    ( Z+ _& E% h; z4 ?2 S% [1 [
  151.         if(g_frequency < TEA5767_MIN_KHZ)
    # x7 G5 E) G4 g0 x; |3 Q
  152.         {+ _' K7 n7 z% Q( n' \! r6 {- _
  153.             g_frequency = TEA5767_MAX_KHZ;
    : v0 a4 c& h$ U, f- s5 l
  154.         }
      R; ^: V/ R/ r1 {
  155.     }          0 K0 G  q" F7 t
  156.     TEA5767_GetPLL();                                                   // 计算PLL值
    # f4 I: g5 ~' c4 s/ F# b3 B
  157.     s_radioWriteData[0] = s_pll / 256;
    * k. q& T+ |/ v' j0 `" p  p) c6 J
  158.     s_radioWriteData[1] = s_pll % 256;/ l: q& T8 h8 e$ P6 M$ \
  159.     s_radioWriteData[2] = 0x20;
    ; {; y9 x! K2 H) x2 q& t, j
  160.     s_radioWriteData[3] = 0x11;
    7 t" ^) |, i8 m2 B" o# W% L
  161.     s_radioWriteData[4] = 0x00;
    " D# r  f% j, c7 s* Y' `; V* @
  162.     TEA5767_Write();
    3 s6 M! |* m4 v+ h# l
  163.     TEA5767_Read();
    3 U0 b' [& {" P: S! P: L
  164.     if(s_radioReadData[0] & 0x80)                                        // 搜台成功,RF=1,可保存其频率值待用# N* v& n" X% v2 O% q' G$ |
  165.     {
    ' i1 \3 }# @- }  _
  166.         printf(" frequency=%d\n", (int)g_frequency);, Z# \( j0 t+ I: R, p. J
  167.     }   
    6 L# ]" H: u; H( ^7 L1 g
  168. }
    * B9 \& \5 i* I$ E3 T4 g+ F
  169. / Y& H1 r% G! E! I
  170. /**
    % C! {# b% P6 M! s9 u! o
  171. @brief 自动搜索电台
    5 K+ ?) `* c9 |+ `$ U
  172. @param mode -[in] 搜索方式,mode=1,频率增加搜台,频率值+0.1MHz;mode=0,频率减小搜台
    " w$ A- C& J# I  S
  173. @return 无7 Q5 L8 c' A+ I  Y
  174. */
    , {1 w9 Q- B: C
  175. void TEA5767_AutoSearch(uint8 mode)
    9 o2 o# X3 a1 x- U) T+ ^
  176. {' I* v3 m2 U2 c' t+ p. B. q& \
  177.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
    $ `8 T3 c/ Y2 M* I* T
  178.     uint8 radioIf = 0;                                                    // 中频计数结果
    4 L. D: |; x5 H; e+ n$ f7 W
  179.     uint8 radioLev = 0;                                                    // 信号电平ADC输出
    ) I5 D, e  [$ r8 i& H" q8 S
  180.     ! W5 \# e" w8 P
  181.     // 直到搜台成功,RF=1,0x31<IF<0x3E* T2 k# C/ Z" E8 R; r! V0 t+ K
  182.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E))), i, {( H8 v4 N1 ^0 E) S) P) f+ N
  183.     {
    0 N7 v9 F$ V$ g0 b, l0 D, L
  184.         if(mode)                                                        // 频率增加搜台
    8 Q( i( M! L7 ]+ Q% N$ i1 @
  185.         {: l8 W6 M/ U: r9 m
  186.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
    7 ~* {( D3 K- z5 I) S6 p, [0 z
  187.             g_frequency += 100;
    # {# I5 s- Y' z1 o( m5 @0 y
  188.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值% B- n0 ]! n* E
  189.             {
    5 g; x) F  f6 ^; @4 N4 J7 T
  190.                 g_frequency = TEA5767_MIN_KHZ;
    $ p1 y+ k7 K) z
  191.             }
    ( r0 L+ _3 K7 S2 L
  192.         }
    " W0 e1 `0 N9 w" a! i1 ?
  193.         else                                                            // 频率减小搜台
    ; k9 ~# M& j4 q* f5 z8 C8 v4 j
  194.         {8 v9 H2 Z9 E' d- }, E6 ~
  195.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0& A3 Z; g3 @9 D7 G
  196.             g_frequency -= 100;
    1 _4 f* Z7 f$ Y6 _6 s
  197.             if(g_frequency < TEA5767_MIN_KHZ)
    9 I. b" Y% d$ x) v# ^2 h! w* ^  P
  198.             {
    & V. r! a# F2 k8 U  b' Q2 W) Z
  199.                 g_frequency = TEA5767_MAX_KHZ;0 ]9 O% F7 x5 ^3 v& T
  200.             }            8 C% {* d* |3 ~6 I
  201.         }+ V  L  a2 U+ M% U1 H8 h
  202.         TEA5767_GetPLL();                                                // 转换为PLL值
    * ]+ i4 F- T6 R1 C6 [0 b3 e
  203.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1
    ! S5 p' m0 N; H1 d9 v$ |
  204.         s_radioWriteData[1] = s_pll % 256;+ q' ^; p# x; J  }1 x0 V; L/ k
  205.         s_radioWriteData[3] = 0x11;" A  G& {& F" V5 \: s
  206.         s_radioWriteData[4] = 0x00;
    2 a3 A5 k: V* K. v
  207.         TEA5767_Write();                                                // 写入5个字节数据$ P" ?" ?4 G2 \' @# ^- P
  208.         TEA5767_Read();                                                    // 读取当前频率值 6 A5 }! H5 ~0 _+ w/ t6 d7 }0 M, `
  209.         radioRf = s_radioReadData[0] & 0x80;
    3 l# L) f$ c3 \
  210.         radioIf = s_radioReadData[2] & 0x7F;
    6 ~" r0 P; r( p. M! T, R1 a3 b' E
  211.         radioLev = s_radioReadData[3] >> 4;
    2 r/ ?6 Q( U, d3 F0 f# v
  212.         printf(" r=%02x\n", radioRf);
    4 I/ V+ L# W) c0 B3 W8 t# _
  213.         printf(" i=%02x\n", radioIf);
    8 ]. g) o4 w4 S" l' m" y% x( X
  214.         printf(" l=%d\n", radioLev);1 @& d' ^+ g  M
  215.         printf(" f=%d\n", (int)g_frequency);
    ! N0 R6 U* I7 e, U: ?1 d9 O6 n$ g6 q
  216.     }3 n2 S2 t' D: F
  217.     TEA5767_GetPLL();                                                   // 转换为PLL值
    . j- Y0 G/ y/ A* E" x* Y5 A
  218.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=0; r1 e9 K% \% w' _* s
  219.     s_radioWriteData[1] = s_pll % 256;
    + M  U- B& k5 I: e2 S7 @, Q
  220.     s_radioWriteData[3] = 0x11;0 n/ R) P% t5 D
  221.     s_radioWriteData[4] = 0x00;
    2 O& t* M: g+ d- ?" }5 h! r
  222.     TEA5767_Write();                                                    // 写入5个字节数据* ~! J! c6 T! N" p6 S0 T. f
  223.     TEA5767_Read();                                                        // 读取当前频率值 ' N) E) Y# o8 Y: T5 g
  224.     printf(" frequency=%d\n", (int)g_frequency);
    7 O* I" c, U2 _+ A3 l/ x" M
  225. }. e* {: X* r) A. h

  226. " A% [4 K2 i) l5 G
  227. /**5 t  F. L! a6 s+ t. ^
  228. @brief 静音0 [4 s' G/ L- _3 T0 Z
  229. @param mode -[in] 静音方式,mode=1,静音;mode=0,非静音
    ; ]) O1 q) X' A
  230. @return 无
    9 B4 C* Y7 m' }  h/ v& C' g
  231. */( ~' H2 T3 I1 u
  232. void TEA5767_Mute(uint8 mode)- L/ m0 ]" s- V) |6 G9 O
  233. {        ; T. d! _, Y4 q# `+ S3 k
  234.     if(mode == TEA5767_MUTE_ON)
    , r6 X' C( q- t% e# C3 y8 A0 Q: }
  235.     {4 z9 s- {4 u9 {' W
  236.         s_radioWriteData[0] = s_radioWriteData[0] | 0x80;
    . p' Y9 U1 f, s* o
  237.     }
    , A5 v: ?( H, A( `
  238.     else$ w1 n% N2 }# h, ~( _8 k
  239.     {
    " V0 b, P0 g) H
  240.         s_radioWriteData[0] = s_radioWriteData[0] & 0x7F;6 R' u' i/ l4 W
  241.     }
    & m) N+ E4 x6 r0 _
  242.    
    - C+ z9 Z4 U& c. C7 u0 @8 h" r8 Y6 ^
  243.     TEA5767_Write();+ f" F8 h& z! N( f& u# u7 g$ N
  244. }4 f* b4 U& }% P6 I0 c$ @+ M

  245. . M  L* q0 l: U" i5 T
  246. /****************************************************END OF FILE****************************************************/
复制代码

/ b) n8 {7 R2 ?3 Z* e% D! K* P

4.2 board_tea5767.h7 W% F* F* ^! Z0 L; V

  1. #ifndef _BOARD_TEA5767_H_) X. V. j4 t9 u$ g
  2. #define _BOARD_TEA5767_H_
    1 ]  I/ r' |) ]; e/ ^

  3. 4 }" ^& M8 r: ^+ s! b
  4. /*********************************************************************9 H" w& V% C& r" ^: B# x
  5. * INCLUDES+ g* g& j/ M) c8 L$ k' ~
  6. */0 r& E' t' ~8 E" Z
  7. #include "stm32f10x.h"
    ! @" n# ]+ D( E3 u  f' _
  8. 3 b, Q+ X9 D' e) c6 V+ Q
  9. #include "common.h"# V* a. K8 }" T" r

  10. , e" p# H( y4 l6 C
  11. /*********************************************************************9 t" _$ E+ t' g7 b% n7 Y
  12. * DEFINITIONS
    ( b0 O- S; `3 \1 J4 I  y$ U. p9 \
  13. */+ |/ ~- \4 U2 ?/ h/ G/ U# v$ {
  14. #define TEA5767_ADDR_W      0xc0    // TEA5767 写地址0 E/ r2 ^+ ~$ e7 M; H- g
  15. #define TEA5767_ADDR_R      0xc1    // TEA5767 读地址9 h6 C: a. J" v
  16. # I: X5 [/ d2 v& R6 w- O- l5 F2 e
  17. #define TEA5767_MAX_KHZ     108000  // 最高频率 108M
    % B+ R2 o: h( v/ p$ k
  18. #define TEA5767_MIN_KHZ     87500   // 最低频率 87.5M8 d- R+ L' L% P* M8 S; U/ ?, `

  19. 8 H+ r7 c' R7 |4 m2 L; v% a0 J0 {' o$ k
  20. #define TEA5767_MUTE_ON     1       // 非静音
    ( T& g# [! ~, m3 _) c/ U6 A
  21. #define TEA5767_MUTE_OFF    0       // 静音
    6 K/ K- `$ L5 o
  22. 0 F% v4 T, ?' }3 [* D4 q! L
  23. #define TEA5767_SEARCH_UP   1       // 向上搜索
    % p: f% v. O  I5 A$ Q2 V! b7 V
  24. #define TEA5767_SEARCH_DOWN 0       // 向下搜索
    : I2 i+ N* P) A. T  x% [6 j

  25. ) F' V+ G4 s  j- Z2 D+ w
  26. /*********************************************************************( O3 [( T4 w8 Y/ e' f
  27. * GLOBAL VARIABLES4 P) g5 U- ^) Z3 Y$ b+ _& K: e
  28. */) `- ]* p: j3 b+ G  U
  29. extern unsigned long g_frequency;& q% ?) Y! B( \8 o- s7 h: b
  30.   `$ b9 R3 n( S" b( l8 B) I6 t3 e! M/ }
  31. /*********************************************************************. y# F* P7 V4 _3 j
  32. * API FUNCTIONS# K5 }# J! h* Z$ H9 ~3 @
  33. */
    3 a( P: I! F. k( R
  34. void TEA5767_Write(void);  S! g* ?9 h9 }* z+ t$ q  b
  35. void TEA5767_Read(void);4 V5 e1 _- q# \# v; l) k; t
  36. void TEA5767_GetPLL(void);
    6 d( W* h8 Q/ j& w
  37. void TEA5767_SetFrequency(uint32 frequency);
    ; b% c2 \7 D( E2 j$ m' |/ @: l
  38. uint32 TEA5767_GetFrequency(void);; X  @; x, W2 U9 Q1 U8 X
  39. void TEA5767_Search(uint8 mode);
    6 F4 ^0 c( T6 L0 K3 b. Z, S
  40. void TEA5767_AutoSearch(uint8 mode);
    2 v& Q, l' H0 ~" Q
  41. void TEA5767_Mute(uint8 mode);% q( Z+ D# I9 {# H4 x) u$ x' W
  42. ( v- u4 t# Z* P! C% u
  43. #endif /* _BOARD_TEA5767_H_ */
复制代码

! p1 s: b" G/ R5 ^' N4 s6 s2 J

五、API调用
" }/ q, U! h6 e( c/ O% `需包含头文件 board_tea5767.h

0 P# f5 o7 ?0 x# Y  R. C

TEA5767_Write


) X" A/ h8 y9 |. a

功能    向TEA5767写入5个字节数据) O; h# M1 q' v: m+ a% D
函数定义    void TEA5767_Write(void)
8 w8 d7 F% q( v8 r( s* j参数    无( T  S& s& Z' Y, N% a3 W
返回    无4 L" p! i( M3 |% b" @7 }
TEA5767_Read

7 J- m  u( }1 Z

功能    读TEA5767状态
6 X% A- {' a5 |0 u- v函数定义    void TEA5767_Read(void)- k' c( A& @. i" l6 W4 r8 d/ v
参数    无
" `0 ?4 J/ B" S8 r# x( R: x返回    无) k  k" k- s0 N
TEA5767_GetPLL


( P; T+ Z3 E7 j+ Z- ?: J

功能    由频率计算PLL
0 W* l' F! m. e. ^' u7 a函数定义    void TEA5767_GetPLL(void). t- d$ Q6 P9 c+ e8 L8 N
参数    无& Q' b+ _; g% ~. r$ y7 q+ m
返回    无. Y; \1 e9 }7 b5 o7 U
TEA5767_SetFrequency


1 {) T7 B* d7 o, V' S" R6 t; U& }

功能    设置频率( V5 T: h$ G7 ?9 R. W
函数定义    void TEA5767_SetFrequency(uint32 frequency)6 v& _8 e3 ?7 ^6 |+ t9 x
参数    frequency:频率,单位:KHz
7 W; M$ J; [- v( X2 m; L, e# {1 F返回    无0 y* M) \  S' d1 |5 j4 P) M
TEA5767_GetFrequency

& B' E0 Z% x! l

功能    由PLL计算频率; q/ D# d- k- P( Q+ F0 t8 C8 J
函数定义    uint32 TEA5767_GetFrequency(void)) L9 z8 J% l( z$ T
参数    无) n5 |1 k$ ?8 v% K0 T
返回    当前频率& R5 a$ A" ^2 N$ b* r
TEA5767_Search

" H7 Z3 F8 W0 W7 C% w# ^

功能    手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD. V! _$ }2 H2 h4 O
函数定义    void TEA5767_Search(uint8 mode)
3 ^" I8 f6 p  A7 _: j4 h2 a, q参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz8 `8 N% O3 h2 _( {2 ?* M3 p% v$ p4 ?
返回    无
9 |, s- ]  B) x3 I% R; ^6 g4 O+ RTEA5767_AutoSearch


# T' ~0 O* n- X9 g9 {2 |4 q

功能    自动搜索电台! d" E+ Z# k; J, b' s8 `
函数定义    void TEA5767_AutoSearch(uint8 mode). y" I- `2 X5 l$ m; z
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz0 ?- s6 W( H) B* u
返回    无
, {4 }1 i* H& l# s$ VTEA5767_Mute

% ]  W" Y1 B2 K0 Y) V

功能    静音
/ g2 @, m- O1 k; y2 Z! Z函数定义    void TEA5767_Mute(uint8 mode)
( ]- }( A; a9 L& u参数    mode:静音方式,mode=1,静音;mode=0,非静音
% ^2 f- U7 y- ^. o+ S4 q* E" S返回    无


& r" S2 E9 u1 i六、使用例子
0 Q1 s; w. [4 p1 `, o6.1 手动加减台
9 y0 q/ F9 y9 }4 h
±0.1MHz,87.5-108MHz,循环增减

  1. TEA5767_Search(1);  // 加台
    & R. |1 u% ^0 g, K
  2. TEA5767_Search(0);  // 减台
复制代码


) E+ t% A: D0 u9 X" b1 o" M0 T6.2 自动搜台

' t5 a. d8 V+ \) y- J) _* S& A由于从IC中读回的频率不准,这里采用静态变量g_frequency来记录当前频率,87.5-108MHz,循环增减

  1. TEA5767_AutoSearch(1);  // 向上搜台! t2 n" ?( P% r+ P8 H6 I, u
  2. TEA5767_AutoSearch(0);  // 向下搜台
复制代码


, {8 a! @7 m" y  J; G" \& j参考自动搜台流程:

4 U4 {/ r5 W) S5 ]: Q  `
由上面流程可知,决定参数有

rf:1=发现一个电台,0=未找到电台/ {8 K) O+ q( l+ D6 u; v  s
if:中频计数结果,0x31<IF<0x3E则为符合电台: S7 {: l6 A3 t" v" n
lev:信号电平ADC输出,可通过写入的5个字节中对应SSLadc的位(查看下面附录),下面SSLadc=7  f. E. c/ H/ H$ V

  1. void TEA5767_AutoSearch(uint8 mode)& T7 P) E/ G4 }/ X9 Z/ F
  2. {' H  h: L$ ^% o# F* H9 D
  3.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
    3 k. E5 p! L5 t, D; `9 a% m
  4.     uint8 radioIf = 0;                                                    // 中频计数结果0 b6 c- M) I! Y( E8 K, y4 q8 S
  5.     uint8 radioLev = 0;                                                    // 信号电平ADC输出) r- O# |* I' j
  6.     / x: G8 w& C  z
  7.     // 直到搜台成功,RF=1,0x31<IF<0x3E
    7 Z" [$ R4 }+ ]
  8.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
    4 j/ t6 K( t4 L3 C; ]) K
  9.     {
      _3 [: t: b3 Z1 ]+ f+ I/ L5 A
  10.         if(mode)                                                        // 频率增加搜台
    ' Q: r& v6 u1 c3 @* s$ q
  11.         {
    : q! c+ Z/ L3 b1 ]" d
  12.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
    / B3 [- z5 v# g5 A: v7 `
  13.             g_frequency += 100;
    5 t4 `& f  @4 z6 Y2 E( h
  14.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值( i* X& X9 s4 P5 T3 c; \9 C  `$ u) {4 c
  15.             {
    ; o# ]- e( m6 p/ f9 c9 m
  16.                 g_frequency = TEA5767_MIN_KHZ;
    + d& _4 O7 m9 n* G2 Y' v. Q2 j
  17.             }/ b# C: M: A+ ?# p! c6 q2 k2 ~* S
  18.         }
    $ x1 E& Y  h9 _/ h2 H3 I
  19.         else                                                            // 频率减小搜台% E& }4 G9 ]3 Z
  20.         {
    % Z, l  ?. S  n! B4 ~( A1 U
  21.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0
    3 s8 b# c; a" i0 z
  22.             g_frequency -= 100;% J8 M. C/ k9 B7 @" m
  23.             if(g_frequency < TEA5767_MIN_KHZ)
      M+ ?1 [" V  t2 M
  24.             {
    . X8 z! T: P8 q2 S7 X+ K+ i, v
  25.                 g_frequency = TEA5767_MAX_KHZ;8 |: }0 I* B+ D' o$ _
  26.             }            
    + G! j+ |- b& N1 C" D7 V
  27.         }
    : e! C# d4 ^! N% r9 A0 _+ X7 F
  28.         TEA5767_GetPLL();                                                // 转换为PLL值' X- _) u% n, U1 M6 S$ s
  29.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1' S; X# x) R' N0 B
  30.         s_radioWriteData[1] = s_pll % 256;
    0 X2 Z) w! C- m7 I' F
  31.         s_radioWriteData[3] = 0x11;2 L" T: i% w6 c0 L, N$ K
  32.         s_radioWriteData[4] = 0x00;: j+ g" F5 f  L
  33.         TEA5767_Write();                                                // 写入5个字节数据* y7 `* P1 M+ f& w
  34.         TEA5767_Read();                                                    // 读取当前频率值 * _% h# ~; |8 D% {+ w( X/ a
  35.         radioRf = s_radioReadData[0] & 0x80;
    : U) [& b5 S" M- x
  36.         radioIf = s_radioReadData[2] & 0x7F;/ \$ U, Y0 X6 A, `5 G
  37.         radioLev = s_radioReadData[3] >> 4;: l" ]3 `2 A3 d. u6 M) l; R* \3 @$ M
  38.         printf(" r=%02x\n", radioRf);( G$ K$ k: C$ w' I& U* D
  39.         printf(" i=%02x\n", radioIf);* }- V3 I* C) s% S4 @* A( d
  40.         printf(" l=%d\n", radioLev);7 I" m5 p! z- O; H
  41.         printf(" f=%d\n", (int)g_frequency);% F# r4 B5 P6 w7 |% @
  42.     }7 b6 l. [. k4 T) I4 d
  43.     TEA5767_GetPLL();                                                   // 转换为PLL值
      p- \: ?, u: T& D4 ?7 ~  G% a, l
  44.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=08 y8 N+ K$ T, u* f7 a- J
  45.     s_radioWriteData[1] = s_pll % 256;
    3 C0 C6 `+ B5 Y" T' h0 X
  46.     s_radioWriteData[3] = 0x11;
    $ |* j$ x5 w, E8 K/ j
  47.     s_radioWriteData[4] = 0x00;
    : A1 O. |6 ?& u* q4 o
  48.     TEA5767_Write();                                                    // 写入5个字节数据! ?& f- v& V# ]( m  W
  49.     TEA5767_Read();                                                        // 读取当前频率值 3 E- M3 O: f* D+ x
  50.     printf(" frequency=%d\n", (int)g_frequency);
    ' z' M9 W. c1 H- a& q
  51. }
复制代码
$ U0 I% h0 K6 B

6.3 软件静音7 y5 P6 j4 X: o, f( p8 r

  1. TEA5767_Mute(TEA5767_MUTE_ON);      // 收音机静音2 K, }: W% K2 Y6 P7 l! t) W9 w
  2. TEA5767_Mute(TEA5767_MUTE_OFF);         // 收音机开启收听
复制代码

: o( j5 ~8 G1 f0 g
七、附录
, C# j2 s6 q, p8 W0 R$ R7.1 写数据

9 v9 @( R  t6 c6 {1 f1 q2 {向TEA5767 写入数据时,地址的最低位是0,即写地址是C0。读出数据时地址的最低位是1,即读地址是C1。TEA5767的控制寄存器要写入5个字节,每次写入数据时必须严格按照下列顺序进行:4 o( C1 g+ h$ m+ P- f; d
地址、字节1、字节2、字节3、字节4、字节5。


3 c/ u# L) K" w0 _

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

5 S0 X* b1 g7 F! w. E

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

' G2 Y: m4 T! s: O  d

表4 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)( ]! X. }9 A, c9 k
MUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8! H9 g9 i* G( `. w
表5 数据字节1各位的说明


$ H, v+ }% a, k" @! E

BIT    SYMBOL    说明
- Y9 A/ W0 s* q: I- B7    MUTE    若MUTE=1 左右声道静音;若 MUTE=0 左右声道非静音) `0 e/ Z0 j+ [8 D) o3 g
6    SM    搜索模式;若SM=1 搜索模式;若 SM=0 非搜索模式
6 D* _, W/ C# k3 a% m5 to 0    PLL(13:8)    预置或搜索电台的频率数据高6位
# P7 y% B/ q: O% J" f& e表6 数据字节2的格式

% ~( L3 a4 l( V# [) X

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
: k% w) i8 U( t! {9 o- HPLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL09 a1 k9 n" K5 `- [
表7 数据字节2各位的说明


; {, c7 G8 Z  F9 V3 ?

BIT    SYMBOL    说明+ Y9 ~( y3 `5 Y/ _* \3 p0 e
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位
: [, \/ D/ P( s3 T  {表8 数据字节3的格式


$ G& Q1 g* q) R4 M: g0 e3 k

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)8 O; {1 X/ {# @7 A) I
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
2 |* p0 N' a6 y( e  A! }/ m' e: v表9 数据字节3各位的说明


( Z" Y, h; f3 C# V7 f" O

BIT    SYMBOL    说明
; q# _, o  e0 H4 g7    SUD    若 SUD=1 向上搜索;% z& ~1 j( e8 R# U* U2 z
若 SUD=0 向下搜索# b1 D- `( i3 J2 r6 X2 m
6 and 5    SSL[1:0]    搜索停止电平:见表10-116 A, R# N4 l* @" H* C) [
4    HLSI    若 HLSI=1 高端本振注入;
) }% d3 W- g6 Z) a# t$ `, E若 HLSI=0 低端本振注入
& E; C! [7 D* S' v: y! c: {3    MS    若 MS=1 强制单声道;
  [2 Y/ G6 k; d( a若 MS=0 开立体声' t4 ?" @; v: \, V2 @$ W
2    ML    若 ML=1 左声道静音强制单声道;+ W" C1 \" r7 l
若 ML=0 左声道非静音
$ b& x6 [8 R% k" [( [5 y3 L1    MR    若 MR=1 右声道静音强制单声道;
8 V# A! N  c0 [. D若 MR=0 右声道非静音5 F' N! Y. ]6 h" R
0    SWP1    软件可编程输出口1:若 SWP1=1 SWPOR1为高;
1 k3 I( U/ L8 ~* m# V  X. D* c) T: Y若 SWP1=0 SWPOR1为低
/ m! R. s# Q% b+ c  |表10 搜索停止电平设定

( z8 k5 S3 }- R& y9 ]- I2 x' ?

SSL1    SSL0    搜索停止电平
/ J0 ^+ c0 Q! L9 q0    0    不搜索
  i& K7 M# ?, F1 R" z% u' [- k% s. E0    1    低电平 ADC output=51 I! M0 T$ m: Y' w  U% N9 l3 `
1    0    中电平ADC output=7$ b1 S& E! ]8 [# y8 g
1    1    高电平ADC output=105 O* g9 Z: N0 e. V6 C$ w5 q+ ]
表11 数据字节4的格式

% R% ?6 z# p0 h6 P$ x4 F$ c

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)  F. S2 [' u! j3 L
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI% ]# p' K: }3 o; T4 N0 D6 q  h
表12 数据字节4各位的说明

/ z6 t2 @) g8 D* p4 r. A

BIT    SYMBOL    说明' ^, F# y. P. Z& \. _6 y: q4 P
7    SWP2    软件可编程输出口2:若 SWP2=1 口2为高;
, x3 Q& j" }5 K' ^8 D# z2 B5 N, [. i, y若 SWP2=0口2为低
2 U) j" q2 U" Y/ q6    STBY    若 STBY=1 待机模式;
: I# f! e% U( f, D3 }若 STBY=0 非待机模式
- V9 L) i$ |; T: f+ v5    BL    若 BL=1 日本FM波段;  t3 O; O7 k  `- X
若 BL=0 美/欧 FM 波段
- J" B# @$ E- e3 @+ C: t4    XTAL    若 XTAL=1 fxtal=32.768KHz;4 Z3 S7 f6 H& z) c+ ]  u1 Y$ Q
若 XTAL=0 fxtal=13MHz2 V: m3 i+ w4 u% V' a; t' F
3    SMUTE    若SMUTE=1 软件静音开;
+ l  J0 J, X) R! p2 N! [若 MUTE=0 软件静音关' E1 W$ g  b3 P
2    HCC    若 HCC=1高音切割开;% r: \$ u% b! g
若 HCC=0高音切割关+ m. Z/ O& g$ p6 I  U1 e5 h9 Z  D
1    SNC    若 SNC =1立体声噪声消除开;& h6 F9 v* e4 e" c+ X( U# ^" q
若 SNC=0立体声噪声消除关
. W. n- r4 N% U7 f+ I% s0    SI    若SI=1 引脚SWPORT1 作ready flag输出标志;3 \) _2 ]5 {$ A# r* F! i& r, e
若 SI=0 引脚SWOPRT1 作软件可编程输出口
; k* L* t& ^$ y' {0 I3 V$ b表13 数据字节5的格式


0 d" j, i5 D4 v' a% Z

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)* ?- l& l, X: D( k2 n2 {' p* Q+ V/ f
PLLREF    DTC    -    -    -    -    -    -
/ E& P4 \! K: i8 ?3 n4 N表14 数据字节5各位的说明

' F0 {, e$ J) m% `

BIT    SYMBOL    说明# s, t1 j, e$ a! Q
7    PLLREF    若 PLLREF=1 则6.5 MHz 参考频率 PLL可用;
$ c8 g6 F4 l2 N) z8 e, @6 R若 PLLREF=0 则6.5 MHz参考频率 PLL不可用7 l" h, @. U9 V0 F- e
6    DTC    若DTC=1 the 去加重时间常数为75μs;1 Z: G0 }2 Q  f( B; _& C
若 DTC=0 the 去加重时间常数为50μs- u) H0 Y, l9 X% s0 G
5 to 0    -    不用管它

) B5 e; L4 u% w0 ~/ D# ^; s
7.2 读数据
% D1 Z  n- N: f和写数据类似,从TEA5767 读出数据时,也要按照“地址、字节1、字节2、字节3、字节4、字节5”这样的顺序读出,读地址是C1。读出的5个字节的含义见表16到表25中的说明。


" }5 M7 ]9 }% M- s& B) `

表15 读模式

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

! K- h  R" R  ?* F
表16 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)) p$ x' X" P. h, d
RF    BLF    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8

) }; ]# M' ^4 B: |/ i7 |
表17 数据字节1各位的说明

BIT    SYMBOL    说明
/ I% ]! C4 v/ X9 `( u% a3 z7    RF    若RF=1 则发现了一个电台或搜索到头;
. ~. B9 e: Q2 }/ p7 \6 ?若 RF=0 未找到电台
- B  a- }) n. B6    BLF    若BLF=1 搜索到头;& E: ]: k( C* N+ O
若 BLF=0 未搜索到头
  `* d4 K& d0 ?0 M& f4 s5 B5 to 0    PLL[13:8]    搜索或预置的电台频率值的高6位


8 w( Y) c' a' v  F- k表18 数据字节2的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
8 q4 `7 X3 e  @& @8 fPLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0

) Y( q0 s, A" ~8 `3 Z: f
表19 数据字节2各位的说明

BIT    SYMBOL    说明' P" ]  E$ Z" S+ F$ I. M4 Y
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位


5 V: @, }7 }. `4 w0 f" V+ d+ E- @表20 数据字节3的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)& _/ a( ?. E7 p
STEREO    IF6    IF5    IF4    IF3    IF2    IF1    IF0

- X; y2 c5 W* z5 S2 Y" O
表21 数据字节3各位的说明

BIT    SYMBOL    说明
8 D" E( L& F+ Q% M5 c9 Y/ s$ s# }# N% i7    STEREO    若 STEREO=1 为立体声;
* o& L. J; l6 b3 s! t若 STEREO=0 为单声道3 ]/ e  T1 f$ U2 {5 y! [# R
6 to 0    IF[6:0]    中频计数结果


' Z. a0 ]- I' H* z2 W5 R表22 数据字节4的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)4 a( E8 K  D4 o. U4 ?. i5 {
LEV3    LEV2    LEV1    LEV0    CI3    CI2    CI1    CI0

# H" a2 ?7 z2 L
表23 数据字节4各位的说明

BIT    SYMBOL    说明5 J) p9 p8 S: S. r' N$ I
7 to 4    LEV[3:0]    信号电平ADC 输出
: p8 c4 [( E  R$ s5 t% ]* _' w' o% F3 to 1    CI[3:1]    芯片标记; 设置为0
. \( t9 O- x2 r  ?: _4 `0    -    该位为 0

5 J2 K5 H2 f1 F& E, h; Q( S
表24 数据字节5的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
6 K& i2 y8 J9 z2 z0    0    0    0    0    0    0    0


/ Z! ]* w" g8 L$ j  P& w1 G9 `: Z表25 数据字节5各位的说明

BIT    SYMBOL    说明
  N0 t, g4 ?% n2 k7 to 0    -    供以后备用的字节;设置为0

0 @( H( E2 N' V* X/ v
7.3 举例
9 i, n" ~2 B* X6 [0 S根据上面的算法,以106.8的天津交通台为例,它的PLL为32d1H,第一个字节的BIT7=0非静音,BIT6=0不搜索,第三个字节的BIT4=0低本振,第四个字节的BIT5=0欧美制式,BIT4=1用32768晶振,其余位的设置无所谓,可任意。各字节值见表27~31。


$ K) P7 J5 _; E& m2 p

表27字节1:0x32

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
) ^4 a  Y3 H* E) G6 DMUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
4 Z6 [% h" D3 l7 ~* D" S0    0    1    1    0    0    1    0
! H! h- ?# [* ^1 y非静音    非搜索    3        2      

      + f  C% l( D! g
表28字节2:0xd1

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
' |: Z  K" A- U6 F/ MPLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
* r  J" ?" B  z7 `1    1    0    1    0    0    0    17 t( W3 {( m! U7 L$ {  ^; g. T
d                1         

   ' ^' R% i4 S9 U. B+ `, o, N
表29字节3:0xc0

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)" N% x" t" F6 `6 z0 L
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
" p5 ]! J; |/ k2 N$ P" u$ b1    1    0    0    0    0    0    0( F$ x3 B5 {- }4 _; o2 c
向上搜索    搜索停止中电平        低本振    立体声    非静音        随便


  T3 v3 v0 B: e5 Z3 s  \2 E" @表30字节4:0x17

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)( z3 T7 C+ A5 D/ c/ [, W' [
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI1 `9 A* K+ x* ~. ^1 o
0    0    0    1    0    1    1    1
5 U( ^7 y1 s& }+ p# e  H9 N7 {任意(不用)    非待机    欧美    32.768    非软件静音    高音切割    除噪声    SWP1=RF


$ H0 x6 V& D! b9 r- y表31字节5:0x00

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)- [3 w. o* F" K9 s0 e
PLLREF    DTC    -    -    -    -    -    -
5 g( ?& B# u( o0    0    0    0    0    0    0    03 T6 }- G8 u! d1 ^
不用6.5M    50μs                        ) I0 @( C3 P8 }( y  t
据此给出的控制字是:0x32,0xd1,0xC0,0x17,0x00,将这个控制字写入TEA5767就可以了。

————————————————9 j4 o7 y+ O9 t9 {
版权声明:Leung_ManWah

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版