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

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

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

一、简介

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

电源 5V
I2C 总线通讯
可以使用软件进行静音和消除噪音


二、硬件连接
功能口    引脚
SCL    PB.6
SDA    PB.5


三、添加I2C驱动


四、移植文件
注意:以下出现缺失common.h文件错误,去除即可。uint8改为uint8_t或unsigned char或自己宏定义

将 board_i2c.c、board_i2c.h、board_tea5767.c 、 board_tea5767.h 四个文件加入到工程


4.1 board_tea5767.c

  1. /*********************************************************************
  2. * INCLUDES
  3. */
  4. #include "stdlib.h"
  5. #include "stm32f10x.h"

  6. #include "board_i2c.h"
  7. #include "board_tea5767.h"
  8. #include "common.h"

  9. /*********************************************************************
  10. * GLOBAL VARIABLES
  11. */
  12. unsigned long g_frequency = TEA5767_MIN_KHZ;

  13. /*********************************************************************
  14. * LOCAL VARIABLES
  15. */                                    
  16. static uint8 s_radioWriteData[5] = {0x31,0xA0,0x20,0x11,0x00};          // 要写入TEA5767的数据,默认存台的PLL,104.3MHz
  17. static uint8 s_radioReadData[5] = {0};                                  // TEA5767读出的状态
  18. static uint32 s_pll = 0;

  19. /*********************************************************************
  20. * PUBLIC FUNCTIONS
  21. */
  22. /**
  23. @brief 向TEA5767写入5个字节数据
  24. @param 无
  25. @return 无
  26. */
  27. void TEA5767_Write(void)
  28. {        
  29.     uint8 i;
  30.    
  31.     IIC_Start();                                                        // 发送起始信号
  32.     IIC_SendByte(TEA5767_ADDR_W);                                       // TEA5767写地址
  33.     IIC_WaitAck();                                                      // 等待应答
  34.     for(i = 0; i < 5; i++)
  35.     {
  36.         IIC_SendByte(s_radioWriteData);                              // 连续写入5个字节数据
  37.         IIC_Ack();                                                      // 发送应答
  38.     }
  39.     IIC_Stop();                                                         // 发送停止信号   
  40. }

  41. /**
  42. @brief 读TEA5767状态
  43. @param 无
  44. @return 无
  45. */
  46. void TEA5767_Read(void)
  47. {
  48.     uint8 i;
  49.     uint8 tempLow;
  50.     uint8 tempHigh;
  51.     s_pll = 0;
  52.    
  53.     IIC_Start();
  54.     IIC_SendByte(TEA5767_ADDR_R);                                       // TEA5767读地址
  55.     IIC_WaitAck();
  56.     for(i = 0; i < 5; i++)                                              // 读取5个字节数据
  57.     {
  58.         s_radioReadData = IIC_ReadByte();                            // 读取数据后,发送应答
  59.     }
  60.     IIC_Stop();
  61.     tempLow = s_radioReadData[1];                                       // 得到s_pll低8位
  62.     tempHigh = s_radioReadData[0];                                      // 得到s_pll高6位
  63.     tempHigh &= 0x3f;
  64.     s_pll = tempHigh * 256 + tempLow;                                   // PLL值
  65. }

  66. /**
  67. @brief 由频率计算PLL
  68. @param 无
  69. @return 无
  70. */
  71. void TEA5767_GetPLL(void)
  72. {
  73.     uint8 hlsi;
  74.     hlsi = s_radioWriteData[2] & 0x10;                                  // HLSI位
  75.     if(hlsi)
  76.     {
  77.         s_pll = (uint32)((float)((g_frequency+225)*4)/(float)32.768);   // 频率单位:k
  78.     }
  79.     else
  80.     {
  81.         s_pll = (uint32)((float)((g_frequency-225)*4)/(float)32.768);   // 频率单位:k
  82.     }
  83. }

  84. /**
  85. @brief 设置频率
  86. @param frequency -[in] 频率,单位:KHz
  87. @return 无
  88. */
  89. void TEA5767_SetFrequency(uint32 frequency)
  90. {
  91.     g_frequency = frequency;
  92.     TEA5767_GetPLL();
  93.     s_radioWriteData[0] = s_pll / 256;
  94.     s_radioWriteData[1] = s_pll % 256;
  95.     s_radioWriteData[2] = 0x20;
  96.     s_radioWriteData[3] = 0x11;
  97.     s_radioWriteData[4] = 0x00;
  98.    
  99.     TEA5767_Write();
  100. }

  101. /**
  102. @brief 由PLL计算频率
  103. @param 无
  104. @return 无
  105. */
  106. uint32 TEA5767_GetFrequency(void)
  107. {
  108.     uint8 hlsi;
  109.     uint32 pll = 0;
  110.     pll = s_pll;
  111.     hlsi = s_radioWriteData[2] & 0x10;
  112.     if(hlsi)
  113.     {
  114.         g_frequency = (unsigned long)((float)(pll)*(float)8.192-225);   // 频率单位:KHz
  115.     }
  116.     else
  117.     {
  118.         g_frequency = (unsigned long)((float)(pll)*(float)8.192+225);   // 频率单位:KHz
  119.     }
  120.    
  121.     return g_frequency;
  122. }

  123. /**
  124. @brief 手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD
  125. @param mode -[in] 搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
  126. @return 无
  127. */
  128. void TEA5767_Search(uint8 mode)
  129. {
  130.     TEA5767_Read();                                                     // 读取当前频率值
  131.     if(mode)                                                            // 向上搜索
  132.     {
  133.         g_frequency += 100;
  134.         if(g_frequency > TEA5767_MAX_KHZ)                               // 频率达到最大值
  135.         {
  136.             g_frequency = TEA5767_MIN_KHZ;
  137.         }
  138.     }
  139.     else
  140.     {
  141.         g_frequency -= 100;
  142.         if(g_frequency < TEA5767_MIN_KHZ)
  143.         {
  144.             g_frequency = TEA5767_MAX_KHZ;
  145.         }
  146.     }         
  147.     TEA5767_GetPLL();                                                   // 计算PLL值
  148.     s_radioWriteData[0] = s_pll / 256;
  149.     s_radioWriteData[1] = s_pll % 256;
  150.     s_radioWriteData[2] = 0x20;
  151.     s_radioWriteData[3] = 0x11;
  152.     s_radioWriteData[4] = 0x00;
  153.     TEA5767_Write();
  154.     TEA5767_Read();
  155.     if(s_radioReadData[0] & 0x80)                                        // 搜台成功,RF=1,可保存其频率值待用
  156.     {
  157.         printf(" frequency=%d\n", (int)g_frequency);
  158.     }   
  159. }

  160. /**
  161. @brief 自动搜索电台
  162. @param mode -[in] 搜索方式,mode=1,频率增加搜台,频率值+0.1MHz;mode=0,频率减小搜台
  163. @return 无
  164. */
  165. void TEA5767_AutoSearch(uint8 mode)
  166. {
  167.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
  168.     uint8 radioIf = 0;                                                    // 中频计数结果
  169.     uint8 radioLev = 0;                                                    // 信号电平ADC输出
  170.    
  171.     // 直到搜台成功,RF=1,0x31<IF<0x3E
  172.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
  173.     {
  174.         if(mode)                                                        // 频率增加搜台
  175.         {
  176.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
  177.             g_frequency += 100;
  178.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
  179.             {
  180.                 g_frequency = TEA5767_MIN_KHZ;
  181.             }
  182.         }
  183.         else                                                            // 频率减小搜台
  184.         {
  185.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0
  186.             g_frequency -= 100;
  187.             if(g_frequency < TEA5767_MIN_KHZ)
  188.             {
  189.                 g_frequency = TEA5767_MAX_KHZ;
  190.             }            
  191.         }
  192.         TEA5767_GetPLL();                                                // 转换为PLL值
  193.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1
  194.         s_radioWriteData[1] = s_pll % 256;
  195.         s_radioWriteData[3] = 0x11;
  196.         s_radioWriteData[4] = 0x00;
  197.         TEA5767_Write();                                                // 写入5个字节数据
  198.         TEA5767_Read();                                                    // 读取当前频率值
  199.         radioRf = s_radioReadData[0] & 0x80;
  200.         radioIf = s_radioReadData[2] & 0x7F;
  201.         radioLev = s_radioReadData[3] >> 4;
  202.         printf(" r=%02x\n", radioRf);
  203.         printf(" i=%02x\n", radioIf);
  204.         printf(" l=%d\n", radioLev);
  205.         printf(" f=%d\n", (int)g_frequency);
  206.     }
  207.     TEA5767_GetPLL();                                                   // 转换为PLL值
  208.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=0
  209.     s_radioWriteData[1] = s_pll % 256;
  210.     s_radioWriteData[3] = 0x11;
  211.     s_radioWriteData[4] = 0x00;
  212.     TEA5767_Write();                                                    // 写入5个字节数据
  213.     TEA5767_Read();                                                        // 读取当前频率值
  214.     printf(" frequency=%d\n", (int)g_frequency);
  215. }

  216. /**
  217. @brief 静音
  218. @param mode -[in] 静音方式,mode=1,静音;mode=0,非静音
  219. @return 无
  220. */
  221. void TEA5767_Mute(uint8 mode)
  222. {        
  223.     if(mode == TEA5767_MUTE_ON)
  224.     {
  225.         s_radioWriteData[0] = s_radioWriteData[0] | 0x80;
  226.     }
  227.     else
  228.     {
  229.         s_radioWriteData[0] = s_radioWriteData[0] & 0x7F;
  230.     }
  231.    
  232.     TEA5767_Write();
  233. }

  234. /****************************************************END OF FILE****************************************************/
复制代码

4.2 board_tea5767.h

  1. #ifndef _BOARD_TEA5767_H_
  2. #define _BOARD_TEA5767_H_

  3. /*********************************************************************
  4. * INCLUDES
  5. */
  6. #include "stm32f10x.h"

  7. #include "common.h"

  8. /*********************************************************************
  9. * DEFINITIONS
  10. */
  11. #define TEA5767_ADDR_W      0xc0    // TEA5767 写地址
  12. #define TEA5767_ADDR_R      0xc1    // TEA5767 读地址

  13. #define TEA5767_MAX_KHZ     108000  // 最高频率 108M
  14. #define TEA5767_MIN_KHZ     87500   // 最低频率 87.5M

  15. #define TEA5767_MUTE_ON     1       // 非静音
  16. #define TEA5767_MUTE_OFF    0       // 静音

  17. #define TEA5767_SEARCH_UP   1       // 向上搜索
  18. #define TEA5767_SEARCH_DOWN 0       // 向下搜索

  19. /*********************************************************************
  20. * GLOBAL VARIABLES
  21. */
  22. extern unsigned long g_frequency;

  23. /*********************************************************************
  24. * API FUNCTIONS
  25. */
  26. void TEA5767_Write(void);
  27. void TEA5767_Read(void);
  28. void TEA5767_GetPLL(void);
  29. void TEA5767_SetFrequency(uint32 frequency);
  30. uint32 TEA5767_GetFrequency(void);
  31. void TEA5767_Search(uint8 mode);
  32. void TEA5767_AutoSearch(uint8 mode);
  33. void TEA5767_Mute(uint8 mode);

  34. #endif /* _BOARD_TEA5767_H_ */
复制代码

五、API调用
需包含头文件 board_tea5767.h


TEA5767_Write


功能    向TEA5767写入5个字节数据
函数定义    void TEA5767_Write(void)
参数    无
返回    无
TEA5767_Read


功能    读TEA5767状态
函数定义    void TEA5767_Read(void)
参数    无
返回    无
TEA5767_GetPLL


功能    由频率计算PLL
函数定义    void TEA5767_GetPLL(void)
参数    无
返回    无
TEA5767_SetFrequency


功能    设置频率
函数定义    void TEA5767_SetFrequency(uint32 frequency)
参数    frequency:频率,单位:KHz
返回    无
TEA5767_GetFrequency


功能    由PLL计算频率
函数定义    uint32 TEA5767_GetFrequency(void)
参数    无
返回    当前频率
TEA5767_Search


功能    手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD
函数定义    void TEA5767_Search(uint8 mode)
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
返回    无
TEA5767_AutoSearch


功能    自动搜索电台
函数定义    void TEA5767_AutoSearch(uint8 mode)
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
返回    无
TEA5767_Mute


功能    静音
函数定义    void TEA5767_Mute(uint8 mode)
参数    mode:静音方式,mode=1,静音;mode=0,非静音
返回    无


六、使用例子
6.1 手动加减台

±0.1MHz,87.5-108MHz,循环增减

  1. TEA5767_Search(1);  // 加台
  2. TEA5767_Search(0);  // 减台
复制代码


6.2 自动搜台

由于从IC中读回的频率不准,这里采用静态变量g_frequency来记录当前频率,87.5-108MHz,循环增减

  1. TEA5767_AutoSearch(1);  // 向上搜台
  2. TEA5767_AutoSearch(0);  // 向下搜台
复制代码


参考自动搜台流程:


由上面流程可知,决定参数有

rf:1=发现一个电台,0=未找到电台
if:中频计数结果,0x31<IF<0x3E则为符合电台
lev:信号电平ADC输出,可通过写入的5个字节中对应SSLadc的位(查看下面附录),下面SSLadc=7

  1. void TEA5767_AutoSearch(uint8 mode)
  2. {
  3.     uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
  4.     uint8 radioIf = 0;                                                    // 中频计数结果
  5.     uint8 radioLev = 0;                                                    // 信号电平ADC输出
  6.    
  7.     // 直到搜台成功,RF=1,0x31<IF<0x3E
  8.     while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
  9.     {
  10.         if(mode)                                                        // 频率增加搜台
  11.         {
  12.             s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
  13.             g_frequency += 100;
  14.             if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
  15.             {
  16.                 g_frequency = TEA5767_MIN_KHZ;
  17.             }
  18.         }
  19.         else                                                            // 频率减小搜台
  20.         {
  21.             s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0
  22.             g_frequency -= 100;
  23.             if(g_frequency < TEA5767_MIN_KHZ)
  24.             {
  25.                 g_frequency = TEA5767_MAX_KHZ;
  26.             }            
  27.         }
  28.         TEA5767_GetPLL();                                                // 转换为PLL值
  29.         s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1
  30.         s_radioWriteData[1] = s_pll % 256;
  31.         s_radioWriteData[3] = 0x11;
  32.         s_radioWriteData[4] = 0x00;
  33.         TEA5767_Write();                                                // 写入5个字节数据
  34.         TEA5767_Read();                                                    // 读取当前频率值
  35.         radioRf = s_radioReadData[0] & 0x80;
  36.         radioIf = s_radioReadData[2] & 0x7F;
  37.         radioLev = s_radioReadData[3] >> 4;
  38.         printf(" r=%02x\n", radioRf);
  39.         printf(" i=%02x\n", radioIf);
  40.         printf(" l=%d\n", radioLev);
  41.         printf(" f=%d\n", (int)g_frequency);
  42.     }
  43.     TEA5767_GetPLL();                                                   // 转换为PLL值
  44.     s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=0
  45.     s_radioWriteData[1] = s_pll % 256;
  46.     s_radioWriteData[3] = 0x11;
  47.     s_radioWriteData[4] = 0x00;
  48.     TEA5767_Write();                                                    // 写入5个字节数据
  49.     TEA5767_Read();                                                        // 读取当前频率值
  50.     printf(" frequency=%d\n", (int)g_frequency);
  51. }
复制代码

6.3 软件静音

  1. TEA5767_Mute(TEA5767_MUTE_ON);      // 收音机静音
  2. TEA5767_Mute(TEA5767_MUTE_OFF);         // 收音机开启收听
复制代码


七、附录
7.1 写数据

向TEA5767 写入数据时,地址的最低位是0,即写地址是C0。读出数据时地址的最低位是1,即读地址是C1。TEA5767的控制寄存器要写入5个字节,每次写入数据时必须严格按照下列顺序进行:
地址、字节1、字节2、字节3、字节4、字节5。


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


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


表4 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
MUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
表5 数据字节1各位的说明


BIT    SYMBOL    说明
7    MUTE    若MUTE=1 左右声道静音;若 MUTE=0 左右声道非静音
6    SM    搜索模式;若SM=1 搜索模式;若 SM=0 非搜索模式
5 to 0    PLL(13:8)    预置或搜索电台的频率数据高6位
表6 数据字节2的格式


BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
表7 数据字节2各位的说明


BIT    SYMBOL    说明
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位
表8 数据字节3的格式


BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
表9 数据字节3各位的说明


BIT    SYMBOL    说明
7    SUD    若 SUD=1 向上搜索;
若 SUD=0 向下搜索
6 and 5    SSL[1:0]    搜索停止电平:见表10-11
4    HLSI    若 HLSI=1 高端本振注入;
若 HLSI=0 低端本振注入
3    MS    若 MS=1 强制单声道;
若 MS=0 开立体声
2    ML    若 ML=1 左声道静音强制单声道;
若 ML=0 左声道非静音
1    MR    若 MR=1 右声道静音强制单声道;
若 MR=0 右声道非静音
0    SWP1    软件可编程输出口1:若 SWP1=1 SWPOR1为高;
若 SWP1=0 SWPOR1为低
表10 搜索停止电平设定


SSL1    SSL0    搜索停止电平
0    0    不搜索
0    1    低电平 ADC output=5
1    0    中电平ADC output=7
1    1    高电平ADC output=10
表11 数据字节4的格式


BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI
表12 数据字节4各位的说明


BIT    SYMBOL    说明
7    SWP2    软件可编程输出口2:若 SWP2=1 口2为高;
若 SWP2=0口2为低
6    STBY    若 STBY=1 待机模式;
若 STBY=0 非待机模式
5    BL    若 BL=1 日本FM波段;
若 BL=0 美/欧 FM 波段
4    XTAL    若 XTAL=1 fxtal=32.768KHz;
若 XTAL=0 fxtal=13MHz
3    SMUTE    若SMUTE=1 软件静音开;
若 MUTE=0 软件静音关
2    HCC    若 HCC=1高音切割开;
若 HCC=0高音切割关
1    SNC    若 SNC =1立体声噪声消除开;
若 SNC=0立体声噪声消除关
0    SI    若SI=1 引脚SWPORT1 作ready flag输出标志;
若 SI=0 引脚SWOPRT1 作软件可编程输出口
表13 数据字节5的格式


BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLLREF    DTC    -    -    -    -    -    -
表14 数据字节5各位的说明


BIT    SYMBOL    说明
7    PLLREF    若 PLLREF=1 则6.5 MHz 参考频率 PLL可用;
若 PLLREF=0 则6.5 MHz参考频率 PLL不可用
6    DTC    若DTC=1 the 去加重时间常数为75μs;
若 DTC=0 the 去加重时间常数为50μs
5 to 0    -    不用管它


7.2 读数据
和写数据类似,从TEA5767 读出数据时,也要按照“地址、字节1、字节2、字节3、字节4、字节5”这样的顺序读出,读地址是C1。读出的5个字节的含义见表16到表25中的说明。


表15 读模式

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


表16 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
RF    BLF    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8


表17 数据字节1各位的说明

BIT    SYMBOL    说明
7    RF    若RF=1 则发现了一个电台或搜索到头;
若 RF=0 未找到电台
6    BLF    若BLF=1 搜索到头;
若 BLF=0 未搜索到头
5 to 0    PLL[13:8]    搜索或预置的电台频率值的高6位


表18 数据字节2的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0


表19 数据字节2各位的说明

BIT    SYMBOL    说明
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位


表20 数据字节3的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
STEREO    IF6    IF5    IF4    IF3    IF2    IF1    IF0


表21 数据字节3各位的说明

BIT    SYMBOL    说明
7    STEREO    若 STEREO=1 为立体声;
若 STEREO=0 为单声道
6 to 0    IF[6:0]    中频计数结果


表22 数据字节4的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
LEV3    LEV2    LEV1    LEV0    CI3    CI2    CI1    CI0


表23 数据字节4各位的说明

BIT    SYMBOL    说明
7 to 4    LEV[3:0]    信号电平ADC 输出
3 to 1    CI[3:1]    芯片标记; 设置为0
0    -    该位为 0


表24 数据字节5的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
0    0    0    0    0    0    0    0


表25 数据字节5各位的说明

BIT    SYMBOL    说明
7 to 0    -    供以后备用的字节;设置为0


7.3 举例
根据上面的算法,以106.8的天津交通台为例,它的PLL为32d1H,第一个字节的BIT7=0非静音,BIT6=0不搜索,第三个字节的BIT4=0低本振,第四个字节的BIT5=0欧美制式,BIT4=1用32768晶振,其余位的设置无所谓,可任意。各字节值见表27~31。


表27字节1:0x32

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
MUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
0    0    1    1    0    0    1    0
非静音    非搜索    3        2      

      
表28字节2:0xd1

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
1    1    0    1    0    0    0    1
d                1         

   
表29字节3:0xc0

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
1    1    0    0    0    0    0    0
向上搜索    搜索停止中电平        低本振    立体声    非静音        随便


表30字节4:0x17

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI
0    0    0    1    0    1    1    1
任意(不用)    非待机    欧美    32.768    非软件静音    高音切割    除噪声    SWP1=RF


表31字节5:0x00

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLLREF    DTC    -    -    -    -    -    -
0    0    0    0    0    0    0    0
不用6.5M    50μs                        
据此给出的控制字是:0x32,0xd1,0xC0,0x17,0x00,将这个控制字写入TEA5767就可以了。

————————————————
版权声明:Leung_ManWah

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

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版