目录
TEF6686芯片概述
TEF6686是一款由NXP Semiconductors生产的高性能单芯片收音机IC,它集成了AM/FM无线电调谐器和软件定义的无线电信号处理功能。这款芯片是NXP广泛的、经过行业验证的汽车无线电单调谐器产品组合的一部分,提供了出色的无线电性能,具有广泛的功能和最先进的软件算法,同时优化了系统成本
TEF6686芯片的主要特点包括:
1、宽频带收音能力,能够接收FM、AM、SW等多种频段的信号。
2、高灵敏度接收,能够接收较弱或干扰较大的信号。
3、内置数字信号处理器,可实现自动搜索、调谐和声音解码。
4、支持RDS和RBDS等数据广播系统。
5、低功耗设计,适用于便携式设备。
6、多种接口选项,便于与主控芯片或其他设备进行连接
TEF6686芯片具备的主要功能
1、自动搜索功能:能够自动搜索可用的广播频率,并保存在频道列表中。
2、调谐功能:用户可以手动调整频率进行收听,也可以通过命令控制进行频率的微调。
3、频道存储功能:支持多个频道的存储,用户可以通过频道编号进行直接切换。
4、RDS功能:内置的RDS解码器可以解析RDS广播中携带的音频、文本和数据信息。
5、音频处理功能:内置的数字信号处理器可以对音频信号进行解码、均衡、混响等处理,提供高质量的音频输出。
6、数据接口功能:支持与主控芯片或其他设备之间的数据交互,用户可以通过数据接口发送命令、接收状态和数据
7、此外,TEF6686和TEF6688能够通过I²S输出和音频DAC输出提供数字格式的立体声音频。TEF6688还支持数字无线电标准HD Radio和Digital Radio Mondiale (DRM),当与NXP Semiconductors的数字无线电协处理器如SAF356X和SAF360X一起使用时
TEF6686芯片的应用范围
TEF6686的应用范围非常广泛,包括但不限于汽车、便携式设备以及其他需要无线电接收功能的场合。它的高性能和多功能性使其成为许多无线电爱好者和专业开发者的首选。
I2C协议
TEF6686控制参数为16位宽。I²C总线本机单元是字节,多字节值,如16位参数,首先传输MSB字节。
在GPIO_2外部应用下拉电阻时,TEF668X的I²C设备写地址为C8h,设备读地址为C9h。
驱动代码
IIC.c
#include "IIC.h" // Device header
//SCL引脚设置
void IIC_SCLConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开GPIO端口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//SCL
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//SDA引脚设置
void IIC_SDAConfig(GPIOMode_TypeDef GPIO_Mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开GPIO端口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//SCL
GPIO_InitStructure.GPIO_Mode = GPIO_Mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//IIC的初始化
void IIC_Config(void)
{
//1.设置SDA和SCL为输出模式
IIC_SCLConfig();
IIC_SDAConfig(GPIO_Mode_Out_PP);
//2.确保SDA和SCL处于空闲状态
SDA_SET(1);
SCL_SET(1);
Delay_us(5);
}
//IIC的开始信号
void IIC_Start(void)
{
//1.设置SDA引脚为输出模式
IIC_SDAConfig(GPIO_Mode_Out_PP);
//2.确保SDA和SCL处于空闲状态
SDA_SET(1);
SCL_SET(1);
Delay_us(5);
//3.把SDA引脚电平拉低
SDA_SET(0);
Delay_us(5);
//4.把SCL引脚电平拉低,此时准备数据
SCL_SET(0);
//delay_us(5);
}
//IIC的发送字节
void IIC_SendByte(uint8_t Byte)
{
uint8_t i = 0;
//1.设置SDA引脚为输出模式
IIC_SDAConfig(GPIO_Mode_Out_PP);
//2.把SCL引脚电平拉低,此时主机准备数据
SCL_SET(0);
Delay_us(5);
//3.循环发送8bit,遵循MSB高位先出
for(i=0;i<8;i++)
{
//4.判断待发送的字节的最高位
if( Byte & 0x80 )
{
SDA_SET(1);
}
else
SDA_SET(0);
Byte <<= 1;
Delay_us(5);
//5.把SCL电平拉高,此时从机读取bit
SCL_SET(1);
Delay_us(5);
//6.把SCL引脚电平拉低,此时主机准备下一个bit
SCL_SET(0);
Delay_us(5);
}
}
//判断从机是否应答
bool IIC_IsSlaveACK(void)
{
bool ack;
//1.设置SDA引脚为输入模式
IIC_SDAConfig(GPIO_Mode_IPU);
//2.把SCL引脚电平拉低,此时为第9个脉冲的低电平,从机准备bit
SCL_SET(0);
Delay_us(5);
//3.把SCL引脚电平拉高,此时为第9个脉冲的高电平,主机读取状态
SCL_SET(1);
Delay_us(5);
//4.主机读取状态 1 表示未应答 0 表示已应答
if(SDA_READ)
ack = false;
else
ack = true;
//5.把SCL引脚电平拉低
SCL_SET(0);
Delay_us(5);
return ack;
}
//IIC读取字节
uint8_t IIC_ReadByte(void)
{
uint8_t i = 0,data = 0;
//1.设置SDA引脚为输入模式
IIC_SDAConfig(GPIO_Mode_IPU);
//2.把SCL引脚电平拉低,此时从机准备数据
SCL_SET(0);
Delay_us(5);
//3.循环读取8bit,遵循MSB高位先出
for (i = 0; i < 8; ++i)
{
//4.把SCL电平拉高,此时主机读取bit
SCL_SET(1);
Delay_us(5);
//5.主机读取bit
data <<= 1;
data |= SDA_READ;
//delay_us(5);
//6.把SCL引脚电平拉低,此时从机准备下一个bit数据
SCL_SET(0);
Delay_us(5);
}
//7.返回结果
return data;
}
//IIC读取多字节
void IIC_ReadBytes(u8 len, u16* buf)
{
if(len == 1)
{
u16 data = 0;
for(u8 i =0; i < 2;i++)
{
//1.设置SDA引脚为输入模式
IIC_SDAConfig(GPIO_Mode_IPU);
//2.把SCL引脚电平拉低,此时从机准备数据
SCL_SET(0);
Delay_us(5);
//3.循环读取8bit,遵循MSB高位先出
for (u8 j = 0; j < 8; ++j)
{
//4.把SCL电平拉高,此时主机读取bit
SCL_SET(1);
Delay_us(5);
//5.主机读取bit
data <<= 1;
data |= SDA_READ;
//delay_us(5);
//6.把SCL引脚电平拉低,此时从机准备下一个bit数据
SCL_SET(0);
Delay_us(5);
}
if(0 == i )
IIC_MasterACK(0);
else
IIC_MasterACK(1);
}
//7.返回结果
*buf = data;
}
else
{
u16 data = 0;
int cnt = 0;
for(u8 i =0; i < len*2;i++)
{
//1.设置SDA引脚为输入模式
IIC_SDAConfig(GPIO_Mode_IPU);
//2.把SCL引脚电平拉低,此时从机准备数据
SCL_SET(0);
Delay_us(5);
//3.循环读取8bit,遵循MSB高位先出
for (u8 j = 0; j < 8; ++j)
{
//4.把SCL电平拉高,此时主机读取bit
SCL_SET(1);
Delay_us(5);
//5.主机读取bit
data <<= 1;
data |= SDA_READ;
//delay_us(5);
//6.把SCL引脚电平拉低,此时从机准备下一个bit数据
SCL_SET(0);
Delay_us(5);
}
if(len*2 > i+1 )
IIC_MasterACK(0);
else
IIC_MasterACK(1);
cnt++;
//对buf赋值
if(2 == cnt)
{
cnt = 0;
buf[i/2] = data;
data = 0;
}
}
}
}
//ack=1 表示不应答 ack=0 表示要应答
void IIC_MasterACK(uint8_t ack)
{
//1.设置SDA引脚为输出模式
IIC_SDAConfig(GPIO_Mode_Out_PP);
//2.把SCL引脚电平拉低,此时主机准备
SCL_SET(0);
Delay_us(5);
//3.判断ack的状态,从而对SDA操作
if(ack)
SDA_SET(1);
else
SDA_SET(0);
Delay_us(5);
//4.把SCL电平拉高,此时从机读取bit
SCL_SET(1);
Delay_us(5);
//5.把SCL引脚电平拉低
SCL_SET(0);
Delay_us(5);
}
//IIC的停止信号
void IIC_Stop(void)
{
//1.设置SDA引脚为输出模式
IIC_SDAConfig(GPIO_Mode_Out_PP);
//2.设置SDA和SCL均为低电平
SDA_SET(0);
SCL_SET(0);
Delay_us(5);
//3.把SCL电平拉高
SCL_SET(1);
Delay_us(5);
//4.把SDA电平拉高
SDA_SET(1);
Delay_us(5);
}
IIC.h
#ifndef __MYI2C_H
#define __MYI2C_H
#include "stm32f10x.h"
#include "Delay.h"
#include "SysTick.h"
#include <stdbool.h>
#include <stdio.h>
#define SDA_SET(n) (n) ? GPIO_SetBits(GPIOB,GPIO_Pin_7) : GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define SCL_SET(n) (n) ? GPIO_SetBits(GPIOB,GPIO_Pin_6) : GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define SDA_READ GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
//SCL引脚设置
void IIC_SCLConfig(void);
//SDA引脚设置
void IIC_SDAConfig(GPIOMode_TypeDef GPIO_Mode);
//IIC的初始化
void IIC_Config(void);
//IIC的开始信号
void IIC_Start(void);
//IIC的发送字节
void IIC_SendByte(uint8_t Byte);
//判断从机是否应答
bool IIC_IsSlaveACK(void);
//IIC读取字节
uint8_t IIC_ReadByte(void);
//IIC读取多字节
void IIC_ReadBytes(u8 len, u16* buf);
//ack=1 表示不应答 ack=0 表示要应答
void IIC_MasterACK(uint8_t ack);
//IIC的停止信号
void IIC_Stop(void);
#endif
TEF6686.c(设备初始化)
#include "TEF6686.h"
static const uint8_t DSP_INIT_V102[]=
{
0x05, 0x1E, 0x5A, 0x01, 0x5A, 0x5A, // reset device
INIT_FLAG_TIMER, 100, // wait 100ms
0x03, 0x1C, 0x00, 0x00, // Clear Required Initialization Control
0x03, 0x1C, 0x00, 0x74, // Set Required Initialization Control(1)
/* Load Required Initialization Beginning of DSP_INIT bytes */
0x19, 0x1B, 0xF0, 0x00, 0x38, 0x3B, 0xD0, 0x80, 0xF0, 0x00, 0x38, 0x43, 0xD0, 0x80, 0x43, 0xB2, 0x38, 0x46, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xC2, 0xF7,
0x19, 0x1B, 0xF0, 0x00, 0x38, 0x77, 0xD0, 0x80, 0xF0, 0x00, 0x38, 0x7B, 0xDF, 0x80, 0x80, 0xFC, 0x39, 0x0E, 0xD0, 0x80, 0xC2, 0x38, 0x20, 0x11, 0x40, 0xB7,
0x19, 0x1B, 0x9F, 0xA7, 0x39, 0x13, 0xD2, 0x80, 0x9F, 0xA7, 0x39, 0x1D, 0xD2, 0x80, 0xF0, 0x00, 0x39, 0x24, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x27, 0xD0, 0x80,
0x19, 0x1B, 0x90, 0x41, 0x39, 0x49, 0xDD, 0x80, 0xF0, 0x00, 0x3A, 0x25, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x4D, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x27, 0xD0, 0x80,
0x19, 0x1B, 0xC4, 0xA2, 0x02, 0x18, 0x60, 0x04, 0xF0, 0x00, 0x39, 0xBF, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0xE7, 0xD0, 0x80, 0x90, 0x01, 0x39, 0x4F, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x38, 0xF0, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x56, 0xD2, 0x80, 0xF0, 0x00, 0x39, 0x5A, 0xD0, 0x80, 0x43, 0x84, 0x39, 0x64, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x39, 0x67, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x6B, 0xD0, 0x80, 0x78, 0x4D, 0x39, 0x71, 0xD0, 0x80, 0x9E, 0x30, 0x18, 0xF9, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x39, 0x76, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x79, 0xD0, 0x80, 0x30, 0x77, 0x39, 0xDE, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x7C, 0xD0, 0x80,
0x19, 0x1B, 0x32, 0x00, 0x39, 0x7E, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0x80, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0xC7, 0xD0, 0x80, 0xF0, 0x00, 0x39, 0xF5, 0xD0, 0x80,
0x19, 0x1B, 0xA8, 0x01, 0x3A, 0x13, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x32, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x39, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x3B, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x3A, 0x4F, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x52, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x55, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x3A, 0x58, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x3A, 0x5D, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0x1E, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x3A, 0x6B, 0xD0, 0x80, 0x00, 0x43, 0x3A, 0x7A, 0xD9, 0x80, 0xF0, 0x00, 0x3A, 0x84, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0xDA, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x3A, 0xDD, 0xD0, 0x80, 0xF0, 0x00, 0x3A, 0xEE, 0xD0, 0x80, 0x2E, 0x40, 0x3B, 0x8C, 0xD0, 0x80, 0xF0, 0x00, 0x3B, 0x96, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x0E, 0x3F, 0x60, 0x00, 0x50, 0x10, 0x28, 0xD8, 0xD2, 0x80, 0x91, 0x01, 0x01, 0x36, 0x60, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0x18,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0xCC, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0xED, 0xF0, 0x00, 0x70, 0x00, 0xA1, 0xAE, 0xF0, 0x00, 0x70, 0x00, 0xA2, 0x02,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xA2, 0x2D, 0xF0, 0x00, 0x70, 0x00, 0xA2, 0x45, 0xF0, 0x00, 0x20, 0x31, 0xD0, 0x80, 0xF0, 0x00, 0x04, 0xC1, 0x60, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x01, 0x01, 0xD2, 0x80, 0xF0, 0x00, 0x00, 0x30, 0xD0, 0x80, 0x00, 0x7F, 0x60, 0x02, 0xE2, 0x00, 0xF0, 0x00, 0x0E, 0x22, 0x60, 0x0A,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0xFF, 0x60, 0x03, 0xF0, 0x00, 0x01, 0x42, 0xD2, 0x80, 0x90, 0x03, 0x40, 0x02, 0xF0, 0x00, 0x90, 0x43, 0x01, 0x70, 0xD1, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x01, 0x69, 0xD0, 0x80, 0x0E, 0x69, 0x60, 0x0A, 0xA3, 0x4C, 0x20, 0x23, 0x00, 0x01, 0x60, 0x01, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xC4, 0xCB, 0x70, 0x00, 0xF0, 0x00, 0xCA, 0x09, 0x30, 0x23, 0xF0, 0x00, 0xC2, 0xCB, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x23, 0xD0, 0x08,
0x19, 0x1B, 0x82, 0x00, 0x0D, 0x50, 0x60, 0x08, 0xF0, 0x00, 0x0D, 0x51, 0x60, 0x09, 0x30, 0x00, 0x21, 0x80, 0x60, 0x01, 0xF0, 0x00, 0x40, 0x32, 0xF0, 0x00,
0x19, 0x1B, 0x30, 0x11, 0x45, 0xF3, 0xF0, 0x00, 0x30, 0x92, 0x2D, 0x30, 0x60, 0x04, 0x31, 0x13, 0x2D, 0x40, 0x60, 0x05, 0x31, 0x94, 0x7F, 0xFF, 0x60, 0x06,
0x19, 0x1B, 0x32, 0x15, 0x0D, 0x61, 0x60, 0x0A, 0x32, 0x96, 0x0D, 0x6B, 0x60, 0x0B, 0x33, 0x10, 0x0D, 0x50, 0x60, 0x01, 0x33, 0x90, 0x0D, 0x5C, 0x60, 0x02,
0x19, 0x1B, 0x30, 0x21, 0x0D, 0x63, 0x60, 0x03, 0x30, 0x31, 0x0D, 0x75, 0x60, 0x0C, 0x30, 0xA2, 0x8D, 0x00, 0x60, 0x01, 0x30, 0xB3, 0x01, 0x73, 0x60, 0x02,
0x19, 0x1B, 0x30, 0x41, 0x00, 0x25, 0x60, 0x03, 0x30, 0xC2, 0x40, 0x44, 0xF0, 0x00, 0x31, 0x43, 0x40, 0x35, 0xF0, 0x00, 0x31, 0xC4, 0x64, 0x00, 0x60, 0x06,
0x19, 0x1B, 0x32, 0x45, 0x1F, 0x40, 0x60, 0x07, 0x32, 0xC6, 0x70, 0x00, 0xF0, 0x00, 0x33, 0x47, 0x1E, 0xBC, 0x60, 0x0D, 0x33, 0xC0, 0x01, 0x22, 0x60, 0x01,
0x19, 0x1B, 0x34, 0x40, 0xFD, 0xEE, 0x60, 0x02, 0x30, 0x51, 0x7B, 0x8F, 0x60, 0x03, 0x30, 0xD2, 0xC4, 0x29, 0x60, 0x04, 0x31, 0x51, 0x1E, 0xC2, 0x60, 0x0E,
0x19, 0x1B, 0x32, 0x53, 0xFF, 0x0D, 0x60, 0x02, 0x32, 0xD4, 0x7D, 0x2E, 0x60, 0x03, 0x30, 0x61, 0xC1, 0x9A, 0x60, 0x04, 0x30, 0xE2, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x31, 0x61, 0x70, 0x00, 0xF0, 0x00, 0x32, 0x63, 0x05, 0x2C, 0x60, 0x08, 0x32, 0xE4, 0x40, 0x00, 0x83, 0x22, 0xF0, 0x00, 0x03, 0x70, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0x08, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0x4D, 0xF0, 0x00, 0x02, 0x15, 0xD0, 0x80, 0x40, 0x15, 0x20, 0x53, 0xA3, 0x1E,
0x19, 0x1B, 0xA0, 0xE8, 0x58, 0x06, 0xA3, 0x1D, 0xA0, 0x72, 0x20, 0x64, 0xF0, 0x00, 0xA8, 0x61, 0x70, 0x00, 0xF0, 0x00, 0xA1, 0x28, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xA0, 0xB2, 0x02, 0xBB, 0xD0, 0x80, 0xF0, 0x00, 0x0D, 0x51, 0x60, 0x0F, 0xF0, 0x00, 0x05, 0x17, 0x60, 0x0E, 0x23, 0xF6, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x21, 0x63, 0x41, 0xF5, 0x91, 0x8F, 0x21, 0xF8, 0x40, 0x74, 0xC3, 0xEF, 0x21, 0xE0, 0xF0, 0x00, 0xC3, 0xA4, 0x33, 0xF7, 0xF0, 0x00,
0x19, 0x1B, 0xD8, 0x5B, 0x70, 0x00, 0xF0, 0x00, 0x82, 0x18, 0x70, 0x00, 0xF0, 0x00, 0x9F, 0xAF, 0x18, 0x00, 0xF0, 0x00, 0x9F, 0x0F, 0x31, 0xF8, 0x90, 0x02,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x90, 0x28, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x22, 0x78, 0xF0, 0x00, 0x16, 0xD3, 0x60, 0x09, 0xA0, 0x6D,
0x19, 0x1B, 0x35, 0xF0, 0x1E, 0xBC, 0x60, 0x0D, 0xF0, 0x00, 0x0D, 0x61, 0x60, 0x08, 0xF0, 0x00, 0x03, 0xA5, 0xD2, 0x80, 0xF0, 0x00, 0x1E, 0xC2, 0x60, 0x0D,
0x19, 0x1B, 0xF0, 0x00, 0x0D, 0x6B, 0x60, 0x08, 0xF0, 0x00, 0x03, 0xA5, 0xD2, 0x80, 0xF0, 0x00, 0x21, 0x00, 0xF0, 0x00, 0x83, 0x6D, 0x22, 0xF1, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x23, 0x77, 0xF0, 0x00, 0x90, 0x41, 0x36, 0x70, 0xF0, 0x00, 0x9E, 0x79, 0x70, 0x00, 0x90, 0x01, 0xF0, 0x00, 0x32, 0xF1, 0xD0, 0x08,
0x19, 0x1B, 0x91, 0xC7, 0x33, 0x75, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0x70, 0xE6, 0x00, 0xF0, 0x00, 0x34, 0xF0, 0xE6, 0x00, 0xF0, 0x00, 0x24, 0x74, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x24, 0xF3, 0xF0, 0x00, 0x8C, 0x24, 0x26, 0xF2, 0x40, 0x16, 0x8A, 0x1B, 0x34, 0x74, 0x4F, 0xF5, 0x82, 0xB7, 0x34, 0xF3, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x20, 0x71, 0x90, 0x05, 0x83, 0x04, 0x70, 0x00, 0xF0, 0x00, 0x8E, 0x67, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x90, 0x02,
0x19, 0x1B, 0xF0, 0x00, 0x36, 0xF6, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0xF0, 0x80, 0x06, 0x82, 0xAF, 0x70, 0x00, 0xF0, 0x00, 0x82, 0x1B, 0x70, 0x00, 0xD0, 0x09,
0x19, 0x1B, 0x8E, 0x5F, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x09, 0xF0, 0x00, 0x36, 0xF5, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0x70, 0xF0, 0x00,
0x19, 0x1B, 0x40, 0x11, 0x27, 0x72, 0xA2, 0xE9, 0x90, 0x8A, 0x20, 0xF3, 0xA2, 0xE8, 0x8E, 0xD7, 0x37, 0x72, 0xF0, 0x00, 0xF0, 0x00, 0x37, 0xF1, 0xE6, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x22, 0x7A, 0xF0, 0x00, 0x16, 0xC3, 0x60, 0x09, 0xA0, 0x46, 0xF0, 0x00, 0x18, 0x20, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x35, 0x70, 0xF0, 0x00, 0xF0, 0x00, 0x32, 0x7A, 0xD0, 0x08, 0x0D, 0x51, 0x60, 0x08, 0xA2, 0xDF, 0x82, 0x00, 0x21, 0x06, 0x40, 0x03,
0x19, 0x1B, 0x33, 0x80, 0x0D, 0x63, 0x60, 0x09, 0x37, 0x00, 0x0D, 0x6D, 0x60, 0x0A, 0x37, 0x80, 0x0D, 0x30, 0x60, 0x0B, 0x36, 0x83, 0x0D, 0x40, 0x60, 0x0C,
0x19, 0x1B, 0x35, 0x80, 0x70, 0x00, 0xC8, 0x88, 0xF0, 0x00, 0x10, 0x10, 0xF0, 0x00, 0xF0, 0x00, 0x10, 0x20, 0xF0, 0x00, 0x32, 0x86, 0x40, 0x15, 0xC8, 0x90,
0x19, 0x1B, 0xF0, 0x00, 0x10, 0x30, 0xF0, 0x00, 0xF0, 0x00, 0x10, 0x40, 0xF0, 0x00, 0xF0, 0x00, 0x33, 0x05, 0xD0, 0x08, 0xF0, 0x00, 0x0D, 0x75, 0x60, 0x0F,
0x19, 0x1B, 0xF0, 0x00, 0x05, 0x63, 0x60, 0x0E, 0x24, 0xF7, 0x05, 0x1D, 0x60, 0x0D, 0x25, 0x76, 0x70, 0x00, 0xF0, 0x00, 0x91, 0xC7, 0x20, 0xE8, 0x40, 0x15,
0x19, 0x1B, 0x91, 0x8F, 0x21, 0xE9, 0xD4, 0x09, 0xC3, 0xEF, 0x20, 0x00, 0x40, 0x12, 0x9F, 0xBE, 0x20, 0x11, 0x58, 0x03, 0xA0, 0x80, 0x35, 0x77, 0x90, 0x01,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x21, 0xF5, 0xF0, 0x00, 0xA0, 0xCA, 0x22, 0x54, 0xF0, 0x00, 0xCC, 0x09, 0x05, 0x17, 0x60, 0x0C,
0x19, 0x1B, 0x83, 0x2C, 0x70, 0x00, 0xF0, 0x00, 0x8A, 0x61, 0x70, 0x00, 0xF0, 0x00, 0xAE, 0x48, 0x22, 0x45, 0xA2, 0xC3, 0xA2, 0x28, 0x20, 0x78, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x35, 0xF0, 0xF0, 0x00, 0xF0, 0x00, 0x18, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x78, 0xF0, 0x00, 0x16, 0xE3, 0x60, 0x09, 0xA0, 0x27,
0x19, 0x1B, 0x89, 0x01, 0x23, 0xF4, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0xF2, 0xF0, 0x00, 0x82, 0x61, 0x21, 0x73, 0xF0, 0x00, 0xA0, 0x50, 0x36, 0x70, 0xF0, 0x00,
0x19, 0x1B, 0xA0, 0x58, 0x23, 0x72, 0xE1, 0x40, 0xA8, 0x01, 0x22, 0xF3, 0xF0, 0x00, 0x90, 0x49, 0x22, 0x75, 0xE0, 0x40, 0x80, 0x61, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x8A, 0x51, 0x33, 0xF1, 0xF0, 0x00, 0xA0, 0x58, 0x70, 0x00, 0xF0, 0x00, 0xAF, 0x48, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0x70, 0xD0, 0x08,
0x19, 0x1B, 0x82, 0x00, 0x0D, 0x75, 0x60, 0x08, 0x90, 0x09, 0x0D, 0x00, 0x60, 0x09, 0xF0, 0x00, 0x35, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x33, 0x80, 0xC0, 0x28,
0x19, 0x1B, 0xF0, 0x00, 0x10, 0x10, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0x81, 0xD0, 0x08, 0x82, 0x49, 0x0D, 0x75, 0x60, 0x08, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xFD,
0x19, 0x1B, 0x04, 0x00, 0x60, 0x00, 0xA2, 0xA9, 0x8E, 0xC0, 0x40, 0x00, 0x60, 0x05, 0x60, 0x00, 0x60, 0x05, 0xE6, 0x00, 0xC8, 0x1B, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xD8, 0xDB, 0x0D, 0x51, 0x60, 0x08, 0x83, 0x5B, 0x70, 0x00, 0xF0, 0x00, 0x9E, 0xBA, 0x30, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x84, 0xD4, 0x09,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xC1, 0xF0, 0x00, 0x0D, 0x75, 0x60, 0x08, 0xF0, 0x00, 0x0D, 0x51, 0x60, 0x09, 0xF0, 0x00, 0x24, 0x03, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x27, 0x94, 0xD0, 0x08, 0xA0, 0x03, 0x70, 0x00, 0xF0, 0x00, 0x00, 0x11, 0x08, 0x00, 0xF0, 0x00, 0x00, 0x11, 0x08, 0x00, 0xC0, 0x0E,
0x19, 0x1B, 0xA0, 0x09, 0x00, 0x11, 0x08, 0x00, 0xA0, 0x09, 0x70, 0x00, 0xF0, 0x00, 0xA4, 0x08, 0x70, 0x00, 0xD0, 0x08, 0xA0, 0x03, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x00, 0x11, 0x08, 0x00, 0xF0, 0x00, 0x00, 0x11, 0x08, 0x00, 0xC0, 0x26, 0xA0, 0x09, 0x00, 0x11, 0x08, 0x00, 0xA0, 0x09, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xA4, 0x08, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x1D, 0x01, 0x60, 0x08, 0xF0, 0x00, 0x0A, 0x2C, 0x60, 0x00, 0xF0, 0x00, 0x01, 0x1A, 0x60, 0x01,
0x19, 0x1B, 0x31, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x31, 0x81, 0x70, 0x00, 0xD0, 0x08, 0xA8, 0x01, 0x7F, 0xFF, 0x60, 0x06, 0xCC, 0x0A, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x8E, 0xA1, 0x31, 0x06, 0xF0, 0x00, 0xF0, 0x00, 0x32, 0x06, 0xD4, 0x09, 0xAE, 0xE8, 0x04, 0xDF, 0xD0, 0x80, 0x90, 0x87, 0x70, 0x00, 0x98, 0x07,
0x19, 0x1B, 0xF0, 0x00, 0x0F, 0xB1, 0xD2, 0x80, 0x9E, 0x08, 0x41, 0x89, 0x60, 0x06, 0x14, 0x92, 0x60, 0x00, 0x90, 0x04, 0xA1, 0x98, 0x1D, 0x01, 0x60, 0x08,
0x19, 0x1B, 0xAA, 0x56, 0x70, 0x00, 0xF0, 0x00, 0xA2, 0x20, 0x32, 0x06, 0xF0, 0x00, 0xF0, 0x00, 0x32, 0x80, 0xF0, 0x00, 0x91, 0xC2, 0x06, 0x9A, 0x60, 0x08,
0x19, 0x1B, 0x41, 0xE6, 0x06, 0x00, 0xD0, 0x80, 0x82, 0x13, 0x70, 0x00, 0xD8, 0x09, 0xF0, 0x00, 0x0F, 0xB1, 0xD2, 0x80, 0x9E, 0x08, 0x10, 0x62, 0x60, 0x01,
0x19, 0x1B, 0x05, 0x1F, 0x60, 0x05, 0xD0, 0x09, 0xF0, 0x00, 0x06, 0xE6, 0x60, 0x08, 0xA3, 0x65, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x85, 0xD0, 0x08,
0x19, 0x1B, 0x10, 0x00, 0x60, 0x03, 0xA2, 0x75, 0x30, 0x23, 0x07, 0x73, 0xD2, 0x80, 0xF0, 0x00, 0x07, 0xC6, 0xD0, 0x80, 0x08, 0x00, 0x60, 0x03, 0xA0, 0x02,
0x19, 0x1B, 0x0E, 0x6F, 0x60, 0x09, 0xF0, 0x00, 0x02, 0x00, 0x60, 0x03, 0x80, 0x00, 0xF0, 0x00, 0x07, 0x73, 0xD0, 0x80, 0x40, 0xE0, 0x00, 0x1F, 0x60, 0x01,
0x19, 0x1B, 0x13, 0xD5, 0x60, 0x07, 0xA0, 0x11, 0x90, 0x40, 0x70, 0x00, 0xF0, 0x00, 0x13, 0xFB, 0x60, 0x06, 0xA0, 0x0E, 0x14, 0x05, 0x60, 0x06, 0xA0, 0x0D,
0x19, 0x1B, 0x14, 0x0F, 0x60, 0x06, 0xA0, 0x0C, 0x45, 0x60, 0x00, 0x3A, 0x60, 0x01, 0x13, 0xB6, 0x60, 0x07, 0xA0, 0x0B, 0x90, 0x40, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x13, 0xF7, 0x60, 0x06, 0xA0, 0x08, 0x14, 0x01, 0x60, 0x06, 0xA0, 0x07, 0x14, 0x0B, 0x60, 0x06, 0xA0, 0x06, 0x41, 0x80, 0x00, 0x3B, 0x60, 0x01,
0x19, 0x1B, 0x13, 0xB6, 0x60, 0x07, 0xA0, 0x05, 0x90, 0x40, 0x70, 0x00, 0xF0, 0x00, 0x13, 0xF7, 0x60, 0x06, 0xA0, 0x02, 0x14, 0x01, 0x60, 0x06, 0xA0, 0x01,
0x19, 0x1B, 0x14, 0x0B, 0x60, 0x06, 0x80, 0x00, 0xF0, 0x00, 0x0D, 0x28, 0xD0, 0x80, 0xD7, 0xCA, 0x00, 0xFF, 0x60, 0x04, 0x81, 0xD7, 0x0C, 0xF7, 0x60, 0x09,
0x19, 0x1B, 0xD0, 0x56, 0x70, 0x00, 0xF0, 0x00, 0x82, 0x76, 0x30, 0x17, 0xF0, 0x00, 0xD0, 0xF6, 0x40, 0x83, 0xF0, 0x00, 0xC1, 0xA4, 0x20, 0x19, 0xF0, 0x00,
0x19, 0x1B, 0x82, 0xF6, 0x70, 0x00, 0xF0, 0x00, 0xC1, 0x80, 0x20, 0x17, 0xA2, 0x54, 0xC3, 0xE7, 0x70, 0x00, 0xF0, 0x00, 0xC5, 0xC7, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x30, 0x17, 0xD0, 0x08, 0x9A, 0x78, 0x70, 0x00, 0xF0, 0x00, 0x9A, 0x70, 0x70, 0x00, 0x90, 0xE3, 0xF0, 0x00, 0x70, 0x00, 0x90, 0xE3,
0x19, 0x1B, 0xF0, 0x00, 0x0D, 0x67, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xA1, 0x19, 0xF0, 0x00, 0x70, 0x00, 0x80, 0xD2, 0x1E, 0xC8, 0x60, 0x08, 0xA2, 0x4A,
0x19, 0x1B, 0xF0, 0x00, 0x20, 0x00, 0xA2, 0x49, 0x90, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xD4, 0x09, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xA5,
0x19, 0x1B, 0x1E, 0xC8, 0x60, 0x08, 0xA2, 0x45, 0xF0, 0x00, 0x30, 0x00, 0xD0, 0x08, 0x00, 0x28, 0x60, 0x00, 0xA2, 0x43, 0x9E, 0x38, 0x0E, 0xF4, 0x60, 0x09,
0x19, 0x1B, 0x9E, 0x38, 0x70, 0x00, 0x9F, 0xFF, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0x40, 0x40, 0x0C, 0x8A, 0xD5, 0x80, 0xF0, 0x00, 0x0C, 0x8B, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x0F, 0xB1, 0xD2, 0x80, 0x9C, 0x39, 0x70, 0x00, 0xF0, 0x00, 0x9C, 0x31, 0x70, 0x00, 0x90, 0x03, 0xF0, 0x00, 0x70, 0x00, 0x90, 0x02,
0x19, 0x1B, 0x40, 0x10, 0x70, 0x00, 0xAF, 0xF3, 0x41, 0xF1, 0x40, 0x40, 0x80, 0x0D, 0x40, 0x00, 0x70, 0x00, 0xAF, 0xF1, 0x41, 0xF1, 0x40, 0x40, 0x80, 0x0C,
0x19, 0x1B, 0x03, 0xE8, 0x60, 0x02, 0xA2, 0x35, 0x90, 0x83, 0x10, 0x44, 0xD1, 0x80, 0xF0, 0x00, 0x10, 0x42, 0xD0, 0x80, 0x40, 0x71, 0x40, 0x20, 0xA0, 0x08,
0x19, 0x1B, 0x43, 0xA1, 0x40, 0x30, 0xA0, 0x07, 0x43, 0xB1, 0x40, 0x30, 0xA0, 0x06, 0xF0, 0x00, 0x10, 0x75, 0xD0, 0x80, 0x40, 0x71, 0x40, 0x20, 0xA0, 0x04,
0x19, 0x1B, 0x43, 0xA1, 0x40, 0x30, 0xA0, 0x02, 0x43, 0xB1, 0x40, 0x30, 0xA0, 0x01, 0xF0, 0x00, 0x10, 0x81, 0xD0, 0x80, 0xF0, 0x00, 0x0C, 0x92, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x0C, 0x94, 0xD0, 0x80, 0xA0, 0x10, 0x70, 0x00, 0x31, 0x7C, 0xA6, 0x50, 0x7C, 0x4D, 0x20, 0x83, 0x80, 0x09, 0x21, 0xF8, 0xF0, 0x00,
0x19, 0x1B, 0xA0, 0xD0, 0x70, 0x00, 0x18, 0x41, 0xA6, 0x53, 0x15, 0x36, 0xD0, 0x80, 0xF0, 0x00, 0x0B, 0xC9, 0x60, 0x08, 0xF0, 0x00, 0x1D, 0x8D, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x16, 0xD5, 0xD0, 0x80, 0xF0, 0x00, 0x0B, 0xC9, 0x60, 0x08, 0xF0, 0x00, 0x1D, 0x8F, 0xD2, 0x80, 0xF0, 0x00, 0x16, 0xDA, 0xD0, 0x80,
0x19, 0x1B, 0x3E, 0x91, 0x1F, 0x5F, 0xD2, 0x80, 0xF0, 0x00, 0x23, 0x8A, 0xD0, 0x80, 0x0D, 0x85, 0x60, 0x08, 0xA2, 0x1B, 0xF0, 0x00, 0x30, 0x00, 0xD0, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x0F, 0x88, 0x60, 0x0B, 0xF0, 0x00, 0x02, 0x30, 0x60, 0x03, 0xF0, 0x00, 0x09, 0x38, 0x60, 0x04, 0x9F, 0x98, 0x01, 0x2C, 0x60, 0x05,
0x19, 0x1B, 0xF0, 0x00, 0x2E, 0xB3, 0xEE, 0x00, 0xF0, 0x00, 0x0F, 0xB1, 0xD2, 0x80, 0x9E, 0x09, 0x0D, 0x87, 0x60, 0x0C, 0x9F, 0x90, 0x70, 0x00, 0x90, 0x02,
0x19, 0x1B, 0x9F, 0x88, 0x2F, 0x34, 0xEE, 0x00, 0xF0, 0x00, 0x2F, 0xB5, 0xEE, 0x00, 0x30, 0x43, 0x0B, 0x42, 0x60, 0x08, 0xF0, 0x00, 0x30, 0xC4, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x31, 0x45, 0xF0, 0x00, 0xF0, 0x00, 0x2C, 0xB1, 0x40, 0x17, 0xF0, 0x00, 0x2D, 0x32, 0xF0, 0x00, 0xC6, 0x79, 0x22, 0x05, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x3D, 0x81, 0xF0, 0x00, 0xF0, 0x00, 0x3D, 0x01, 0xF0, 0x00, 0xDD, 0x6D, 0x1B, 0x93, 0xD2, 0x80, 0x90, 0x46, 0x0D, 0x85, 0x60, 0x0A,
0x19, 0x1B, 0x20, 0x42, 0x1B, 0x93, 0xD2, 0x80, 0xDA, 0xC9, 0x20, 0x25, 0xA2, 0x04, 0x8C, 0x69, 0x2D, 0xB3, 0xF0, 0x00, 0xDD, 0x49, 0x32, 0x01, 0xF0, 0x00,
0x19, 0x1B, 0x8D, 0x89, 0x70, 0x00, 0xF0, 0x00, 0x3C, 0x81, 0xFE, 0x35, 0x60, 0x00, 0x35, 0x81, 0x00, 0x16, 0x60, 0x01, 0xA0, 0x18, 0x21, 0x46, 0xF0, 0x00,
0x19, 0x1B, 0xAA, 0x07, 0x01, 0x2D, 0x60, 0x00, 0x81, 0xCF, 0x70, 0x00, 0xF0, 0x00, 0x8F, 0x80, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x94, 0x02,
0x19, 0x1B, 0x40, 0x45, 0x57, 0x4B, 0x60, 0x00, 0xE0, 0x00, 0x60, 0x01, 0x80, 0x02, 0x40, 0x65, 0x40, 0x00, 0x60, 0x00, 0xC6, 0x66, 0x60, 0x01, 0x80, 0x00,
0x19, 0x1B, 0xA0, 0x30, 0x40, 0x00, 0x60, 0x04, 0xAF, 0x4E, 0x00, 0xA4, 0x60, 0x05, 0x81, 0x8E, 0x0B, 0x75, 0x60, 0x08, 0xF0, 0x00, 0x14, 0x74, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x1B, 0x90, 0xD2, 0x80, 0x2E, 0x34, 0x04, 0x00, 0x60, 0x06, 0x20, 0xC2, 0x1B, 0x93, 0xD2, 0x80, 0xD2, 0xC9, 0x03, 0xE9, 0x60, 0x05,
0x19, 0x1B, 0x81, 0x8E, 0x0B, 0x59, 0x60, 0x08, 0x8F, 0x2D, 0x31, 0xC6, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x94, 0x02, 0x40, 0x45, 0xB1, 0x5C, 0x60, 0x03,
0x19, 0x1B, 0x46, 0x66, 0x60, 0x07, 0x80, 0x02, 0x40, 0x65, 0xAA, 0xCE, 0x60, 0x03, 0xC6, 0x66, 0x60, 0x07, 0x80, 0x00, 0xA0, 0xE0, 0x00, 0x38, 0x60, 0x04,
0x19, 0x1B, 0xAF, 0x48, 0x00, 0x1D, 0x60, 0x05, 0x81, 0xC7, 0x31, 0x84, 0xF0, 0x00, 0x31, 0x05, 0x14, 0x74, 0xD2, 0x80, 0xF0, 0x00, 0x1B, 0x90, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0xD8, 0x00, 0x60, 0x00, 0xF0, 0x00, 0x0B, 0x67, 0x60, 0x08, 0x21, 0xC6, 0x20, 0x00, 0x60, 0x04, 0xF0, 0x00, 0x13, 0x33, 0x60, 0x05,
0x19, 0x1B, 0x81, 0x86, 0x31, 0x84, 0x40, 0x07, 0x31, 0x05, 0x14, 0x74, 0xD2, 0x80, 0xF0, 0x00, 0x1B, 0x90, 0xD0, 0x80, 0xF0, 0x00, 0x6E, 0x6C, 0x60, 0x03,
0x19, 0x1B, 0x40, 0x07, 0x00, 0xE5, 0x60, 0x05, 0xA0, 0x58, 0xFF, 0xFF, 0x60, 0x03, 0xAA, 0x24, 0x0B, 0x52, 0x60, 0x08, 0x81, 0x1C, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x31, 0x05, 0x7F, 0xDF, 0x60, 0x06, 0x31, 0x84, 0x14, 0x74, 0xD2, 0x80, 0xF0, 0x00, 0x1B, 0x90, 0xD0, 0x80, 0x91, 0x83, 0x2E, 0x85, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x2F, 0x06, 0xF0, 0x00, 0xF0, 0x00, 0x2F, 0x87, 0xF0, 0x00, 0x0B, 0xC9, 0x60, 0x09, 0xA1, 0xCF, 0x3E, 0x11, 0x0D, 0x82, 0x60, 0x0A,
0x19, 0x1B, 0xF0, 0x00, 0x27, 0x11, 0xA1, 0xCD, 0xA0, 0x50, 0x27, 0x92, 0xF0, 0x00, 0xAA, 0x41, 0x0B, 0xB4, 0x60, 0x0C, 0x80, 0x52, 0x20, 0x21, 0xA1, 0xCA,
0x19, 0x1B, 0x9E, 0xCB, 0x35, 0x92, 0xF0, 0x00, 0x90, 0x41, 0x70, 0x00, 0xD8, 0x09, 0x88, 0x2D, 0x70, 0x00, 0xD4, 0x09, 0xF0, 0x00, 0x36, 0x15, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x36, 0x95, 0xF0, 0x00, 0x91, 0x00, 0x30, 0xA6, 0xF0, 0x00, 0x31, 0x27, 0x14, 0x62, 0xD2, 0x80, 0x90, 0x04, 0x31, 0xC0, 0xF0, 0x00,
0x19, 0x1B, 0x21, 0x45, 0x8C, 0xCD, 0x60, 0x06, 0xF0, 0x00, 0xFF, 0x55, 0x60, 0x07, 0xF0, 0x00, 0x14, 0x74, 0xD2, 0x80, 0xF0, 0x00, 0x32, 0x40, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x32, 0xC1, 0xF0, 0x00, 0xF0, 0x00, 0x33, 0x42, 0x80, 0x00, 0xF0, 0x00, 0x0D, 0x82, 0x60, 0x09, 0xF0, 0x00, 0x0B, 0xC9, 0x60, 0x0A,
0x19, 0x1B, 0xF0, 0x00, 0x20, 0x15, 0xA1, 0xB9, 0x91, 0x45, 0x7F, 0xEC, 0x60, 0x06, 0x40, 0x47, 0x70, 0x00, 0xD4, 0x09, 0x20, 0x90, 0x14, 0x47, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x34, 0xA0, 0xF0, 0x00, 0x21, 0x10, 0x14, 0x47, 0xD2, 0x80, 0xF0, 0x00, 0x35, 0x20, 0xD0, 0x08, 0x0A, 0x3D, 0x60, 0x07, 0xA1, 0xB2,
0x19, 0x1B, 0xA2, 0x79, 0x0B, 0xC9, 0x60, 0x09, 0xA2, 0xBA, 0x70, 0x00, 0xF0, 0x00, 0x90, 0xC0, 0x3B, 0x91, 0xF0, 0x00, 0x3B, 0x12, 0x14, 0x62, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x3C, 0x10, 0xD0, 0x08, 0xF0, 0x00, 0x0B, 0x60, 0x60, 0x0E, 0xF0, 0x00, 0x00, 0x04, 0x60, 0x03, 0x40, 0xA7, 0x3F, 0xFC, 0x60, 0x04,
0x19, 0x1B, 0x32, 0x63, 0x80, 0x08, 0x60, 0x05, 0x32, 0xE4, 0x19, 0x9A, 0x60, 0x06, 0x33, 0x65, 0x0D, 0x86, 0x60, 0x0F, 0x31, 0xE6, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x30, 0x77, 0x70, 0x00, 0xD0, 0x08, 0x0D, 0x82, 0x60, 0x0A, 0xA1, 0xA4, 0xF0, 0x00, 0x30, 0x20, 0xF0, 0x00, 0x00, 0xD2, 0x60, 0x01, 0x94, 0x0B,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0xD2, 0x60, 0x02, 0x00, 0xFA, 0x60, 0x03, 0xAF, 0xED, 0xF0, 0x00, 0xBE, 0x77, 0x60, 0x06, 0xF0, 0x00, 0x4B, 0x00, 0x60, 0x07,
0x19, 0x1B, 0x37, 0x06, 0x00, 0x01, 0x60, 0x01, 0x37, 0x87, 0x03, 0xE8, 0x60, 0x02, 0xF0, 0x00, 0x03, 0x84, 0x60, 0x04, 0xF0, 0x00, 0x00, 0x01, 0x60, 0x05,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0x8C, 0x60, 0x06, 0xF0, 0x00, 0x0A, 0xF0, 0x60, 0x07, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xC7, 0xF0, 0x00, 0x0B, 0xB4, 0x60, 0x09,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0x11, 0x60, 0x05, 0xF0, 0x00, 0x00, 0x11, 0x60, 0x06, 0x3B, 0x05, 0x10, 0x00, 0x60, 0x07, 0x3B, 0x86, 0x00, 0x04, 0x60, 0x00,
0x19, 0x1B, 0x3C, 0x07, 0xAD, 0x84, 0x60, 0x01, 0x32, 0x10, 0x01, 0xFD, 0x60, 0x02, 0x32, 0x91, 0x0B, 0x5E, 0x60, 0x03, 0x33, 0x12, 0x0C, 0x80, 0x60, 0x04,
0x19, 0x1B, 0x31, 0x93, 0x00, 0xA0, 0x60, 0x05, 0x34, 0x84, 0xFF, 0xD0, 0x60, 0x06, 0x35, 0x05, 0xE3, 0x54, 0x60, 0x07, 0x36, 0x06, 0x34, 0x00, 0x60, 0x00,
0x19, 0x1B, 0x36, 0x86, 0x00, 0x01, 0x60, 0x01, 0x37, 0x07, 0x03, 0xE8, 0x60, 0x02, 0x37, 0x80, 0x70, 0x00, 0x8F, 0xB7, 0x80, 0xE5, 0x7F, 0xFF, 0x60, 0x00,
0x19, 0x1B, 0xCC, 0x0A, 0x70, 0x00, 0xF0, 0x00, 0x8E, 0xA9, 0x33, 0x70, 0xF0, 0x00, 0xAF, 0x20, 0x34, 0x70, 0xD4, 0x09, 0xAE, 0xE8, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xA8, 0x05, 0x00, 0x80, 0x60, 0x07, 0xA8, 0xF6, 0x33, 0x75, 0xF0, 0x00, 0xC3, 0x86, 0x70, 0x00, 0xF0, 0x00, 0x8F, 0x7F, 0x33, 0xF6, 0xF0, 0x00,
0x19, 0x1B, 0xA8, 0x85, 0x1D, 0xE4, 0xD1, 0x80, 0xF0, 0x00, 0x34, 0x75, 0xD0, 0x08, 0x0D, 0x86, 0x60, 0x09, 0xA1, 0x7B, 0x20, 0x12, 0x1F, 0x32, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x35, 0x82, 0xD0, 0x08, 0x90, 0x82, 0x0D, 0x86, 0x60, 0x09, 0x40, 0xA7, 0x40, 0x77, 0xE6, 0x40, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x30, 0x17, 0xD0, 0x08, 0x0B, 0xB4, 0x60, 0x08, 0xA1, 0x74, 0xF0, 0x00, 0x31, 0x82, 0xD0, 0x08, 0xF0, 0x00, 0x09, 0x61, 0x60, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x09, 0xC9, 0x60, 0x09, 0xF0, 0x00, 0x21, 0x80, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0x91, 0xA1, 0x6F, 0xA2, 0x08, 0x70, 0x00, 0xD0, 0x08,
0x19, 0x1B, 0x00, 0xCF, 0x60, 0x02, 0xA0, 0x01, 0x01, 0x51, 0x60, 0x02, 0x80, 0x01, 0x0D, 0x8B, 0x60, 0x08, 0x80, 0x01, 0x0D, 0x8C, 0x60, 0x08, 0x80, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x02, 0xD0, 0x08, 0x0F, 0xF2, 0x60, 0x09, 0xA1, 0x67, 0x20, 0x11, 0x0D, 0x8B, 0x60, 0x0A,
0x19, 0x1B, 0xF0, 0x00, 0x2C, 0x92, 0xF0, 0x00, 0x90, 0x41, 0x20, 0x11, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x93, 0xFE, 0xF0, 0x00, 0x70, 0x00, 0xF2, 0x00,
0x19, 0x1B, 0x31, 0x22, 0x20, 0x31, 0xD0, 0x80, 0x0D, 0x8B, 0x60, 0x08, 0xA0, 0x03, 0xF0, 0x00, 0x20, 0x22, 0xD0, 0x80, 0x0D, 0x8C, 0x60, 0x08, 0xA0, 0x01,
0x19, 0x1B, 0xF0, 0x00, 0x20, 0x1E, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x20, 0x00, 0x0E, 0x69, 0x60, 0x08, 0xF0, 0x00, 0x01, 0xD0, 0x60, 0x01,
0x19, 0x1B, 0xF0, 0x00, 0x30, 0x80, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x01, 0xD0, 0x08, 0x83, 0x6D, 0x0C, 0x35, 0x60, 0x08, 0x40, 0x60, 0x3A, 0x4D, 0x60, 0x01,
0x19, 0x1B, 0x41, 0xE2, 0x21, 0x96, 0x60, 0x03, 0x33, 0x00, 0x41, 0x44, 0xF0, 0x00, 0x33, 0x81, 0x70, 0x00, 0xF0, 0x00, 0x34, 0x02, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x34, 0x83, 0x0C, 0x29, 0x60, 0x09, 0x35, 0x04, 0x3A, 0x5B, 0x60, 0x00, 0x35, 0x85, 0x3A, 0x60, 0x60, 0x03, 0x30, 0x90, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x33, 0x93, 0x70, 0x00, 0x8F, 0xDF, 0xF0, 0x00, 0x70, 0x00, 0xAE, 0x6C, 0xF0, 0x00, 0x70, 0x00, 0x8E, 0x9F, 0xF0, 0x00, 0x70, 0x00, 0xAE, 0x98,
0x19, 0x1B, 0xF0, 0x00, 0x0C, 0x51, 0xD2, 0x80, 0xF0, 0x00, 0x21, 0xA0, 0xD0, 0x80, 0xF0, 0x00, 0x05, 0x2E, 0xD2, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xA0, 0x0E,
0x19, 0x1B, 0xF0, 0x00, 0x21, 0xB7, 0xD0, 0x80, 0xF0, 0x00, 0x1F, 0x32, 0xD2, 0x80, 0xF0, 0x00, 0x1E, 0x84, 0xD2, 0x80, 0xF0, 0x00, 0x21, 0xE0, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x1E, 0xA4, 0xD2, 0x80, 0xF0, 0x00, 0x07, 0xF7, 0xD2, 0x80, 0xF0, 0x00, 0x22, 0x15, 0xD0, 0x80, 0xF0, 0x00, 0x07, 0xFB, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x22, 0x8F, 0xD0, 0x80, 0x40, 0x40, 0x22, 0xE1, 0xD2, 0x80, 0x40, 0x80, 0x22, 0xE2, 0xD2, 0x80, 0xF0, 0x00, 0x22, 0x9C, 0xD0, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x07, 0xFB, 0xD2, 0x80, 0xF0, 0x00, 0x22, 0xB6, 0xD0, 0x80, 0xF0, 0x00, 0x20, 0xF0, 0xD2, 0x80, 0x90, 0x02, 0x27, 0xDF, 0xD2, 0x80,
0x19, 0x1B, 0x9E, 0x69, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x07, 0x00, 0xD1, 0x80, 0xF0, 0x00, 0x23, 0x20, 0xD0, 0x80, 0x90, 0x82, 0x0C, 0x29, 0x60, 0x09,
0x19, 0x1B, 0x40, 0x17, 0x40, 0x67, 0xE6, 0x40, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x32, 0x17, 0xD0, 0x08, 0xF0, 0x00, 0x07, 0xF7, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x27, 0xEA, 0xD2, 0x80, 0xF0, 0x00, 0x11, 0xB5, 0xD0, 0x80, 0x40, 0x55, 0x15, 0x17, 0x60, 0x08, 0xF0, 0x00, 0x1D, 0x40, 0x60, 0x00,
0x19, 0x1B, 0x31, 0x05, 0x1E, 0x60, 0x60, 0x01, 0x31, 0x85, 0x70, 0x00, 0xF0, 0x00, 0x32, 0x05, 0x70, 0x00, 0xF0, 0x00, 0x32, 0x85, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x33, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x33, 0x81, 0x0D, 0x8E, 0x60, 0x09, 0x34, 0x00, 0x02, 0x54, 0x60, 0x02, 0x34, 0x81, 0x38, 0x80, 0x60, 0x03,
0x19, 0x1B, 0x30, 0x12, 0x70, 0x00, 0xF0, 0x00, 0x30, 0x93, 0x70, 0x00, 0xD0, 0x08, 0x17, 0x0B, 0x60, 0x0C, 0xA1, 0x1F, 0x00, 0x40, 0x40, 0x05, 0xF0, 0x00,
0x19, 0x1B, 0x00, 0x41, 0x24, 0x3F, 0xD0, 0x80, 0xF0, 0x00, 0x0C, 0x83, 0x60, 0x08, 0x90, 0x00, 0x0C, 0x6B, 0x60, 0x0B, 0xF0, 0x00, 0x70, 0x0C, 0xE6, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x20, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0x22, 0x04, 0xF0, 0x00, 0xF0, 0x00, 0x3B, 0xB3, 0xF0, 0x00, 0xF0, 0x00, 0x3C, 0x34, 0xD0, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xAD, 0xC8, 0xF0, 0x00, 0x0C, 0x8D, 0x60, 0x08, 0xF0, 0x00, 0x26, 0x0A, 0xD0, 0x80, 0x83, 0xFF, 0x0D, 0x9B, 0x60, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x01, 0xF4, 0x60, 0x00, 0xF0, 0x00, 0x03, 0xB1, 0x60, 0x01, 0x10, 0x00, 0x03, 0xB2, 0x60, 0x02, 0x10, 0x01, 0x04, 0x0E, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x02, 0x04, 0x0F, 0x60, 0x01, 0x10, 0x00, 0x04, 0x5C, 0x60, 0x02, 0x10, 0x01, 0x04, 0x5D, 0x60, 0x00, 0x10, 0x02, 0x13, 0x80, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x00, 0x0D, 0xAB, 0x60, 0x09, 0x10, 0x01, 0x02, 0xEE, 0x60, 0x00, 0x10, 0x07, 0x43, 0x06, 0x60, 0x01, 0x10, 0x10, 0x04, 0x69, 0x60, 0x02,
0x19, 0x1B, 0x10, 0x11, 0x44, 0x87, 0x60, 0x00, 0x10, 0x12, 0x05, 0xE3, 0x60, 0x01, 0x10, 0x10, 0x46, 0x08, 0x60, 0x02, 0x10, 0x11, 0x06, 0xAE, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x12, 0x0D, 0xA4, 0x60, 0x08, 0x10, 0x10, 0x9E, 0x3C, 0x60, 0x00, 0x10, 0x17, 0x0D, 0xB3, 0x60, 0x09, 0x10, 0x00, 0x25, 0xDA, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x07, 0x80, 0x3D, 0x60, 0x01, 0x10, 0x10, 0x28, 0x82, 0x60, 0x02, 0x10, 0x11, 0xC0, 0x3D, 0x60, 0x00, 0x10, 0x12, 0x28, 0x87, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x10, 0xC0, 0x3B, 0x60, 0x02, 0x10, 0x11, 0x28, 0x8C, 0x60, 0x00, 0x10, 0x12, 0xC0, 0x3B, 0x60, 0x01, 0x10, 0x10, 0x28, 0x91, 0x60, 0x02,
0x19, 0x1B, 0x10, 0x11, 0xC0, 0x3B, 0x60, 0x00, 0x10, 0x12, 0x28, 0x96, 0x60, 0x01, 0x10, 0x10, 0xC0, 0x3B, 0x60, 0x02, 0x10, 0x11, 0x28, 0x9B, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x12, 0xC0, 0x3B, 0x60, 0x01, 0x10, 0x10, 0x28, 0xA0, 0x60, 0x02, 0x10, 0x11, 0x40, 0x3C, 0x60, 0x00, 0x10, 0x12, 0x28, 0xA5, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x10, 0xC0, 0x3C, 0x60, 0x02, 0x10, 0x11, 0x28, 0xAA, 0x60, 0x00, 0x10, 0x12, 0xC0, 0x3C, 0x60, 0x01, 0x10, 0x10, 0x28, 0xAF, 0x60, 0x02,
0x19, 0x1B, 0x10, 0x11, 0xC0, 0x3C, 0x60, 0x00, 0x10, 0x12, 0x28, 0xB4, 0x60, 0x01, 0x10, 0x10, 0xC0, 0x3C, 0x60, 0x02, 0x10, 0x11, 0x28, 0xB9, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x12, 0xC0, 0x3C, 0x60, 0x01, 0x10, 0x10, 0x28, 0xBE, 0x60, 0x02, 0x10, 0x11, 0xC0, 0x3C, 0x60, 0x00, 0x10, 0x12, 0x29, 0xCC, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x10, 0x00, 0x37, 0x60, 0x02, 0x10, 0x11, 0x29, 0xD1, 0x60, 0x00, 0x10, 0x12, 0x00, 0x37, 0x60, 0x01, 0x10, 0x10, 0x29, 0xD6, 0x60, 0x02,
0x19, 0x1B, 0x10, 0x11, 0x00, 0x37, 0x60, 0x00, 0x10, 0x12, 0x29, 0xDB, 0x60, 0x01, 0x10, 0x10, 0x00, 0x37, 0x60, 0x02, 0x10, 0x11, 0x0D, 0xD8, 0x60, 0x08,
0x19, 0x1B, 0x10, 0x12, 0x27, 0x15, 0x60, 0x00, 0x10, 0x17, 0x40, 0x3E, 0x60, 0x01, 0x10, 0x00, 0x27, 0x1A, 0x60, 0x02, 0x10, 0x01, 0x80, 0x3C, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x02, 0x28, 0x64, 0x60, 0x01, 0x10, 0x00, 0x40, 0x3C, 0x60, 0x02, 0x10, 0x01, 0x28, 0x69, 0x60, 0x00, 0x10, 0x02, 0x40, 0x3C, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x00, 0x28, 0x6E, 0x60, 0x02, 0x10, 0x01, 0x80, 0x3A, 0x60, 0x00, 0x10, 0x02, 0x28, 0x73, 0x60, 0x01, 0x10, 0x00, 0x80, 0x3A, 0x60, 0x02,
0x19, 0x1B, 0x10, 0x01, 0x28, 0xA0, 0x60, 0x00, 0x10, 0x02, 0x40, 0x3C, 0x60, 0x01, 0x10, 0x00, 0x29, 0xCC, 0x60, 0x02, 0x10, 0x01, 0x00, 0x37, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x02, 0x29, 0xD1, 0x60, 0x01, 0x10, 0x00, 0x00, 0x37, 0x60, 0x02, 0x10, 0x01, 0x29, 0xD6, 0x60, 0x00, 0x10, 0x02, 0x00, 0x37, 0x60, 0x01,
0x19, 0x1B, 0x10, 0x00, 0x29, 0xDB, 0x60, 0x02, 0x10, 0x01, 0x00, 0x37, 0x60, 0x00, 0x10, 0x02, 0x0D, 0xEF, 0x60, 0x09, 0x10, 0x00, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x10, 0x07, 0x70, 0x00, 0xF0, 0x00, 0x10, 0x17, 0x70, 0x00, 0xD0, 0x08, 0x0C, 0xDF, 0x60, 0x0B, 0xA0, 0xBF, 0x30, 0x30, 0x23, 0xD6, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x26, 0xE8, 0xD0, 0x80, 0x0D, 0x9B, 0x60, 0x08, 0xA0, 0xBC, 0xF0, 0x00, 0x00, 0x02, 0xA0, 0xBB, 0x90, 0x82, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x82, 0x8A, 0x70, 0x00, 0x90, 0x03, 0x90, 0x8A, 0x70, 0x00, 0x90, 0x01, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xFB, 0x82, 0xBF, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x01, 0x99, 0xD2, 0x80, 0xF0, 0x00, 0x0D, 0x9A, 0x60, 0x08, 0xF0, 0x00, 0x26, 0xC1, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x02, 0xA0, 0xB2,
0x19, 0x1B, 0x90, 0x82, 0x70, 0x00, 0xF0, 0x00, 0x82, 0x8A, 0x70, 0x00, 0x90, 0x03, 0x90, 0x8A, 0x70, 0x00, 0x90, 0x01, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xFB,
0x19, 0x1B, 0x82, 0x80, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x0D, 0xAB, 0x60, 0x0D, 0xF0, 0x00, 0x3F, 0xFF, 0x60, 0x02,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0x51, 0xA0, 0xA9, 0xC2, 0x53, 0x70, 0x00, 0xF0, 0x00, 0x8E, 0xC4, 0x70, 0x00, 0x90, 0x01, 0xF0, 0x00, 0x70, 0x00, 0x97, 0xFC,
0x19, 0x1B, 0xD4, 0x8F, 0x01, 0x99, 0xD2, 0x80, 0x40, 0x05, 0x0D, 0xA4, 0x60, 0x0D, 0x40, 0x17, 0x3F, 0xFF, 0x60, 0x02, 0x9F, 0x7D, 0x00, 0x51, 0xA0, 0xA2,
0x19, 0x1B, 0xC2, 0x53, 0x70, 0x00, 0xF0, 0x00, 0x82, 0xC4, 0x27, 0x1C, 0xD1, 0x80, 0xF0, 0x00, 0x70, 0x00, 0x97, 0xFC, 0x91, 0x46, 0x27, 0x20, 0xD0, 0x80,
0x19, 0x1B, 0x40, 0x07, 0x01, 0x99, 0xD2, 0x80, 0xF0, 0x00, 0x0D, 0x8E, 0x60, 0x0E, 0x40, 0x07, 0x25, 0xC1, 0xA0, 0x9B, 0x9E, 0x79, 0x2E, 0x40, 0x40, 0x14,
0x19, 0x1B, 0x40, 0x36, 0x31, 0x67, 0x90, 0x19, 0x2F, 0x45, 0x19, 0x64, 0x60, 0x02, 0x4F, 0xF0, 0x1A, 0x5E, 0x60, 0x03, 0x83, 0x54, 0x40, 0x36, 0xF0, 0x00,
0x19, 0x1B, 0x83, 0x5C, 0x40, 0x00, 0xE2, 0x00, 0xF0, 0x00, 0x40, 0x10, 0xE2, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x90, 0x00, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x9C, 0x11, 0xF0, 0x00, 0x0D, 0xD8, 0x60, 0x0D, 0x40, 0x36, 0x22, 0xF0, 0xD2, 0x80, 0x0D, 0xB3, 0x60, 0x0D, 0xE6, 0x00,
0x19, 0x1B, 0x40, 0x14, 0x21, 0x40, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0x51, 0xA0, 0x8C, 0x90, 0x41, 0x70, 0x00, 0xF0, 0x00, 0x82, 0x45, 0x70, 0x00, 0x90, 0x1D,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x90, 0x01, 0xF0, 0x00, 0x70, 0xDC, 0x8F, 0xFB, 0x20, 0xD1, 0x3F, 0xFF, 0x60, 0x02, 0xF0, 0x00, 0x0C, 0xDF, 0x60, 0x0B,
0x19, 0x1B, 0xC2, 0x53, 0x31, 0x61, 0xF0, 0x00, 0xD4, 0x8E, 0x30, 0x33, 0xF0, 0x00, 0xD4, 0x4A, 0x37, 0xC6, 0xF0, 0x00, 0xC6, 0xA2, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xC3, 0xA0, 0x3D, 0x42, 0xF0, 0x00, 0xF0, 0x00, 0x31, 0xE0, 0xD0, 0x08, 0xC6, 0x24, 0x31, 0xE0, 0xF0, 0x00, 0x90, 0x00, 0x3D, 0x44, 0xF0, 0x00,
0x19, 0x1B, 0x83, 0xB6, 0x70, 0x00, 0xE0, 0x40, 0x40, 0xD5, 0x21, 0x41, 0xA0, 0x7C, 0xCC, 0x0B, 0x40, 0x00, 0xF0, 0x00, 0x80, 0xED, 0x23, 0xEA, 0xD2, 0x80,
0x19, 0x1B, 0xBF, 0x60, 0x20, 0x60, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0xE1, 0xF0, 0x00, 0xF0, 0x00, 0x23, 0xEA, 0xD2, 0x80, 0x90, 0xC6, 0x23, 0xDE, 0xD2, 0x80,
0x19, 0x1B, 0x4F, 0x95, 0x40, 0x14, 0xA0, 0x75, 0x81, 0x75, 0x70, 0x00, 0xF0, 0x00, 0xAF, 0x43, 0x70, 0x00, 0xF0, 0x00, 0xC2, 0xE0, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x80, 0xC3, 0x0C, 0xDF, 0x60, 0x0B, 0xF0, 0x00, 0x33, 0x63, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0xE3, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0x33, 0xA0, 0x41,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x80, 0x12, 0x40, 0xD5, 0x21, 0x41, 0xA0, 0x6C, 0xCC, 0x0B, 0x40, 0x00, 0xF0, 0x00, 0x80, 0xED, 0x23, 0xEA, 0xD2, 0x80,
0x19, 0x1B, 0xBF, 0x60, 0x20, 0x60, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0xE1, 0xF0, 0x00, 0xF0, 0x00, 0x23, 0xEA, 0xD2, 0x80, 0x90, 0xC6, 0x23, 0xDE, 0xD2, 0x80,
0x19, 0x1B, 0x4F, 0x95, 0x40, 0x14, 0xA0, 0x65, 0x81, 0x75, 0x70, 0x00, 0x40, 0x06, 0xAF, 0x43, 0x70, 0x00, 0xF0, 0x00, 0xC2, 0xE0, 0x0C, 0xDF, 0x60, 0x0B,
0x19, 0x1B, 0xF0, 0x00, 0x31, 0xE0, 0xF0, 0x00, 0x80, 0xC3, 0x40, 0x36, 0xE6, 0x00, 0xC6, 0x24, 0x30, 0x33, 0xF0, 0x00, 0xF0, 0x00, 0x33, 0x63, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x34, 0xE3, 0xF0, 0x00, 0xF0, 0x00, 0x3D, 0x44, 0xF0, 0x00, 0xF0, 0x00, 0x37, 0xC6, 0xA0, 0x2E, 0xF0, 0x00, 0x23, 0x66, 0xA0, 0x31,
0x19, 0x1B, 0x82, 0x92, 0x0B, 0xB8, 0x60, 0x03, 0x47, 0xF4, 0x23, 0xE0, 0xD2, 0x80, 0x52, 0x08, 0x60, 0x05, 0x98, 0x03, 0x82, 0x92, 0x52, 0x08, 0x60, 0x03,
0x19, 0x1B, 0x47, 0xF4, 0x23, 0xE0, 0xD2, 0x80, 0x52, 0x08, 0x60, 0x05, 0x98, 0x23, 0xF0, 0x00, 0x33, 0xE4, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0x65, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x35, 0x64, 0xF0, 0x00, 0xF0, 0x00, 0x35, 0xE5, 0xF0, 0x00, 0xF0, 0x00, 0x23, 0x66, 0xA0, 0x4F, 0x91, 0x8E, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x33, 0x66, 0xA0, 0x24, 0x82, 0x92, 0x52, 0x08, 0x60, 0x03, 0xF0, 0x00, 0x23, 0xE0, 0xD2, 0x80, 0xF0, 0x00, 0x70, 0x00, 0x9C, 0x05,
0x19, 0x1B, 0x82, 0x92, 0x0B, 0xB8, 0x60, 0x03, 0xF0, 0x00, 0x23, 0xE0, 0xD2, 0x80, 0xF0, 0x00, 0x70, 0x00, 0x9B, 0xF7, 0x0D, 0x94, 0x60, 0x0D, 0xA0, 0x2B,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xF5, 0xF0, 0x00, 0x24, 0xE6, 0xA0, 0x44, 0x9F, 0xBE, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x34, 0xE6, 0xA0, 0x19,
0x19, 0x1B, 0x82, 0x92, 0x52, 0x08, 0x60, 0x03, 0xF0, 0x00, 0x23, 0xE0, 0xD2, 0x80, 0xF0, 0x00, 0x70, 0x00, 0x9C, 0x05, 0x82, 0x92, 0x0B, 0xB8, 0x60, 0x03,
0x19, 0x1B, 0xF0, 0x00, 0x23, 0xE0, 0xD2, 0x80, 0xF0, 0x00, 0x70, 0x00, 0x9B, 0xF7, 0x0D, 0x97, 0x60, 0x0D, 0xA0, 0x20, 0xF0, 0x00, 0x70, 0x00, 0x8F, 0xF5,
0x19, 0x1B, 0x40, 0x14, 0x23, 0xE1, 0xA0, 0x39, 0xC2, 0x63, 0x25, 0x62, 0xF0, 0x00, 0xF0, 0x00, 0x24, 0x65, 0x90, 0x07, 0xC2, 0xA3, 0x25, 0xE6, 0xF0, 0x00,
0x19, 0x1B, 0x90, 0x80, 0x70, 0x00, 0x90, 0x02, 0x83, 0x77, 0x70, 0x00, 0xF0, 0x00, 0x25, 0x60, 0x23, 0xE0, 0xEB, 0xC0, 0x0C, 0xDF, 0x60, 0x0B, 0xA0, 0x32,
0x19, 0x1B, 0xF0, 0x00, 0x30, 0x30, 0xF0, 0x00, 0xF0, 0x00, 0x21, 0xE0, 0xD0, 0x08, 0xC2, 0xA3, 0x25, 0xE6, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x93, 0xF9,
0x19, 0x1B, 0x90, 0x40, 0x70, 0x00, 0x8F, 0xFA, 0xF0, 0x00, 0x21, 0xE0, 0xAF, 0x0F, 0xF0, 0x00, 0x24, 0x62, 0xD2, 0x80, 0xF0, 0x00, 0x32, 0x60, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x32, 0xE1, 0xD0, 0x08, 0xF0, 0x00, 0x23, 0xED, 0xD2, 0x80, 0xB8, 0x68, 0x22, 0x60, 0xF0, 0x00, 0xF0, 0x00, 0x22, 0xE1, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x23, 0xEA, 0xD2, 0x80, 0xF0, 0x00, 0x23, 0xDE, 0xD2, 0x80, 0xA9, 0x88, 0x70, 0x00, 0xF0, 0x00, 0xAB, 0xF8, 0x23, 0xE4, 0xD2, 0x80,
0x19, 0x1B, 0x46, 0x43, 0x21, 0x42, 0xA0, 0x21, 0xA0, 0x98, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x23, 0xE7, 0xD2, 0x80, 0xF0, 0x00, 0x23, 0xC6, 0xD2, 0x80,
0x19, 0x1B, 0x90, 0x00, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xDC, 0x09, 0xF0, 0x00, 0x23, 0xCE, 0xD0, 0x80, 0x47, 0xE5, 0x70, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0x40, 0x16, 0x20, 0xD3, 0xA0, 0x19, 0x83, 0x5D, 0x20, 0x52, 0xF0, 0x00, 0xC2, 0xF5, 0x21, 0x54, 0x98, 0x07, 0xC2, 0xB6, 0x70, 0x00, 0x90, 0x02,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0x90, 0x05, 0xF0, 0x00, 0x70, 0x00, 0x80, 0x02, 0xC2, 0xB6, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xD4, 0x09,
0x19, 0x1B, 0x82, 0x64, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xDC, 0x09, 0xF0, 0x00, 0x31, 0x51, 0xF0, 0x00, 0xF0, 0x00, 0x30, 0xD2, 0xD0, 0x08,
0x19, 0x1B, 0x0D, 0xEF, 0x60, 0x0B, 0xA0, 0x0D, 0x9E, 0x79, 0x20, 0x36, 0xF0, 0x00, 0xF0, 0x00, 0x20, 0x45, 0xF0, 0x00, 0x9F, 0xBC, 0x70, 0x00, 0xE0, 0x40,
0x19, 0x1B, 0x91, 0x45, 0x70, 0x00, 0xD0, 0x09, 0x26, 0x44, 0x27, 0x2D, 0xD5, 0x80, 0x91, 0x86, 0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x27, 0x32, 0xD5, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x70, 0x00, 0xAF, 0x67, 0x2F, 0x41, 0x27, 0x36, 0xD0, 0x80, 0xF0, 0x00, 0x29, 0x15, 0xD2, 0x80, 0xF0, 0x00, 0x3B, 0x9B, 0xD2, 0x80,
0x19, 0x1B, 0xF0, 0x00, 0x28, 0x88, 0xD0, 0x80, 0xF0, 0x00, 0x28, 0xDD, 0xD0, 0x80, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08, 0xF0, 0x00, 0x16, 0xC3, 0x60, 0x08,
0x19, 0x1B, 0xF0, 0x00, 0x00, 0x9A, 0x60, 0x00, 0xF0, 0x00, 0x02, 0xE3, 0x60, 0x00, 0x10, 0x00, 0x04, 0xF4, 0x60, 0x00, 0x10, 0x00, 0x06, 0xFF, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x09, 0x07, 0x60, 0x00, 0x10, 0x00, 0x0B, 0x10, 0x60, 0x00, 0x10, 0x00, 0x0D, 0x1F, 0x60, 0x00, 0x10, 0x00, 0x0F, 0x65, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x0F, 0x65, 0x60, 0x00, 0x10, 0x00, 0x0D, 0x1F, 0x60, 0x00, 0x10, 0x00, 0x0B, 0x10, 0x60, 0x00, 0x10, 0x00, 0x09, 0x07, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x06, 0xFF, 0x60, 0x00, 0x10, 0x00, 0x04, 0xF4, 0x60, 0x00, 0x10, 0x00, 0x02, 0xE3, 0x60, 0x00, 0x10, 0x00, 0x00, 0x9A, 0x60, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x16, 0xD3, 0x60, 0x08, 0xF0, 0x00, 0xFF, 0x93, 0x60, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0xFE, 0x37, 0x60, 0x00, 0x10, 0x00, 0xFD, 0xD9, 0x60, 0x00, 0x10, 0x00, 0xFE, 0x9F, 0x60, 0x00, 0x10, 0x00, 0x03, 0x85, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x0D, 0x6B, 0x60, 0x00, 0x10, 0x00, 0x16, 0x84, 0x60, 0x00, 0x10, 0x00, 0x1E, 0x49, 0x60, 0x00, 0x10, 0x00, 0x1E, 0x49, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x16, 0x84, 0x60, 0x00, 0x10, 0x00, 0x0D, 0x6B, 0x60, 0x00, 0x10, 0x00, 0x03, 0x85, 0x60, 0x00, 0x10, 0x00, 0xFE, 0x9F, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xFD, 0xD9, 0x60, 0x00, 0x10, 0x00, 0xFE, 0x37, 0x60, 0x00, 0x10, 0x00, 0xFF, 0x93, 0x60, 0x00, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x16, 0xE3, 0x60, 0x08, 0xF0, 0x00, 0x00, 0x64, 0x60, 0x00, 0xF0, 0x00, 0xFF, 0xA8, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xFF, 0xA6, 0x60, 0x00, 0x10, 0x00, 0xFF, 0xDF, 0x60, 0x00, 0x10, 0x00, 0x00, 0x01, 0x60, 0x00, 0x10, 0x00, 0x01, 0x28, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x01, 0x2F, 0x60, 0x00, 0x10, 0x00, 0xFD, 0x23, 0x60, 0x00, 0x10, 0x00, 0xFD, 0xA1, 0x60, 0x00, 0x10, 0x00, 0x03, 0x89, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x02, 0x54, 0x60, 0x00, 0x10, 0x00, 0xFE, 0x7D, 0x60, 0x00, 0x10, 0x00, 0x00, 0x8C, 0x60, 0x00, 0x10, 0x00, 0xFB, 0xE1, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xF9, 0x42, 0x60, 0x00, 0x10, 0x00, 0x0C, 0x47, 0x60, 0x00, 0x10, 0x00, 0x0E, 0xA2, 0x60, 0x00, 0x10, 0x00, 0xEC, 0x43, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xEA, 0xCE, 0x60, 0x00, 0x10, 0x00, 0x17, 0x46, 0x60, 0x00, 0x10, 0x00, 0x17, 0x46, 0x60, 0x00, 0x10, 0x00, 0xEA, 0xCE, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xEC, 0x43, 0x60, 0x00, 0x10, 0x00, 0x0E, 0xA2, 0x60, 0x00, 0x10, 0x00, 0x0C, 0x47, 0x60, 0x00, 0x10, 0x00, 0xF9, 0x42, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xFB, 0xE1, 0x60, 0x00, 0x10, 0x00, 0x00, 0x8C, 0x60, 0x00, 0x10, 0x00, 0xFE, 0x7D, 0x60, 0x00, 0x10, 0x00, 0x02, 0x54, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x03, 0x89, 0x60, 0x00, 0x10, 0x00, 0xFD, 0xA1, 0x60, 0x00, 0x10, 0x00, 0xFD, 0x23, 0x60, 0x00, 0x10, 0x00, 0x01, 0x2F, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x01, 0x28, 0x60, 0x00, 0x10, 0x00, 0x00, 0x01, 0x60, 0x00, 0x10, 0x00, 0xFF, 0xDF, 0x60, 0x00, 0x10, 0x00, 0xFF, 0xA6, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0xFF, 0xA8, 0x60, 0x00, 0x10, 0x00, 0x00, 0x64, 0x60, 0x00, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00,
0x19, 0x1B, 0xF0, 0x00, 0x17, 0x0B, 0x60, 0x08, 0xF0, 0x00, 0x00, 0x03, 0x60, 0x00, 0xF0, 0x00, 0x54, 0xC0, 0x60, 0x00, 0x10, 0x00, 0x00, 0x05, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x00, 0x05, 0x60, 0x00, 0x10, 0x00, 0x00, 0x0F, 0x60, 0x00, 0x10, 0x00, 0x00, 0x0F, 0x60, 0x00, 0x10, 0x00, 0x09, 0xC0, 0x60, 0x00,
0x19, 0x1B, 0x10, 0x00, 0x0A, 0x20, 0x60, 0x00, 0x10, 0x00, 0x1D, 0x40, 0x60, 0x00, 0x10, 0x00, 0x1E, 0x60, 0x60, 0x00, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00,
0x0D, 0x1B, 0xF0, 0x00, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0xD0, 0x08,
0x03, 0x1C, 0x00, 0x00, // Clear Required Initialization Control
0x03, 0x1C, 0x00, 0x75, // Set Required Initialization Control(2)
/* Load Required Initialization Beginning of DSP_INIT bytes */
0x19, 0x1B, 0x40, 0x13, 0x40, 0x2F, 0x41, 0x68, 0x41, 0xC1, 0x42, 0x14, 0x42, 0xA6, 0x44, 0xDE, 0x44, 0xE9, 0x45, 0xFB, 0x46, 0x11, 0x47, 0xC5, 0x47, 0xFC,
0x19, 0x1B, 0x4D, 0x5D, 0x4E, 0x56, 0x4E, 0x58, 0x4E, 0x5B, 0x4D, 0x83, 0x4E, 0x0A, 0x4E, 0x0B, 0x4E, 0x49, 0x4E, 0x53, 0x4F, 0x92, 0x4F, 0xEA, 0x50, 0x41,
0x19, 0x1B, 0x50, 0x74, 0x50, 0x80, 0x55, 0x31, 0x56, 0x60, 0x56, 0xD4, 0x56, 0xD9, 0x58, 0x29, 0x59, 0xB4, 0x5A, 0x3A, 0x5B, 0x79, 0x5B, 0xA2, 0x5B, 0xEF,
0x19, 0x1B, 0x5D, 0xDC, 0x60, 0x3A, 0x60, 0x88, 0x60, 0xA8, 0x61, 0x9F, 0x61, 0xB6, 0x61, 0xDF, 0x61, 0xF5, 0x62, 0x14, 0x62, 0x59, 0x62, 0x9B, 0x62, 0xA1,
0x17, 0x1B, 0x63, 0x69, 0x64, 0x3B, 0x66, 0x09, 0x66, 0xE7, 0x67, 0x0B, 0x67, 0x1A, 0x67, 0x29, 0x68, 0x87, 0x68, 0x99, 0x68, 0xA7, 0x68, 0xB2,
0x03, 0x1C, 0x00, 0x00, // Clear Required Initialization Control
0x03, 0x14, 0x00, 0x01, // Start Firmware....
INIT_FLAG_TIMER, 50, // Wait 50 ms
0x09, 0x40, 0x04, 0x01, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, // 9216 MHz crystal reference
//0x09, 0x40, 0x04, 0x01, 0x00, 0x3D, 0x09, 0x00, 0x00, 0x00, // 4000 MHz crystal reference
0x05, 0x40, 0x05, 0x01, 0x00, 0x01, // Command APPL_Activate will bring the device into ?active state? = radio standby
INIT_FLAG_TIMER, 100, // Wait 100 ms
0
};
void TEF6686_Config(void)
{
IIC_Config();
}
void SendTEF6686_DevWriteAddress(void)
{
//器件地址
IIC_SendByte(DSP_I2C_WRITE);
}
void SendTEF6686_DevReadAddress(void)
{
//器件地址
IIC_SendByte(DSP_I2C_READ);
}
void TEF6686_WaitI2C(void)
{
Delay_ms(40);
u8 buf1 = 9;
u8 buf2 = 9;
char buf[20] = {99};
IIC_Start(); //开始信号
IIC_SendByte(DSP_I2C_WRITE); //设备写地址
if( IIC_IsSlaveACK() == false)
{
printf("No ACK\r\n");
IIC_Stop();
while(1);
}
else
printf("!!!ACK!!!\r\n");
//[ w 40 80 01 ]
IIC_SendByte(0x40);
IIC_IsSlaveACK();
IIC_SendByte(0x80);
IIC_IsSlaveACK();
IIC_SendByte(0x01);
IIC_IsSlaveACK();
IIC_Stop();
//读取状态,判断设备是否在I2C总线上处于启动状态
IIC_Start();
IIC_SendByte(DSP_I2C_READ); //设备读地址
IIC_IsSlaveACK();
//[ r 0000 ]
buf1 =IIC_ReadByte();
IIC_MasterACK(0);
buf2 =IIC_ReadByte();
IIC_MasterACK(1);
sprintf(buf,"%02x%02x", buf1, buf2);
printf("Before init TEF6686 status = %s\r\n", (char*)buf);
IIC_Stop();
}
void I2C_Transmit(uint8_t addr, uint8_t *data, uint16_t size)
{
IIC_Start(); //起始信号
IIC_SendByte(addr); //从器件地址
IIC_IsSlaveACK(); //从机应答
for(uint16_t i = 0;i<size;i++)
{
IIC_SendByte(data[i]); //发送一个字节
IIC_IsSlaveACK(); //从机应答
}
IIC_Stop(); //停止信号
}
void DSP_WRITE_DATA(const uint8_t* data)
{
uint8_t len;
uint8_t *pa = (uint8_t *)data; //指针复制
for (;;)
{
len = *pa;
pa++;
if (!len)
break;
if (len & 0x80)
{
Delay_ms(*pa);
pa++;
}
else
{
I2C_Transmit(DSP_I2C_WRITE, pa, len);
pa = pa + len;
}
}
}
void TEF6686_Init(void)
{
TEF6686_Config();
Delay_ms(50);
u16 status;
//Get_Cmd(64, 128, &status, 1); //读取状态
Get_Operation_Status( &status);
printf("TEF6686 status =%x\r\n", status);
if(status != 0x02)
{
DSP_WRITE_DATA(DSP_INIT_V102);
//Get_Cmd(64, 128, &status, 1);
Get_Operation_Status( &status);
printf("After init TEF6686 status =%x\r\n", status);
}
// DSP_WRITE_DATA(DSP_INIT_V102);
// Get_Cmd(64, 128, &status, 1);
// printf("After init TEF6686 status =%x\r\n", status);
}
TEF6686.h
#ifndef __TEF6686_H
#define __TEF6686_H
#include "stm32f10x.h"
#include "Delay.h"
#include "SysTick.h"
#include "IIC.h"
#include <stdio.h>
#include <stdarg.h>
#include "TEF6686_command.h"
#define INIT_FLAG_TIMER (0xFF)
#define DSP_I2C_WRITE (0xC8)
#define DSP_I2C_READ (0xC9)
void TEF6686_Config(void);
void TEF6686_WaitI2C(void);
void TEF6686_Init(void);
u16 APPL_Get_Operation_Status(void);
void DSP_WRITE_DATA(const uint8_t* data);
void I2C_Transmit(uint8_t addr, uint8_t *data, uint16_t size);
#endif
TEF6686_command.c
#include "TEF6686_command.h"
/**
* @file name : TEF6686_command.c
* @brief : 用于实现对TEF6686进行读/写操作和指令
* @author : [email protected]
* @date : 2024/09/25
* @version : 1.0
* @note : None
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
*/
/*********************************************************************************************读/写操作************************************************************************************************************/
/**
* @name :Get_Cmd
* @brief :TEF6686读操作
* @params
* @mdl : 模块
* @cmd : 命令
* @receive : 缓存区地址
* @len : 读取数据的长度,两个字节为1个单位长度
* @version : 1.0
* @note : None
*/
void Get_Cmd(uint8_t mdl, uint8_t cmd, u16 *receive, uint8_t len)
{
IIC_Start();
IIC_SendByte(DSP_I2C_WRITE);
if( IIC_IsSlaveACK() == false)
{
printf("No ACK\r\n");
IIC_Stop();
while(1);
}
IIC_SendByte(mdl);
IIC_IsSlaveACK();
IIC_SendByte(cmd);
IIC_IsSlaveACK();
IIC_SendByte(0x01);
IIC_IsSlaveACK();
IIC_Stop();
IIC_Start();
IIC_SendByte(DSP_I2C_READ); //设备读地址
IIC_IsSlaveACK();
IIC_ReadBytes(len, receive);
IIC_Stop();
}
/**
* @name :Set_Cmd
* @brief :TEF6686写操作
* @params
* @mdl : 模块
* @cmd : 命令
* @len : len后面参数的个数
* @vArgs : 剩余个数可变的参数
* @version : 1.0
* @note : None
*/
void Set_Cmd(uint8_t mdl, uint8_t cmd, int len, ...)
{
uint16_t temp;
va_list vArgs;
va_start(vArgs, len);
IIC_Start();
IIC_SendByte(DSP_I2C_WRITE);
if( IIC_IsSlaveACK() == false)
{
printf("No ACK\r\n");
IIC_Stop();
while(1);
}
IIC_SendByte(mdl);
IIC_IsSlaveACK();
IIC_SendByte(cmd);
IIC_IsSlaveACK();
IIC_SendByte(0x01);
IIC_IsSlaveACK();
for (u8 i = 0; i < len; i++)
{
temp = va_arg(vArgs, u32);
IIC_SendByte((u8)(temp >> 8));
IIC_IsSlaveACK();
IIC_SendByte((u8)temp);
IIC_IsSlaveACK();
}
IIC_Stop();
va_end(vArgs);
}
/***********************************************************************************************写指令************************************************************************************************************/
/**
* @name : Tune_To
* @brief : 设置FM的频率
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式
* No_action 不采取行动
* Preset 预设更改,短静音跳转再释放静音
* Search 调到新节目,保持静音,启用广播和FM/AM更改
* Afupdate 调谐到替代频率,存储质量和调回与听不清的静音
* Jump 用听不清的静音调调谐到其他频率
* Check 调谐到其他频率,并保持沉默
* Reserved 保留位
* End 释放搜索或检查操作的静音状态(频率不需要且会被忽略)
* @frequency : 调整的频率,FM的单位是MHZ,范围是65MHZ~108Mhz如选择FM,该参数的值是需要调整的频率乘100;AM的单位是kHZ
*
* @version : 1.0
* @note : 1、在FM模式下,参数frequency的值是目标频率值乘100,例如需要调整到FM 89.3 MHz,则参数frequency需要填8930
* 2、如需调整的模式为End,则参数frequency为任意值即可
*/
void Tune_To(TEF6686Module_t module,TEF6686_TuneMode_t mode,uint16_t frequency)
{
if(End == mode)
Set_Cmd(module, 1, 1, mode);
else
Set_Cmd(module, 1, 2, mode, frequency);
}
/**
* @name : FM_Set_Tune_Options
* @brief : 在调优操作期间(FM AF_Update)使用的设置
* @params
* @mode : 在AF_Update期间的中频带宽控制模式,该参数的默认值为Fixed,详情可见枚举TEF6686_BandwidthControlmode_t
* @bandwidth : AF_Update期间的中频带宽,单位是kHZ
* @MuteTime : AF_Update期间听不到的静音斜率时间,单位是us,1000us是默认时间
* @SampleTime : AF_Update期间的取样时间,单位是us,2000us是默认时间
*
* @version : 1.0
* @note : None
*/
void FM_Set_Tune_Options(TEF6686_BandwidthControlMode_t mode, uint16_t bandwidth, u16 MuteTime, u16 SampleTime)
{
Set_Cmd(FM, 2, 4, mode, bandwidth*10, MuteTime, SampleTime);
}
/**
* @name : Set_Bandwidth
* @brief : 无线电选择性滤波器的固定带宽选择。
* @params
* @module : 调制方式(FM/AM)
* @mode : 带宽控制方式,FM的默认值为AutoBandwidth,AM的默认值为Fixed,详情可见枚举TEF6686_BandwidthControlmode_t
* @bandwidth : 固定中频带宽,单位为kHZ,FM的默认值为 236 kHz,AM的默认值为 4.0 kHz
* @control_sensitivity : FM调制下的自动中频带宽控制灵敏度,单位为%,默认值为100%,如调整方式为AM,则该参数可填任意值
* @low_level_sensitivity : FM调制下的低水平自动中频带宽控制灵敏度,单位为%,默认值为100%,如调整方式为AM,则该参数可填任意值
*
* @version : 1.0
* @note : 1、如调制方式为AM,则参数control_sensitivity和参数low_level_sensitivity的值为任意值
* 2、对于FM,支持以下16个带宽设置: 56 / 64 / 72 / 84 / 97 / 114 / 133 / 151 / 168 / 184 / 200 / 217 / 236 / 254 / 287 / 311 kHz。
* 3、对于AM,支持以下四种带宽设置: 3 / 4 / 6 / 8 kHz。其他带宽参数值被四舍五入到最近的支持带宽。
*
*/
void Set_Bandwidth(TEF6686Module_t module,TEF6686_BandwidthControlMode_t mode, uint16_t bandwidth, u16 control_sensitivity, u16 low_level_sensitivity)
{
//FM
if(FM == module)
Set_Cmd(module, 10, 4, mode, bandwidth*10, control_sensitivity*10, low_level_sensitivity*10);
//AM
else
Set_Cmd(module, 10, 2, mode, bandwidth*10);
}
/**
* @name : Set_RFAGC
* @brief : 调谐器前端AGC的启动水平。
* @params
* @module : 调制方式(FM/AM)
* @start : RF AGC启动值,单位为dBuV,FM的默认值为92dBuV,AM的默认值为100dBuV
* @extension : RF AGC步长扩展,FM可填Integrated(仅集成步骤,为默认值)和Extension(来自控制输出的AGC步骤扩展(GPIO特性“AGC”),AM调制该参数为任意值
*
* @version : 1.0
* @note : 1、为了防止关键定时并确保适当的FM AGC功能,在使用AM到FM频带变化时适用以下传输要求:
* FM_Set_RFAGC和FM_Set_TuneTo应至少间隔2 ms,FM_Set_TuneTo和FM_Set_RFAGC需要至少11 ms分离。
*
*/
void Set_RFAGC(TEF6686Module_t module,u16 start, TEF6686_RFAGC_ExtensionMode_t mode)
{
//FM
if(FM == module)
Set_Cmd(module, 11, 2, start*10, mode);
//AM
else
Set_Cmd(module, 11, 1, start*10);
}
/**
* @name : FM_Set_MphSuppression
* @brief : 使用/禁用”FM多路抑制系统
* @params
* @mode : MultipathSuppression_Enable为启用多路径抑制,MultipathSuppression_Disable为禁用多路径抑制功能,详情可见枚举TEF6686_MphSuppressionMode_t
*
* @version : 1.0
* @note : 建议设置“开启”以提高现场性能
*
*/
void FM_Set_MphSuppression(TEF6686_MphSuppressionMode_t mode)
{
Set_Cmd(FM, 20, 1, mode);
}
/**
* @name : FM_Set_ChannelEqualizer
* @brief : 使用/禁用FM通道均衡器
* @params
* @mode : ChannelEqualizer_Enable为启用通道均衡器,ChannelEqualizer_Disable为禁用通道均衡器,详情可见枚举TEF6686_ChannelEqualizerMode_t
*
* @version : 1.0
* @note : 建议设置“开启”以改善现场性能
*
*/
void FM_Set_ChannelEqualizer(TEF6686_ChannelEqualizerMode_t mode)
{
Set_Cmd(FM, 22, 1, mode);
}
/**
* @name : FM_Set_NoiseBlanker
* @brief : 噪声空白器选项和灵敏度设置
* @params
* @mode : NoiseBlanker_OFF为关闭噪声熄灭装置,NoiseBlanker_ON为打开噪声熄灭装置(默认打开),详情可见枚举TEF6686_NoiseBlankerMode_t
* @sensitivity : 触发器灵敏度,单位为%,默认值为100%
*
* @version : 1.0
* @note : None
*
*/
void FM_Set_NoiseBlanker(TEF6686_NoiseBlankerMode_t mode, u16 sensitivity)
{
Set_Cmd(FM, 23, 2, mode, sensitivity*10);
}
/**
* @name : FM_Set_Deemphasis
* @brief : 调频消音时间常数的选择
* @params
* @deemphasis : 失重时间常数,单位为us,如为0则关闭或用于评估目的,50us deemphasis为默认值
*
* @version : 1.0
* @note : None
*/
void FM_Set_Deemphasis(uint16_t Deemphasis)
{
Set_Cmd(FM, 31, 1, Deemphasis*10);
}
/**
* @name : Set_LevelStep
* @brief : 选择电平校正作为调谐器前端AGC的一个功能
* @params
* @module : 调制方式(FM/AM)
* @step1 : 从0到1的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-2dB,AM的默认值是-1dB
* @step2 : 从1到2的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-3dB,AM的默认值是-2dB
* @step3 : 从2到3的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-4dB,AM的默认值是-3dB
* @step4 : 从3到4的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-5dB,AM的默认值是-4dB
* @step5 : 从4到5的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-6dB,AM的默认值是-5dB
* @step6 : 从5到6的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM和AM的默认值是-6dB
* @step7 : 从6到7(或更高)的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM和AM的默认值是-6dB
*
* @version : 1.0
* @note : 一般不建议调整LevelStep的默认值,但允许在高信号条件下对弱信号处理进行特定的微调。
*/
void Set_LevelStep(TEF6686Module_t module, short step1, short step2,short step3,short step4,short step5,short step6,short step7)
{
Set_Cmd(module, 38, 7, step1*10, step2*10, step3*10,step4*10,step5*10,step6*10,step7*10);
}
/**
* @name : Set_LevelOffset
* @brief : 水平校正的选择。
* @params
* @module : 调制方式(FM/AM)
* @offset : 水平偏移量,单位是dB,范围为-48dB ~ +15dB,默认值是0 dB
*
* @version : 1.0
* @note : 电平偏移量可以用作天线噪声电平的总体校正,并包括在弱信号处理和Get_Quality()函数的电平读取值中。
*/
void Set_LevelOffset(TEF6686Module_t module, short offset)
{
Set_Cmd(module, 39, 1, offset*10);
}
/**
* @name : Set_Softmute_Time
* @brief : 该函数定义电平检测器、FM噪声和多路径检测器的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @module : 调制方式(FM/AM)
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~1200ms,默认值为120ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为500ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,FM的默认值为2ms,AM的默认值是12ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,FM的默认值为2ms,AM的默认值是50ms
*
* @version : 1.0
* @note : 建议FM设置为1 ms快速处理,以提高现场性能
*/
void Set_Softmute_Time(TEF6686Module_t module, short slow_attack, short slow_decay, short fast_attack, short fast_decay)
{
Set_Cmd(module, 40, 4, slow_attack, slow_decay, fast_attack*10, fast_decay*10);
}
/**
* @name : Set_Softmute_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时
* @params
* @module : 调制方式(FM/AM)
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅用于评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理电平启动,当液位降到以下时进行控制,单位是dBuV,范围是0dBuV~50dBuV,FM的默认值是15dBuV,AM的默认值是28dBuV
* @slope : 弱信号处理电平范围,单位是dB,控制水平的范围是6dB~30dB,FM的默认值为22dB,AM的默认值是25dB
*
* @version : 1.0
* @note : 建议LW波段的AM设置为34dBuV启动和30dB斜率,以提高现场性能
*/
void Set_Softmute_Level(TEF6686Module_t module, TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope)
{
Set_Cmd(module, 42, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Softmute_Noise
* @brief : 设置噪声,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制
* @start : FM弱信号处理噪声开始,高于噪声时的控制,单位是%,范围是0%~80%,默认值是50%
* @slope : FM弱信号处理噪声范围,单位是%,控制范围是10%~100%,默认值为100%
*
* @version : 1.0
* @note : None
*/
void FM_Set_Softmute_Noise(TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope)
{
Set_Cmd(FM, 43, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Softmute_Mph
* @brief : 设置多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制
* @start : FM弱信号处理多路启动,高于mph时的控制,单位是%,范围是0%~80%,默认值是50%
* @slope : FM弱信号处理多路径范围,单位是%,控制范围是10%~100%,默认值为100%
*
* @version : 1.0
* @note : None
*/
void FM_Set_Softmute_Mph(TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope)
{
Set_Cmd(FM, 44, 3, mode, start*10, slope*10);
}
/**
* @name : Set_Softmute_Max
* @brief : 启用并定义最大软衰减量(在信号差条件下实现)
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_Softmute_WeakSignalHandleMode_t
* WeakSignalHandle_ON 关闭(仅供评估)
* WeakSignalHandle_OFF 开启;由限制参数定义的最大动态控制(默认值)
* @limit : 软静音动态衰减极限,软静音最大衰减,单位是dB,范围是0dB~40dB,FM的默认值是20dB,AM的默认值是25dB
*
* @version : 1.0
* @note : 建议LW波段的AM设置为33 dB限制
*/
void Set_Softmute_Max(TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(module, 45, 2, mode, limit*10);
}
/**
* @name : Set_Highcut_Time
* @brief : 定义电平检测器、FM噪声和多路径检测器的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @module : 调制方式(FM/AM)
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为500ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为2000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,FM的默认值为2ms,AM的默认值是12ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,FM的默认值为2ms,AM的默认值是50ms
*
* @version : 1.0
* @note : 建议的FM设置为200 ms慢攻击,1 ms快速攻击和8 ms快速衰减,以提高现场性能。
*/
void Set_Highcut_Time(TEF6686Module_t module, u16 slow_attack, u16 slow_decay,u16 fast_attack, u16 fast_decay)
{
Set_Cmd(module, 50, 4, slow_attack, slow_decay, fast_attack*10, fast_decay*10);
}
/**
* @name : Set_Highcut_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @module : 调制方式(FM/AM)
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭(默认)
* WeakSignalHandling_ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为25%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 13%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是50%(从最小控制限制到最大限制的线性控制范围的百分比)
*
* @version : 1.0
* @note : None
*/
void Set_Highcut_Mod(TEF6686Module_t module, TEF6686_WeakSignalHandleMode_t mode, u16 start,u16 slope, u16 shift)
{
Set_Cmd(module, 51, 4, mode, start*10, slope*10, shift*10);
}
/**
* @name : Set_Highcut_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时
* @params
* @module : 调制方式(FM/AM)
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(AM默认)
* DoubleTimer 结合快速和慢计时器控制(FM默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是20 dBuV ~ 60 dBuV,FM默认值为36dBuV,AM默认值为40dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,FM默认值为30dB,AM默认值为20dB
*
* @version : 1.0
* @note : 建议MW和SW波段的AM设置为47dBuV启动,以提高现场性能。建议AM LW波段为52dBuV启动。
*/
void Set_Highcut_Level(TEF6686Module_t module, TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(module, 52, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Highcut_Noise
* @brief : 设置噪声,并实现慢速和快速定时(仅限FM)
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为36%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是30%
*
* @version : 1.0
* @note : 建议采用“双定时器”模式,15%的启动和20%的斜率来提高现场性能。
*/
void FM_Set_Highcut_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 53, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Highcut_Mph
* @brief : 设置多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为36%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是30%
*
* @version : 1.0
* @note : 建议采用“双定时器”模式,12%的启动和16%的斜率来提高现场性能。
*/
void FM_Set_Highcut_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 54, 3, mode, start*10, slope*10);
}
/**
* @name : Set_Highcut_Max
* @brief : 启用并定义最大高速切割衰减量(在不良信号条件下实现)。
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭,仅供评估
* WeakSignalHandling_OFF 打开,按限制参数设置的最大动态控制值(默认值)
* @limit : 最高衰减极限,单位为kHZ
* FM 高切角频率,最大衰减频率为3dB,默认值为4kHZ
* “IIR”筛选器(选项“1”(默认值)),范围为1.5kHz ~ 7kHz
* ‘deemphasis’模式(选项“2”),范围为0.7kHz ~ 3kHz
* “FIR”高切过滤器(选项“3”),范围为2.7kHz ~ 7kHz
* AM 高速切割最大值-3 dB,范围是1.35 kHZ ~ 7 kHz,默认值为1.8kHZ
*
* @version : 1.0
* @note : 1、对于FM,不同的极限范围适用于FM Set_Highcut_Options(cmd = 59)提供的不同的高速切割控制特性。
* 2、建议的FM设置为2.4 kHz的限制,以改善“IIR”滤波器场性能
*/
void Set_Highcut_Max( TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(module, 55, 2, mode, limit);
}
/**
* @name : Set_Highcut_Min
* @brief : 可选地定义最小高压衰减量(在良好信号条件下实现)。
* @params
* @module : 调制方式(FM/AM)
* @mode : 强信号处理 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;不限制高音频带宽(FM默认值)
* StrongSignalHandling_ON 开启;由限制参数设置的最小控制限制(AM默认值)
* @limit : 高速固定衰减极限,单位为kHZ
* FM 最小衰减3dB默认值为10kHZ
* “IIR”筛选器(选项“1”(默认值)),范围为2.7kHz ~ 15kHz
* ‘deemphasis’模式(选项“2”),范围为1.5kHz ~ 3.18kHz
* “FIR”高切过滤器(选项“3”),范围为2.7kHz ~ 15kHz
* AM 高速切割最大值-3 dB,范围是2.7kHz ~ 15kHz,默认值为6kHZ
*
* @version : 1.0
* @note : 1、对于Set_Highcut_Options()函数模式=2的特征“弱化”,则忽略Set_Deemphasis()函数设置,由FM_Set_Highcut_Min()函数参数模式=1定义50us或7us的弱化,并进行限制。
* 2、对于一个正常的控制行为,Set_Highcut_Min()函数总是应该设置一个比Set_Highcut_Max()函数更弱的信号处理限制(即一个更高的频率)。
*/
void Set_Highcut_Min( TEF6686Module_t module,TEF6686_StrongSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(module, 56, 2, mode, limit);
}
/**
* @name : Set_Lowcut_Max
* @brief : 启用并定义最大动态低割衰减,
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;
* WeakSignalHandling_ON 开启;由极限参数定义的最大动态控制(默认值)
* @limit : 低切动态衰减极限,最大减量的衰减,范围是30HZ ~ 500Hz单位为HZ,默认值为120 Hz,
*
* @version : 1.0
* @note : 建议F频设置为100 Hz限制,以改善现场性能。
*/
void Set_Lowcut_Max( TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(module, 57, 2, mode, limit);
}
/**
* @name : Set_Lowcut_Min
* @brief : 可选择地定义了低信号频率的最小衰减。
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;不限制低音频带宽(FM默认值)
* StrongSignalHandling_ON 开启;由限制参数设置的最小控制限制(AM默认值)
* @limit : 低切固定衰减极限,单位为HZ,范围是10HZ ~ 200Hz,默认值为20 Hz,
*
* @version : 1.0
* @note : 对于一个正常的控制行为,Set_Lowcut_Min()总是应该设置一个比Set_Lowcut_Max()更弱的信号处理限制(即一个较低的频率)。
*/
void Set_Lowcut_Min( TEF6686Module_t module,TEF6686_StrongSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(module, 58, 2, mode, limit);
}
/**
* @name : FM_Set_Highcut_Options
* @brief : 允许选择三个不同的高速控制特性(仅FM)
* @params
* @mode : FM高速切割控制特性 详情可见枚举TEF6686_HighCutControlMode_t
* IIR “analog”具有控制频率的一阶低通滤波器(默认)
* Deemphasis 50us/75us消音滤波器的控制频率
* FIR “digital”高阶低通滤波器与控制频率
*
* @version : 1.0
* @note : 1、不同的FM高频控制特性可用于选择声音的味道。
* 2、除了选项选择的高压过滤器类型,适当的值应该写入FM_Set_Highcut_Min()和FM_Set_Highcut_Max()。
* 3、在“deemphasis”特性的情况下,FM_Set_Deemphasis()设置将被忽略,而50us的选择或75us的取消强调则由FM_Set_Highcut_Min()来定义。
*/
void FM_Set_Highcut_Options(TEF6686_HighCutControlMode_t mode)
{
Set_Cmd(FM, 59, 1, mode);
}
/**
* @name : FM_Set_Stereo_Time
* @brief : 定义了电平检测器、噪声和多路检测器激活的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项
* @params
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为1000ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为4000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms
*
* @version : 1.0
* @note : 建议采用200 ms慢攻击和2 ms快速攻击,以提高现场性能。
*/
void FM_Set_Stereo_Time(u16 slow_attack, u16 slow_decay, u16 fast_attack, u16 fast_decay)
{
Set_Cmd(FM, 60, 4, slow_attack, slow_decay, fast_attack*10, fast_decay*10);
}
/**
* @name : FM_Set_Stereo_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭(默认)
* WeakSignalHandling_ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为21%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 9%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是50%(“最低限制”线性控制范围的百分比)
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Mod(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope, u16 shift)
{
Set_Cmd(FM, 61, 4, mode, start*10, slope*10, shift*10);
}
/**
* @name : FM_Set_Stereo_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是30 dBuV ~ 60 dBuV,默认值为46dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,默认值为24dB
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Level(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope)
{
Set_Cmd(FM, 62, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Stereo_Noise
* @brief : 设置噪声,并实现慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为24%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是20%
*
* @version : 1.0
* @note : 建议用12%的开始和16%的斜率来提高田间性能。。
*/
void FM_Set_Stereo_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 63, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Stereo_Mph
* @brief : 设置立体声的多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为24%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是20%
*
* @version : 1.0
* @note : 建议用10%的开始和15%的斜率来提高现场性能
*/
void FM_Set_Stereo_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 64, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_Stereo_Max
* @brief : 允许禁用动态立体控制。
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;(仅供评估)
* WeakSignalHandling_ON 开启;最大动态控制为0 dB通道秒,即单声道(默认)
*
* @version : 1.0
* @note : _Max模式“off”不适合禁用FMSI操作中可能需要的立体声处理。应该使用在_Mod、_Level、_Usn和_Mph上设置“off”。
*/
void FM_Set_Stereo_Max(TEF6686_WeakSignalHandleMode_t mode)
{
Set_Cmd(FM, 65, 1, mode);
}
/**
* @name : FM_Set_Stereo_Min
* @brief : 可选地定义最小量的立体声衰减(在良好的信号条件下实现)
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;通道分离不受限制(默认值)
* StrongSignalHandling_ON 开启;由极限参数设定的最小控制极限
* ForcedMono 强制单声道
* @limit : 立体声固定衰减极限,立体声最小通道分离,单位为dB,范围是6dB ~ 40dB,默认值为40 dB,
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Min(TEF6686_StrongSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(FM, 66, 2, mode, limit*10);
}
/**
* @name : FM_Set_StHiBlend_Time
* @brief : FM StHiBlend弱信号处理的时间和质量灵敏度设置。定义了电平检测器、噪声和多路检测器激活的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为500ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为2000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,默认值是2ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,默认值是2ms
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Time(u16 slow_attack, u16 slow_decay, u16 fast_attack, u16 fast_decay)
{
Set_Cmd(FM, 70, 4, slow_attack, slow_decay, fast_attack*10, fast_decay*10);
}
/**
* @name : FM_Set_StHiBlend_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭(默认)
* WeakSignalHandling_ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为24%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 12%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是67%(控制范围从最小限制到最大限制的百分比)
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Mod(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope, u16 shift)
{
Set_Cmd(FM, 71, 4, mode, start*10, slope*10, shift*10);
}
/**
* @name : FM_Set_Stereo_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是30 dBuV ~ 66 dBuV,默认值为60dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,默认值为24dB
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Level(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope)
{
Set_Cmd(FM, 72, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_StHiBlend_Noise
* @brief : 设置噪声,并实现慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为16%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是14%
*
* @version : 1.0
* @note : 建议从8%开始,以提高现场性能。。
*/
void FM_Set_StHiBlend_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 73, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_StHiBlend_Mph
* @brief : 设置立体声的多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为16%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是14%
*
* @version : 1.0
* @note : 建议从8%开始,以提高现场性能。
*/
void FM_Set_StHiBlend_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope)
{
Set_Cmd(FM, 74, 3, mode, start*10, slope*10);
}
/**
* @name : FM_Set_StHiBlend_Max
* @brief : 启用并定义StHiBlend衰减的最大量(在非常差的信号条件下实现)。
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;(仅供评估)
* WeakSignalHandling_ON 开启;由限制参数定义的最大动态控制(默认值)
* @limit : 静态混合器的动态衰减极限,单位为kHZ,范围是2.7kHZ ~ 7kHz,默认值为4kHz,
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Max(TEF6686_WeakSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(FM, 75, 2, mode, limit);
}
/**
* @name : FM_Set_StHiBlend_Min
* @brief : 可选地定义StHiBlend衰减量(在良好的信号条件下实现))
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;通道分离bw不受限制(默认值)
* StrongSignalHandling_ON 开启;由极限参数设定的最小控制限值
* @limit : 混合固定衰减极限,单位为kHZ,范围是3 kHz ~ 15 kHz
*
* @version : 1.0
* @note : 对于一个正常的控制行为,Set_StHiBlend_Min()总是应该设置一个比Set_StHiBlend_Max()更弱的信号处理限制(即一个更高的频率)。
*/
void FM_Set_StHiBlend_Min(TEF6686_StrongSignalHandleMode_t mode, u16 limit)
{
Set_Cmd(FM, 76, 2, mode, limit);
}
/**
* @name : Set_Scaler
* @brief : 在FM和AM模拟无线电声音之间的声音振幅的微调。
* @params
* @module : 调制方式(FM/AM)
* @gain : 通道增益,模拟无线电信号增益,单位是dB,范围是= -12 … +6 dB,默认是为0dB
*
* @version : 1.0
* @note : 关于FM和AM数字无线电声音振幅的微调,见Set_DR_Blend()
*/
void Set_Scaler(TEF6686Module_t module, u16 gain)
{
Set_Cmd(module, 80, 1, gain);
}
/**
* @name : FM_Set_RDS
* @brief : 调频无线电数据系统解调器和解码器系统的控制。
* @params
* @mode : RDS操作控制 详情可见TEF6686_RDSControlMode_t
* RDSControl_OFF 关闭(禁用RDS功能)
* DecoderMode 解码器模式(默认);从Get_RDS_Status/Get_RDS_Data、FM中输出RDS组数据(块A、B、C、D);= 130/131
* DemodulatorMode 解调器模式;从Get_RDS_Status/Get_RDS_Data输出原始解调器数据;FM cmd = 130/131
* @restart : RDS解码器重新启动 详情可见TEF6686_RDSDecoderRestartControl_t
* NoControl 不控制
* ManualRestart 手动重新启动;立即开始寻找新的RDS信号
* AutomaticRestart 调优后自动重新启动(默认);在预设、搜索、跳转或检查调优操作后开始寻找新的RDS信号(请参见FM cmd = 1)
* @interface : RDS引脚信号功能 详情可见TEF6686_RDSPinControl_t
* RDS_NoPinInterface 无引脚接口(默认)
* DataAvailable 数据可用状态输出;活动低(GPIO功能“DAVN”)
* DoubleWire 传统的双线解调器数据和时钟输出(“RDDA”和“RDCL”)
*
* @version : 1.0
* @note : 1、RDS ‘DAVN’信号(接口= 2)可以在任何可用的GPIO引脚上输出。为了接收原始解调器数据,建议使用“解调器模式”(模式= 2),2线输出选项(接口= 4)仅用于传统使用,不建议用于新的设计。
* 2、对于引脚信号,需要进行GPIO引脚分配;请参见Set_GPIO()。
*/
void FM_Set_RDS(TEF6686_RDSControlMode_t mode, TEF6686_RDSDecoderRestartControl_t restart, TEF6686_RDSPinControl_t interface)
{
Set_Cmd(FM, 81, 3, mode, restart, interface);
}
/**
* @name : Set_QualityStatus
* @brief : 启用并定义质量检测器状态标志的中断使用或状态引脚输出
* @params
* @module : 调制方式(FM/AM)
* @mode : 调优准备就绪后的质量状态标志 详情可见TEF6686_QualityStatusFlag_t
* NoFlag 调优后未设置任何标志(默认值)
* SetFlag 当FM AF_Update质量结果可用时,设置标志
* @time : 设置标志在该时间后,调整准备好,单位是ms,范围是1ms~32ms
* 该参数只有参数mode选择SetFlag时生效,如为NoFlag,则该参数为任意值
* @interface : 质量状态引脚信号功能 详情可见TEF6686_QualityStatusPinControl_t
* QualityStatus_NoPinInterface 无引脚接口(默认)
* QualityStatus_Output 质量状态输出;活动低(“QSI”)
*
* @version : 1.0
* @note : 对于引脚信号,需要进行GPIO引脚分配;请参见APPL cmd 3 Set_GPIO()。注意:模式参数计时器的设置是四舍五入到1 ms的步长
*/
void Set_QualityStatus(TEF6686Module_t module, TEF6686_QualityStatusFlag_t mode, u16 time, TEF6686_QualityStatusPinControl_t interface)
{
if( mode == NoFlag )
Set_Cmd(module, 82, 2, mode, interface);
else
{
time *= 10;
Set_Cmd(module, 82, 2, time |= (1<<15), interface);
}
}
/**
* @name : Set_Specials
* @brief : 用于评估和扩展应用程序使用的特殊无线电选项。
* @params
* @module : 调制方式(FM/AM)
* @ana_out : 音频输出使用 详情可见TEF6686_AudioOutputUse_t
* NormalOperation 默认
* DARC_Output DAC_L: FM MPX宽带(DARC)信号/ DAC_R: FM单声道音频
* DigitalAudio L:数字无线电左频道/R:模拟无线电左频道
*
* @version : 1.0
* @note : 1、设置ana_out = 1作用于DAC输出,并且仅可用于FM。FM立体声信号仍然可从数字音频I2S输出(IIS_SD_1)
* 2、设置ana_out = 2同时作用于DAC和数字音频I2S输出。DAC源选择或I2S输出源选择覆盖此数字无线电测试选项。
* 3、设置ana_out = 2需要一个音频输入选择的“无线电”,并且必须禁用数字无线电(或处于非活动状态的混合信号)。数字无线电增益比例不包括在内。此行为等同于设备版本V101。
*/
void Set_Specials(TEF6686Module_t module, TEF6686_AudioOutputUse_t ana_out)
{
Set_Cmd(module, 85, 1, ana_out);
}
/**
* @name : FM_Set_Bandwidth_Options
* @brief : FM自动带宽无线电选择性滤波器的附加控制选项。
* @params
* @modulation :扩展API: FM自动带宽提升上的调制,将带宽提高到最大带宽的调制指数,单位是%,范围位66% ~ 133%,默认值是95%
*
* @version : 1.0
* @note : 1、一般不建议调整默认值,但允许在特定条件下进行特定的性能微调。特性创新可能会导致扩展的API默认值和控制随着固件的发布而改变
* 2、有关主FM自动带宽控制和其他控制选项,请参见Set_Bandwidth().
*/
void FM_Set_Bandwidth_Options( u16 modulation)
{
Set_Cmd(FM, 86, 1, modulation*10);
}
/**
* @name : AUDIO_Set_Volume
* @brief : 音频音量的设置。
* @params
* @volume :音频音量,单位是dB,范围为 -60dB ~ +24dB,默认值是0dB
*
* @version : 1.0
* @note : 1、根据源信号,超过0 dB的音量设置可能会引入信号裁剪
* 2、TEF668X体积设置到体积= -40 dB在1 dB内是准确的,较低的体积显示出越来越大的不准确性和步长。设置-60 dB和较低的设置为静音
*/
void AUDIO_Set_Volume( u16 volume)
{
Set_Cmd(AUDIO, 10, 1, volume*10);
}
/**
* @name : AUDIO_Set_Mute
* @brief : 启用和禁用音频静音。
* @params
* @mode :音频静音 详情可见枚举TEF6686_AudioMuteMode_t
* MuteDisabled 禁用静音,允许音频输出
* MuteActive 静音起作用(默认)
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Mute( TEF6686_AudioMuteMode_t mode)
{
Set_Cmd(AUDIO, 11, 1, mode);
}
/**
* @name : AUDIO_Set_Input
* @brief : 输入选择;选择音频输入源信号。
* @params
* @source :音频源选择 详情可见枚举TEF6686_AudioSourceSelect_t
* Radio 默认(启用和可用时的模拟无线电或数字无线电)
* ExternalI2S_Audio 外部I2S音频源
* SineWaveGenerator 正弦波发电机
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Input( TEF6686_AudioSourceSelect_t source)
{
Set_Cmd(AUDIO, 12, 1, source);
}
/**
* @name : AUDIO_Set_Output_Source
* @brief : 输出选择;对音频输出的源信号的选择。
* @params
* @signal :音频输出 详情可见枚举TEF6686_AudioSourceSelect_t
* I2SDigitalAudioOutput_IIS_SD_1 I2S数字音频输出IIS_SD_1
* DAC_L_ROutput DAC输出
* @source :音频源选择 详情可见枚举TEF6686_AudioSourceSelect_t
* AnalogRadio 模拟无线电
* I2SDigitalAudioInput_IIS_SD_0 I2S数字音频输入IIS_SD_0
* AudioProcessor 音频处理(默认)
* SineWaveGenerator 正弦波发电机
*
* @version : 1.0
* @note : 1、默认情况下,DAC输出和IIS_SD_1输出信号都来自音频处理器,即信号由AUDIO_Set_Input、_Set_Volume和_Set_Mutt定义。Set_Output_Source允许替代输出信号选择,直接连接到一个可用的源信号而无需处理。
* 2、命令集_Output_源需要一个信号定义,即包括索引=1
*/
void AUDIO_Set_Output_Source( TEF6686_AudioOutput_t signal, TEF6686_AudioSourceSelect_t source)
{
Set_Cmd(AUDIO, 13, 2, signal, source);
}
/**
* @name : AUDIO_Set_Ana_Out
* @brief : 模拟输出信号的定义。
* @params
* @mode :输出方式 详情可见枚举TEF6686_DACOutputMode_t
* DisableDACOutput 禁用DAC输出
* EnableDACOutput 使能DAC输出
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Ana_Out( TEF6686_DACOutputMode_t mode)
{
Set_Cmd(AUDIO, 21, 2, 128, mode);
}
/**
* @name : AUDIO_Set_Dig_IO
* @brief : 数字输入和输出音频信号的定义。
* @params
* @signal :输出方式 详情可见枚举TEF6686_DigitalAudioSignal_t
* I2SDigitalAudio_Input I2S数字音频IIS_SD_0(输入)
* I2SDigitalAudio_Output I2S数字音频IIS_SD_1(输出)
* @format :数字音频格式选择 详情可见枚举TEF6688_DigitalAudioFormat_t
* I2S_16bits (fIIS_BCK = 32 * samplerate)
* I2S_32bits (fIIS_BCK = 64 * samplerate) (默认)
* lsb_aligned_16bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_18bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_20bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_24bit (fIIS_BCK = 64 * samplerate)
* @operation : 操作方式
* SlaveMode 从属模式;由源代码定义的IIS_BCK和IIS_WS输入(默认值)
* MasterMode 主模式;由设备定义的IIS_BCK和IIS_WS输出
* @samplerate : 音频采样率选择
* 32 32kHz
* 44 44.1kHz (默认)
* 48 48kHz
*
*
* @version : 1.0
* @note : 1、命令Set_Dig_IO需要一个信号定义,即包括索引=1。
* 2、一个TEF668X数字音频信号总是使用16个有源(msb)位。
* 3、在某些情况下,“操作”或“采样器”的设置不是可以独立选择的,例如,因为共享的BCK和WS引脚。在这种情况下,控制设置是基于枚举值最小的信号
* 4、fIIS_BCK表示在主模式操作时的输出频率和对lsb对准的格式化输出信号的从模式操作所需的输入频率。输入信号和I2S格式的输出信号的从属模式操作也允许其他比特时钟速率(16……32)*2*采样率。
*/
void AUDIO_Set_Dig_IO(TEF6686_DigitalAudioSignal_t signal, TEF6688_DigitalAudioFormat_t format, TEF6686_DigIOMode_t operation, u16 samplerate)
{
u16 mode;
if( signal == 32 )
mode = 1; //输入
else
mode = 2; //输出
Set_Cmd(AUDIO, 22, 5, signal, mode, format, operation, samplerate*100);
}
/**
* @name : AUDIO_Set_Input_Scaler
* @brief : 外部源声振幅的微调。对于每个可用的外部源,可以编程设置一个单独的声音振幅校正,以便在选择音频输入时使用( Set_Input())。
* @params
* @gain :外部源信道增益,单位是dB,范围是-12dB~6dB,默认值是0dB
*
* @version : 1.0
* @note : 1、命令Set_Input_Scaler需要一个源定义,即包括索引=1。
* 2、来自IIS_SD_0的数字无线电信号的缩放由无线电控制FM / AM Set_DR_Blend()
*/
void AUDIO_Set_Input_Scaler( u16 gain)
{
Set_Cmd(AUDIO, 23, 2 ,32 , gain*10);
}
/**
* @name : AUDIO_Set_WaveGen
* @brief : 内部正弦波和偏移发生器信号的定义。波发生器可以选择作为音频源(见Set_Input()),并且仅用于测试目的。
* @params
* @mode :模式 详情可见枚举TEF6686_WaveGenMode_t
* WaveSignalOff 默认
* Wave1Signal_LChannel 左通道上的第1波信号
* Wave2Signal_RChannel 右通道上的第2波信号
* Wave1Signal_LChannel_Wave2Signal_RChannel 左通道第1波信号,右通道2波信号
* Wave1Signal_LRChannel 左右通道上的第一波信号
* Wave2Signal_LRChannel 左右通道上的第二波信号
* Wave1_Wave2Signal_LRChannel 左右通道上的第1波+第2波信号
* @offset :直流偏移,单位为LSB,范围是-32768LSB ~ +32767LSB,默认值为0LSB(无偏移)
* @amplitude1 : 波1振幅,单位为dB,范围是 -30dB ~ 0dB,默认值为-20dB
* @frequency1 : 波1频率,单位为HZ,范围是 10HZ ~ 20HZ,默认值为400Hz
* @amplitude2 : 波2振幅,单位为dB,范围是 -30dB ~ 0dB,默认值为-20dB
* @frequency2 : 波2频率,单位为HZ,范围是 10HZ ~ 20HZ,默认值为1000Hz
*
* @version : 1.0
* @note : 1、振幅的参考是数字全标度峰(FSPP);即,0 dB表示无偏移时的最大未失真正弦波信号。
* 2、直流偏移量在左通道和右通道上都可用于所有模式设置。
* 3、对于模式=7,将第1波和第波2的信号加在一起,对于无失真的信号,第波1和第波2的组合振幅不应超过0 dB。
*/
void AUDIO_Set_WaveGen( TEF6686_WaveGenMode_t mode, u16 offset, u16 amplitude1, u16 frequency1, u16 amplitude2, u16 frequency2)
{
Set_Cmd(AUDIO, 24, 6 ,mode, offset, amplitude1*10, frequency1, amplitude2*10, frequency2);
}
/**
* @name : APPL_Set_OperationMode
* @brief : 设备电源控制。
* @params
* @mode :模式 详情可见枚举TEF6688_OperationMode_t
* DeviceNormalOperation 正常运算
* RadioStandbyMode 无无线电功能的低功耗模式(默认)
*
* @version : 1.0
* @note : 1、FM和AM命令在两种操作模式下都可用,允许在无线电待机模式下进行无线电初始化FM和AM操作。
* 2、“正常操作”将返回到待机前定义的无线电操作(除非在无线电待机模式下进行了其他选择)。或者,预设或搜索的无线电调优操作(见Tune_To())将启用正常操作。
*/
void APPL_Set_OperationMode( TEF6688_OperationMode_t mode)
{
Set_Cmd(APPL, 1, 1 ,mode);
}
/**
* @name : APPL_Set_GPIO
* @brief : 定义通用用途和应用销的用途
* @params
* @pin :GPIO引脚 详情可见枚举TEF6686_GPIO_t
* GPIO0
* GPIO1
* GPIO2
* @module : 调制方式(FM/AM)
* @feature : 特征 详情可见枚举TEF6686_GPIOFeature_t
* NoUse
* Input
* Output_0
* Output_1
* Output_RDS ( 参见cmd 81 ‘DAVN’)
* Output_QSI (FM / AM:请参见cmd82‘计时器和AF_Update标志”)
* Output_QSI_RDS (如果“DAVN”或“QSI”为活动状态,则活动“low”)
* Output_RDDA (FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
* Output_RDCL (FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
* Output_AGC (FM:参见cmd 11 ‘AGC步骤扩展”)
* @version : 1.0
* @note : 1、命令Set_GPIO需要一个GPIO编号定义,即包括索引=1。
* 2、通用输入的使用仅限于GPIO 0。
* 3、FM或AM的模块设置仅对适当的无线电模式是活动的,允许FM和AM的独立特征定义。
* 4、特征信号RDS、QSI和AGC均为“主动低”。
* 5、可以定义和启用指定的功能
*/
void APPL_Set_GPIO( TEF6686_GPIO_t pin, TEF6686Module_t module, TEF6686_GPIOFeature_t feature)
{
Set_Cmd(APPL, 3, 3 ,pin, module, feature);
}
/**
* @name : APPL_Set_ReferenceClock
* @brief : 设置参考时钟。
* @params
* @frequency :时钟频率,单位是HZ,默认值是9216000HZ
* @type : 时钟类型 详情可见枚举TEF6686_ReferenceClockType_t
* CrystalOscillator 晶体振荡器操作(默认值)
* ExternalClockInput 外部时钟输入操作
* @version : 1.0
* @note : 1、此命令仅在“空闲状态”期间可用。
* 2、几种不同的频率可以用于晶体振荡器或外部参考时钟。为了正常工作,必须在激活设备之前输入参考频率,因此,该命令仅在“空闲”状态下可用。
* 3、TEF668X支持的频率:4.000 MHz、9.216 MHz、12.000 MHz、55.46667 MHz。
* 4、数字无线电使用的支持频率分别为9.216、12.000和55.46667 MHz。
* 5、55.46667 MHz仅用于时钟输入使用,不支持作为晶体频率
* 6、参考时钟频率设置的准确性不是关键的,近似值被转换为实际的支持频率。
*/
void APPL_Set_ReferenceClock(u32 frequency, TEF6686_ReferenceClockType_t type)
{
Set_Cmd(APPL, 4, 3 ,(u16)(frequency >> 16), (u16)frequency, type);
}
/**
* @name : APPL_Activate
* @brief : 从“空闲状态”转到“活动状态”。
* @params : None
* @version : 1.0
* @note : 1、此命令仅在“空闲状态”期间可用。
* 2、定义参考时钟频率后,必须将设备置于活动状态,以便进一步初始化和控制。激活后,设备将处于“无线电备用”操作模式。
*/
void APPL_Activate(void)
{
Set_Cmd(APPL, 5, 1 , 1);
}
/***********************************************************************************************读指令************************************************************************************************************/
/**
* @name : Get_Quality
* @brief : 读取调谐器接收质量信息的状态
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式 详细可见TEF6686_GetQualitymode_t
* Get_Status 将读取状态和可能的数据,状态和任何冻结数据(例如在AF_Update调优后可用)保持不变。Get_质量状态是用于状态只读(即状态轮询),但可以在需要时采样数据。
* Get_Data 将读取状态和数据,以及读取后发布的任何冻结数据(例如,在AF_Update调整后可用),允许新的数据更新。获取_质量_数据旨在用于读取数据,并将状态告知数据内容和有效性
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、质量检测器状态
* [15] :AF_update标志
* 0 具有时间戳的连续质量数据
* 1 AF_Update采样数据
* [14:10] :保留位
* [9:0] :质量时间戳
* 0 正在进行中,没有可用的质量数据
* !0 单位是ms,范围是1ms~320ms(*0.1ms)
* 2、液位检测结果,单位是dBuV,范围是-200dBuV ~ 1200dBuV (*0.1dBuV),输入水平的实际范围和精度受到噪声和agc的限制
* 3、噪声探测器
* FM 超声波噪声检测器,单位是%,范围是0% ~ 1000% (*0.1 %)
* AM 高频噪声检测器,单位是%,范围是0% ~ 50000% (*0.1 %),100%是近似相等的噪声和需要的信号
* 4、FM多径探测器/ AM共通道探测器
* FM “宽带-AM”多路径探测器,单位是%,范围是0% ~ 1000% (*0.1 %)
* AM 共通道检测器
* 0 未检测到共通道
* 1 已检测到的共同通道(基于所选标准)
* 5、射频偏移,单位是kHz,范围是-1200kHz ~ 1200kHz (*0.1 kHz)
* 6、中频带宽
* FM 单位是kHz,范围是560kHz ~ 3110kHz [*0.1 kHz]
* AM 单位是kHz,范围是30kHz ~ 80kHz [*0.1 kHz]
* 7、调制探测器
* FM 范围是0% ~ 1000% [*0.1 %]
* 范围是1000% ~ 2000% [*0.1 %]
* AM 范围是0% ~ 1000% [*0.1 %]
* 范围是1000% ~ 2000% [*0.1 %]
* @note : 1、如果之前没有读取AF数据,调优操作将重置状态信息并释放冻结的AF_Update采样质量数据。
* 2、状态质量时间戳开始更新一旦调整建立和新的采样数据可用于AF_Update调优操作(见 Tune_To()模式= 3)和新的连续数据可用于预设、搜索、跳转或检查调优操作(模式=1、2、4或5)。
*/
void Get_Quality(TEF6686Module_t module, TEF6686_GetQualitymode_t mode, u16* receive)
{
Get_Cmd(module, mode, receive, 7);
}
/**
* @name : FM_Get_RDS_DecoderMode
* @brief : 读取调谐器接收质量信息的状态
* @params
* @mode : 调整的模式 详细可见TEF6686_GetRDSmode_t
* Get_Status 于读取数据库实例的状态
* Get_Data 不仅返回数据库实例的状态,还返回存储在数据库中的数据。
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、FM RDS接收状态
* [15] :数据可用标志
* 0 没有可用的数据(不完整的组或没有第一个PI)
* 1 RDS组数据或第一个PI数据可用
* [14] :数据丢失标志
* 0 无数据丢失
* 1 以前的数据没有被读取,而是用较新的数据代替
* [13] :数据可用类型
* 0 组数据;连续操作
* 1 第一个PI数据;数据与PI代码后的解码器同步
* [12] :组类型
* 0 类型A;ABCD组(A块中的PI代码)
* 1 类型B;A-B-C‘-D组(具有块A和C’中的PI代码)
* [11:10] :保留位
* [9] :同步状态
* 0 RDS解码器未同步;未找到RDS数据
* 1 RDS解码器已同步;RDS数据接收已激活
* [8:0] : 保留位
* 2、块A的数据
* 3、块B的数据
* 3、块C的数据
* 3、块D的数据
* 6、错误代码(由解码器确定)
* [15:14] :块A的错误代码
* [13:12] :块B的错误代码
* [11:10] :块C的错误代码
* [9:8] :块D的错误代码
* [7:0] :保留位
* 错误代码
* 0 : 没有错误;块数据与匹配的数据和综合征
* 1 : 误差小;可能检测到1位接收错误;数据被修正
* 2 : 误差大,检测到理论可修正误差,数据被修正
* 3 : 不可纠正的错误;无法纠正数据
* @note : 该函数用于Set_RDS()函数中, mode = 1的情况
*/
void FM_Get_RDS_DecoderMode( TEF6686_GetRDSmode_t mode, u16* receive)
{
Get_Cmd(FM, mode, receive, 6);
}
/**
* @name : FM_Get_RDS_DemodulatorMode
* @brief : 读取调谐器接收质量信息的状态
* @params
* @mode : 调整的模式 详细可见TEF6686_GetRDSmode_t
* Get_Status 于读取数据库实例的状态
* Get_Data 不仅返回数据库实例的状态,还返回存储在数据库中的数据。
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、FM RDS接收状态
* [15] :数据可用标志
* 0 无可用数据
* 1 32位的原始解调器数据可用
* [14] :数据丢失标志
* 0 无数据丢失
* 1 没有读取以前的数据,而是使用较新的数据
* [13:0] :保留位
* 2、32位原始解调器数据的MSB部分([31:16])
* 3、LSB是32位原始解调器数据的一部分([15:0])。
* @note : 该函数用于Set_RDS()函数中, mode = 2的情况
*/
void FM_Get_RDS_DemodulatorMode( TEF6686_GetRDSmode_t mode, u16* receive)
{
Get_Cmd(FM, mode, receive, 3);
}
/**
* @name : Get_Signal_Status
* @brief : 读取有关所接收到的无线电信号的信息。
* @params
* @module : 调制方式(FM/AM)
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、无线电信号信息
* [15] :数据可用标志
* 0 单信号
* 1 调频立体声信号(检测到立体声导频)
* @note : 该函数用于Set_RDS()函数中, mode = 2的情况
*/
void Get_Signal_Status( TEF6686Module_t module, u16* receive)
{
Get_Cmd(module, 133, receive, 1);
}
/**
* @name : Get_Processing_Status
* @brief : 读取有关内部处理状态的信息(弱信号处理)。此信息仅供评估使用。
* @params
* @module : 调制方式(FM/AM)
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、软静音控制状态,范围是0% ~ 1000% (*0.1%)
* 2、高切割控制状态,范围是0% ~ 1000% (*0.1%)
* 3、FM立体声混合控制状态,范围是0% ~ 1000% (*0.1%)
* 4、FM立体声高混合控制状态,范围是0% ~ 1000% (*0.1%)
* @note : 1、0%等于最小控制,由弱信号“_Min”设置所定义。
* 2、100 %等于最大控制,由弱信号“_Max”设置定义。
*/
void Get_Processing_Status( TEF6686Module_t module, u16* receive)
{
Get_Cmd(module, 134, receive, 4);
}
/**
* @name : Get_Operation_Status
* @brief : 此读取命令在“启动状态”和“空闲状态”期间也可用。请读取有关操作状态的信息
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、设备运行状态
* 0 启动状态;没有命令支持
* 1 静止状态
* 2 活动状态;无线电备用
* 3 FM
* 4 AM
* @note :值0表示启动状态(通电、电源下降或参考频率中断后的重置状态)。实际上,所有的get命令都将在启动状态下返回0个值,并且没有命令支持可用。
*/
void Get_Operation_Status( u16* receive)
{
Get_Cmd(APPL, 128, receive, 1);
}
/**
* @name : Get_GPIO_Status
* @brief : 读取有关指定输入引脚的输入状态的信息(见Set_GPIO())。
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、输入状态(分配给输入使用时)
* [0] : GPIO_0的输入状态
* 0 低电平
* 1 高电平
* @note :值0表示启动状态(通电、电源下降或参考频率中断后的重置状态)。实际上,所有的get命令都将在启动状态下返回0个值,并且没有命令支持可用。
*/
void Get_GPIO_Status( u16* receive)
{
Get_Cmd(APPL, 129, receive, 1);
}
/**
* @name : Get_Identification
* @brief : 此读取命令在“空闲状态”期间也可用。请阅读有关设备类型和变体的信息。())。
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、设备类型和变体
* [15:8] : 类型标识符
* 9 TEF668X“Lithio”系列
* [7:0] : 变体标识符
* 14 TEF6686 'Lithio'
* 1 TEF6687 'Lithio FMSI'
* 9 TEF6688 ‘Lithio DR’
* 3 TEF6689 ‘Lithio FMSI DR’
* 2、硬件版本
* [15:8] : 主要数字
* 1
* [7:0] : 小数
* 0
* 3、固件版本
* [15:8] : 主要数字
* 2
* [7:0] : 小数
* 0
* @note :类型编号版本名称“/V102”来源于主要hw_version和主要sw_version编号。
*/
void Get_Identification( u16* receive)
{
Get_Cmd(APPL, 130, receive, 3);
}
/**
* @name : Get_LastWrite
* @brief : 读取上次写入传输的数据内容
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式
* @receive : 缓存区地址
*
* @version : 1.0
* @note : 如第一次写入的参数比第二的参数要长,则第二次读出来的参数仍包含第一次写入的参数
*/
void Get_LastWrite(u16* receive)
{
Get_Cmd(APPL, 131, receive, 9);
}
TEF6686_command.h
#ifndef __TEF6686_COMMAND_H
#define __TEF6686_COMMAND_H
#include "stm32f10x.h"
#include "IIC.h"
#include <stdarg.h>
#include <stdio.h>
#include "TEF6686.h"
typedef enum TEF6686Module
{
FM = 32,
AM = 33,
AUDIO = 48,
APPL = 64
}TEF6686Module_t;
typedef enum TEF6686_TuneMode
{
No_action =0, //不采取行动
Preset, //预设更改,短静音跳转再释放静音
Search, //调到新节目,保持静音,启用广播和FM/AM更改
Afupdate, //调谐到替代频率,存储质量和调回与听不清的静音
Jump, //用听不清的静音调调谐到其他频率
Check, //调谐到其他频率,并保持沉默
Reserved, //保留位
End //释放搜索或检查操作的静音状态(频率不需要且会被忽略)
}TEF6686_TuneMode_t;
typedef enum TEF6686_BandwidthControlMode
{
Fixed = 0, // 在Set_Bandwidth的AM调制下,只能选择该值;在FM_Set_Tune_Options函数中,该值为默认值
AutoBandwidth //自动带宽 在Set_Bandwidth的FM调制下,该值为默认值
}TEF6686_BandwidthControlMode_t;
typedef enum TEF6686_RFAGC_ExtensionMode
{
Integrated = 0, //默认值,仅集成步骤
Extension //来自控制输出的AGC步骤扩展(GPIO特性“AGC”)
}TEF6686_RFAGC_ExtensionMode_t;
typedef enum TEF6686_MphSuppressionMode
{
MultipathSuppression_Disable = 0, //启用多路径抑制
MultipathSuppression_Enable //禁用多路径抑制功能
}TEF6686_MphSuppressionMode_t;
typedef enum TEF6686_ChannelEqualizerMode
{
ChannelEqualizer_Disable = 0, //启用多路径抑制
ChannelEqualizer_Enable //禁用多路径抑制功能
}TEF6686_ChannelEqualizerMode_t;
typedef enum TEF6686_NoiseBlankerMode
{
NoiseBlanker_OFF = 0, //关闭噪声熄灭装置
NoiseBlanker_ON //打开噪声熄灭装置
}TEF6686_NoiseBlankerMode_t;
typedef enum TEF6686_TimerSelectionMode
{
Timer_OFF = 0, //定时器关闭(仅用于评估)
FastTimer, //快速定时器控制
SlowTimer, //慢计时器控制(默认)
DoubleTimer //结合快速和慢计时器控制
}TEF6686_TimerSelectionMode_t;
typedef enum TEF6686_WeakSignalHandleMode
{
WeakSignalHandling_OFF = 0, //关闭
WeakSignalHandling_ON, //开启
}TEF6686_WeakSignalHandleMode_t;
typedef enum TEF6686_StrongSignalHandleMode
{
StrongSignalHandling_OFF = 0, //关闭
StrongSignalHandling_ON, //开启
ForcedMono //强制单声道 仅在FM_Set_Stereo_Min()函数中作为参数使用
}TEF6686_StrongSignalHandleMode_t;
typedef enum TEF6686_HighCutControlMode
{
IIR = 1, //“analog”具有控制频率的一阶低通滤波器(默认)
Deemphasis, //50us/75us消音滤波器的控制频率
FIR //“digital”高阶低通滤波器与控制频率
}TEF6686_HighCutControlMode_t;
typedef enum TEF6686_RDSControlMode
{
RDSControl_OFF = 0, //关闭(禁用RDS功能)
DecoderMode, //解码器模式(默认);从Get_RDS_Status/Get_RDS_Data、FM中输出RDS组数据(块A、B、C、D);= 130/131
DemodulatorMode //解调器模式;从Get_RDS_Status/Get_RDS_Data输出原始解调器数据;FM cmd = 130/131
}TEF6686_RDSControlMode_t;
typedef enum TEF6686_RDSDecoderRestartControl
{
NoControl = 0, //不控制
ManualRestart, //手动重新启动;立即开始寻找新的RDS信号
AutomaticRestart //调优后自动重新启动(默认);在预设、搜索、跳转或检查调优操作后开始寻找新的RDS信号(请参见FM cmd = 1)
}TEF6686_RDSDecoderRestartControl_t;
typedef enum TEF6686_RDSPinControl
{
RDS_NoPinInterface = 0, //无引脚接口(默认)
DataAvailable = 2, //数据可用状态输出;活动低(GPIO功能“DAVN”)
DoubleWire = 4 //传统的双线解调器数据和时钟输出(“RDDA”和“RDCL”)
}TEF6686_RDSPinControl_t;
typedef enum TEF6686_QualityStatusFlag
{
NoFlag = 0, //调优后未设置任何标志(默认值)
SetFlag //当FM AF_Update质量结果可用时,设置标志
}TEF6686_QualityStatusFlag_t;
typedef enum TEF6686_QualityStatusPinControl
{
QualityStatus_NoPinInterface = 0, //无引脚接口(默认)
QualityStatus_Output = 2, //质量状态输出;活动低(“QSI”)
}TEF6686_QualityStatusPinControl_t;
typedef enum TEF6686_AudioOutputUse
{
NormalOperation = 0, //默认
DARC_Output , //DAC_L: FM MPX宽带(DARC)信号/ DAC_R: FM单声道音频
DigitalAudio //L:数字无线电左频道/R:模拟无线电左频道
}TEF6686_AudioOutputUse_t;
typedef enum TEF6686_AudioMuteMode
{
MuteDisabled = 0, //禁用静音
MuteActive //静音起作用(默认)
}TEF6686_AudioMuteMode_t;
typedef enum TEF6686_AudioSourceSelect
{
Radio = 0, //默认(启用和可用时的模拟无线电或数字无线电) 用于AUDIO_Set_Input()
ExternalI2S_Audio = 32, //外部I2S音频源 用于AUDIO_Set_Input()
SineWaveGenerator =240, //正弦波发电机 用于AUDIO_Set_Input() 和 AUDIO_Set_Output_Source()
AnalogRadio = 4, //模拟无线电 用于AUDIO_Set_Output_Source()
I2SDigitalAudioInput_IIS_SD_0 = 32, //I2S数字音频输入IIS_SD_0 用于AUDIO_Set_Output_Source()
AudioProcessor = 224 //音频处理(默认) 用于AUDIO_Set_Output_Source()
}TEF6686_AudioSourceSelect_t;
typedef enum TEF6686_AudioOutput
{
I2SDigitalAudioOutput_IIS_SD_1 = 33, //I2S数字音频输出IIS_SD_1
DAC_L_ROutput = 128 //DAC输出
}TEF6686_AudioOutput_t;
typedef enum TEF6686_DACOutputMode
{
DisableDACOutput = 0, //禁用DAC输出
EnableDACOutput //使能DAC输出
}TEF6686_DACOutputMode_t;
typedef enum TEF6686_DigitalAudioSignal
{
I2SDigitalAudio_Input = 32, //I2S数字音频IIS_SD_0(输入)
I2SDigitalAudio_Output //I2S数字音频IIS_SD_1(输出)
}TEF6686_DigitalAudioSignal_t;
typedef enum TEF6686_DigitalAudioFormat
{
I2S_16bits = 16, //(fIIS_BCK = 32 * samplerate)
I2S_32bits = 32, //(fIIS_BCK = 64 * samplerate) (默认)
lsb_aligned_16bit = 272, //(fIIS_BCK = 64 * samplerate)
lsb_aligned_18bit = 274, //(fIIS_BCK = 64 * samplerate)
lsb_aligned_20bit = 276, //(fIIS_BCK = 64 * samplerate)
lsb_aligned_24bit = 280 //(fIIS_BCK = 64 * samplerate)
}TEF6688_DigitalAudioFormat_t;
typedef enum TEF6686_DigIOMode
{
SlaveMode = 0, //从属模式;由源代码定义的IIS_BCK和IIS_WS输入(默认值)
MasterMode = 256 //主模式;由设备定义的IIS_BCK和IIS_WS输出
}TEF6686_DigIOMode_t;
typedef enum TEF6686_WaveGenMode
{
WaveSignalOff = 0, //默认
Wave1Signal_LChannel, //左通道上的第1波信号
Wave2Signal_RChannel, //右通道上的第2波信号
Wave1Signal_LChannel_Wave2Signal_RChannel, //左通道第1波信号,右通道2波信号
Wave1Signal_LRChannel = 5, //左右通道上的第一波信号
Wave2Signal_LRChannel, //左右通道上的第二波信号
Wave1_Wave2Signal_LRChannel //左右通道上的第1波+第2波信号
}TEF6686_WaveGenMode_t;
typedef enum TEF6688_OperationMode
{
DeviceNormalOperation = 0, //正常运算
RadioStandbyMode //无无线电功能的低功耗模式(默认)
}TEF6688_OperationMode_t;
typedef enum TEF6686_GPIO
{
GPIO0 = 0,
GPIO1 ,
GPIO2
}TEF6686_GPIO_t;
typedef enum TEF6686_GPIOFeature
{
NoUse = 0,
Input,
Output_0,
Output_1,
Output_RDS = 257, //(参见cmd 81 ‘DAVN’)
Output_QSI, //(FM / AM:请参见cmd82‘计时器和AF_Update标志”)
Output_QSI_RDS, //(如果“DAVN”或“QSI”为活动状态,则活动“low”)
Output_RDDA, //(FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
Output_RDCL, //(FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
Output_AGC, //(FM:参见cmd 11 ‘AGC步骤扩展”)
}TEF6686_GPIOFeature_t;
typedef enum TEF6686_ReferenceClockType
{
CrystalOscillator = 0, //晶体振荡器操作(默认值)
ExternalClockInput //外部时钟输入操作
}TEF6686_ReferenceClockType_t;
typedef enum TEF6686_GetQualitymode
{
Get_Quality_Status = 128, //将读取状态和可能的数据,状态和任何冻结数据(例如在AF_Update调优后可用)保持不变。用于状态只读(即状态轮询),但可以在需要时采样数据。
Get_Quality_Data //将读取状态和数据,以及读取后发布的任何冻结数据(例如,在AF_Update调整后可用),允许新的数据更新。旨在用于读取数据,并将状态告知数据内容和有效性
}TEF6686_GetQualitymode_t;
typedef enum TEF6686_GetRDSmode
{
Get_RDS_Status = 130, //将读取状态和可能的数据,状态和任何冻结数据(例如在AF_Update调优后可用)保持不变。用于状态只读(即状态轮询),但可以在需要时采样数据。
Get_RDS_Data //将读取状态和数据,以及读取后发布的任何冻结数据(例如,在AF_Update调整后可用),允许新的数据更新。旨在用于读取数据,并将状态告知数据内容和有效性
}TEF6686_GetRDSmode_t;
void Get_Cmd(uint8_t mdl, uint8_t cmd, u16 *receive, uint8_t len);
void Set_Cmd(uint8_t mdl, uint8_t cmd, int len, ...);
/***********************************************************************************************写指令************************************************************************************************************/
/**
* @name : Tune_To
* @brief : 设置FM的频率
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式
* No_action 不采取行动
* Preset 预设更改,短静音跳转再释放静音
* Search 调到新节目,保持静音,启用广播和FM/AM更改
* Afupdate 调谐到替代频率,存储质量和调回与听不清的静音
* Jump 用听不清的静音调调谐到其他频率
* Check 调谐到其他频率,并保持沉默
* Reserved 保留位
* End 释放搜索或检查操作的静音状态(频率不需要且会被忽略)
* @frequency : 调整的频率,FM的单位是MHZ,范围是65MHZ~108Mhz如选择FM,该参数的值是需要调整的频率乘100;AM的单位是kHZ
*
* @version : 1.0
* @note : 1、在FM模式下,参数frequency的值是目标频率值乘100,例如需要调整到FM 89.3 MHz,则参数frequency需要填8930
* 2、如需调整的模式为End,则参数frequency为任意值即可
*/
void Tune_To(TEF6686Module_t module,TEF6686_TuneMode_t mode,uint16_t frequency);
/**
* @name : FM_Set_Tune_Options
* @brief : 在调优操作期间(FM AF_Update)使用的设置
* @params
* @mode : 在AF_Update期间的中频带宽控制模式
* @bandwidth : AF_Update期间的中频带宽,单位是kHZ
* @MuteTime : AF_Update期间听不到的静音斜率时间,单位是us,1000us是默认时间
* @SampleTime : AF_Update期间的取样时间,单位是us,2000us是默认时间
*
* @version : 1.0
* @note : None
*/
void FM_Set_Tune_Options(TEF6686_BandwidthControlMode_t mode, uint16_t bandwidth, u16 MuteTime, u16 SampleTime);
/**
* @name : Set_Bandwidth
* @brief : 无线电选择性滤波器的固定带宽选择。
* @params
* @module : 调制方式(FM/AM)
* @mode : 带宽控制方式,详情可见枚举TEF6686_BandwidthControlmode_t,如选择AM调制,则该参数的值只能为Fixed
* @bandwidth : 固定中频带宽,单位为kHZ,FM的默认值为 236 kHz,AM的默认值为 4.0 kHz
* @control_sensitivity : FM调制下的自动中频带宽控制灵敏度,单位为%,默认值为100%,如调整方式为AM,则该参数可填任意值
* @low_level_sensitivity : FM调制下的低水平自动中频带宽控制灵敏度,单位为%,默认值为100%,如调整方式为AM,则该参数可填任意值
*
* @version : 1.0
* @note : 1、如调制方式为AM,则参数control_sensitivity和参数low_level_sensitivity的值为任意值
*
*/
void Set_Bandwidth(TEF6686Module_t module,TEF6686_BandwidthControlMode_t mode, uint16_t bandwidth, u16 control_sensitivity, u16 low_level_sensitivity);
/**
* @name : Set_RFAGC
* @brief : 调谐器前端AGC的启动水平。
* @params
* @module : 调制方式(FM/AM)
* @start : RF AGC启动值,单位为dBuV,FM的默认值为92dBuV,AM的默认值为100dBuV
* @extension : RF AGC步长扩展,FM可填Integrated(仅集成步骤,为默认值)和Extension(来自控制输出的AGC步骤扩展(GPIO特性“AGC”),AM调制该参数为任意值
*
* @version : 1.0
* @note : 1、为了防止关键定时并确保适当的FM AGC功能,在使用AM到FM频带变化时适用以下传输要求:
* FM_Set_RFAGC和FM_Set_TuneTo应至少间隔2 ms,FM_Set_TuneTo和FM_Set_RFAGC需要至少11 ms分离。
*
*/
void Set_RFAGC(TEF6686Module_t module,u16 start, TEF6686_RFAGC_ExtensionMode_t mode);
/**
* @name : FM_Set_MphSuppression
* @brief : 使用/禁用”FM多路抑制系统
* @params
* @mode : MultipathSuppression_Enable为启用多路径抑制,MultipathSuppression_Disable为禁用多路径抑制功能,详情可见枚举TEF6686_MphSuppressionMode_t
*
* @version : 1.0
* @note : 建议设置“开启”以提高现场性能
*
*/
void FM_Set_MphSuppression(TEF6686_MphSuppressionMode_t mode);
/**
* @name : FM_Set_ChannelEqualizer
* @brief : 使用/禁用FM通道均衡器
* @params
* @mode : ChannelEqualizer_Enable为启用通道均衡器,ChannelEqualizer_Disable为禁用通道均衡器,详情可见枚举TEF6686_ChannelEqualizerMode_t
*
* @version : 1.0
* @note : 建议设置“开启”以改善现场性能
*
*/
void FM_Set_ChannelEqualizer(TEF6686_ChannelEqualizerMode_t mode);
/**
* @name : FM_Set_NoiseBlanker
* @brief : 噪声空白器选项和灵敏度设置
* @params
* @mode : NoiseBlanker_OFF为关闭噪声熄灭装置,NoiseBlanker_ON为打开噪声熄灭装置(默认打开),详情可见枚举TEF6686_NoiseBlankerMode_t
* @sensitivity : 触发器灵敏度,单位为%,默认值为100%
*
* @version : 1.0
* @note : None
*
*/
void FM_Set_NoiseBlanker(TEF6686_NoiseBlankerMode_t mode, u16 sensitivity);
/**
* @name : FM_Set_Deemphasis
* @brief : 调频消音时间常数的选择
* @params
* @deemphasis : 失重时间常数,单位为us,如为0则关闭或用于评估目的,50us deemphasis为默认值
*
* @version : 1.0
* @note : None
*/
void FM_Set_Deemphasis(uint16_t Deemphasis);
/**
* @name : Set_LevelStep
* @brief : 选择电平校正作为调谐器前端AGC的一个功能
* @params
* @module : 调制方式(FM/AM)
* @step1 : 从0到1的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-2dB,AM的默认值是-1dB
* @step2 : 从1到2的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-3dB,AM的默认值是-2dB
* @step3 : 从2到3的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-4dB,AM的默认值是-3dB
* @step4 : 从3到4的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-5dB,AM的默认值是-4dB
* @step5 : 从4到5的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM的默认值是-6dB,AM的默认值是-5dB
* @step6 : 从5到6的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM和AM的默认值是-6dB
* @step7 : 从6到7(或更高)的AGC步骤的电平偏移量,单位是dB,范围是-6dB~0dB,FM和AM的默认值是-6dB
*
* @version : 1.0
* @note : 1、一般不建议调整LevelStep的默认值,但允许在高信号条件下对弱信号处理进行特定的微调。
*/
void Set_LevelStep(TEF6686Module_t module, short step1, short step2,short step3,short step4,short step5,short step6,short step7);
/**
* @name : Set_LevelOffset
* @brief : 水平校正的选择。
* @params
* @module : 调制方式(FM/AM)
* @offset : 水平偏移量,单位是dB,范围为-48dB ~ +15dB,默认值是0 dB
*
* @version : 1.0
* @note : 电平偏移量可以用作天线噪声电平的总体校正,并包括在弱信号处理和Get_Quality()函数的电平读取值中。
*/
void Set_LevelOffset(TEF6686Module_t module, short offset);
/**
* @name : Set_Softmute_Time
* @brief : 该函数定义电平检测器、FM噪声和多路径检测器的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @module : 调制方式(FM/AM)
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~1200ms,默认值为120ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为500ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,FM的默认值为2ms,AM的默认值是12ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,FM的默认值为2ms,AM的默认值是50ms
*
* @version : 1.0
* @note : 建议FM设置为1 ms快速处理,以提高现场性能
*/
void Set_Softmute_Time(TEF6686Module_t module, short slow_attack, short slow_decay, short fast_attack, short fast_decay);
/**
* @name : Set_Softmute_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时
* @params
* @module : 调制方式(FM/AM)
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅用于评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理电平启动,当液位降到以下时进行控制,单位是dBuV,范围是0dBuV~50dBuV,FM的默认值是15dBuV,AM的默认值是28dBuV
* @slope : 弱信号处理电平范围,单位是dB,控制水平的范围是6dB~30dB,FM的默认值为22dB,AM的默认值是25dB
*
* @version : 1.0
* @note : 建议LW波段的AM设置为34dBuV启动和30dB斜率,以提高现场性能
*/
void Set_Softmute_Level(TEF6686Module_t module, TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope);
/**
* @name : FM_Set_Softmute_Noise
* @brief : 设置噪声,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制
* @start : FM弱信号处理噪声开始,高于噪声时的控制,单位是%,范围是0%~80%,默认值是50%
* @slope : FM弱信号处理噪声范围,单位是%,控制范围是10%~100%,默认值为100%
*
* @version : 1.0
* @note : None
*/
void FM_Set_Softmute_Noise(TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope);
/**
* @name : FM_Set_Softmute_Mph
* @brief : 设置多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制
* @start : FM弱信号处理多路启动,高于mph时的控制,单位是%,范围是0%~80%,默认值是50%
* @slope : FM弱信号处理多路径范围,单位是%,控制范围是10%~100%,默认值为100%
*
* @version : 1.0
* @note : None
*/
void FM_Set_Softmute_Mph(TEF6686_TimerSelectionMode_t mode, u16 start, u16 slope);
/**
* @name : Set_Softmute_Max
* @brief : 启用并定义最大软衰减量(在信号差条件下实现)
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_Softmute_WeakSignalHandleMode_t
* WeakSignalHandle_ON 关闭(仅供评估)
* WeakSignalHandle_OFF 开启;由限制参数定义的最大动态控制(默认值)
* @limit : 软静音动态衰减极限,软静音最大衰减,单位是dB,范围是0dB~40dB,FM的默认值是20dB,AM的默认值是25dB
*
* @version : 1.0
* @note : 建议LW波段的AM设置为33 dB限制
*/
void Set_Softmute_Max(TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit);
/**
* @name : Set_Highcut_Time
* @brief : 定义电平检测器、FM噪声和多路径检测器的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @module : 调制方式(FM/AM)
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为500ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为2000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,FM的默认值为2ms,AM的默认值是12ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,FM的默认值为2ms,AM的默认值是50ms
*
* @version : 1.0
* @note : 建议的FM设置为200 ms慢攻击,1 ms快速攻击和8 ms快速衰减,以提高现场性能。
*/
void Set_Highcut_Time(TEF6686Module_t module, u16 slow_attack, u16 slow_decay,u16 fast_attack, u16 fast_decay);
/**
* @name : Set_Highcut_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @module : 调制方式(FM/AM)
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* OFF 关闭(默认)
* ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为25%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 13%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是50%(从最小控制限制到最大限制的线性控制范围的百分比)
*
* @version : 1.0
* @note : None
*/
void Set_Highcut_Mod(TEF6686Module_t module, TEF6686_WeakSignalHandleMode_t mode, u16 start,u16 slope, u16 shift);
/**
* @name : Set_Highcut_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时
* @params
* @module : 调制方式(FM/AM)
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(默认)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(AM默认)
* DoubleTimer 结合快速和慢计时器控制(FM默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是20 dBuV ~ 60 dBuV,FM默认值为36dBuV,AM默认值为40dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,FM默认值为30dB,AM默认值为20dB
*
* @version : 1.0
* @note : 建议MW和SW波段的AM设置为47dBuV启动,以提高现场性能。建议AM LW波段为52dBuV启动。
*/
void Set_Highcut_Level(TEF6686Module_t module, TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_Highcut_Noise
* @brief : 设置噪声,并实现慢速和快速定时(仅限FM)
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为36%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是30%
*
* @version : 1.0
* @note : 建议采用“双定时器”模式,15%的启动和20%的斜率来提高现场性能。
*/
void FM_Set_Highcut_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_Highcut_Mph
* @brief : 设置多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制(默认)
* DoubleTimer 结合快速和慢计时器控制
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为36%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是30%
*
* @version : 1.0
* @note : 建议采用“双定时器”模式,12%的启动和16%的斜率来提高现场性能。
*/
void FM_Set_Highcut_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : Set_Highcut_Min
* @brief : 可选地定义最小高压衰减量(在良好信号条件下实现)。
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭,仅供评估
* WeakSignalHandling_ON 打开,按限制参数设置的最大动态控制值(默认值)
* @limit : 最高衰减极限,单位为kHZ
* FM 高切角频率,最大衰减频率为3dB,默认值为4kHZ
* “IIR”筛选器(选项“1”(默认值)),范围为1.5kHz ~ 7kHz
* ‘deemphasis’模式(选项“2”),范围为0.7kHz ~ 3kHz
* “FIR”高切过滤器(选项“3”),范围为2.7kHz ~ 7kHz
* AM 高速切割最大值-3 dB,范围是1.35 kHZ ~ 7 kHz,默认值为1.8kHZ
*
* @version : 1.0
* @note : 1、对于FM,不同的极限范围适用于FM Set_Highcut_Options(cmd = 59)提供的不同的高速切割控制特性。
* 2、建议的FM设置为2.4 kHz的限制,以改善“IIR”滤波器场性能
*/
void Set_Highcut_Max( TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit);
/**
* @name : Set_Highcut_Min
* @brief : 可选地定义最小高压衰减量(在良好信号条件下实现)。
* @params
* @module : 调制方式(FM/AM)
* @mode : 强信号处理 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;不限制高音频带宽(FM默认值)
* StrongSignalHandling_ON 开启;由限制参数设置的最小控制限制(AM默认值)
* @limit : 高速固定衰减极限,单位为kHZ
* FM 最小衰减3dB默认值为10kHZ
* “IIR”筛选器(选项“1”(默认值)),范围为2.7kHz ~ 15kHz
* ‘deemphasis’模式(选项“2”),范围为1.5kHz ~ 3.18kHz
* “FIR”高切过滤器(选项“3”),范围为2.7kHz ~ 15kHz
* AM 高速切割最大值-3 dB,范围是2.7kHz ~ 15kHz,默认值为6kHZ
*
* @version : 1.0
* @note : 1、对于Set_Highcut_Options()函数模式=2的特征“弱化”,则忽略Set_Deemphasis()函数设置,由FM_Set_Highcut_Min()函数参数模式=1定义50us或7us的弱化,并进行限制。
* 2、对于一个正常的控制行为,Set_Highcut_Min()函数总是应该设置一个比Set_Highcut_Max()函数更弱的信号处理限制(即一个更高的频率)。
*/
void Set_Highcut_Min( TEF6686Module_t module,TEF6686_StrongSignalHandleMode_t mode, u16 limit);
/**
* @name : Set_Lowcut_Max
* @brief : 启用并定义最大动态低割衰减,
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeaksSignalHandling_OFF 关闭;
* WeakSignalHandling_ON 开启;由极限参数定义的最大动态控制(默认值)
* @limit : 低切动态衰减极限,最大减量的衰减,范围是30HZ ~ 500Hz单位为HZ,默认值为120 Hz,
*
* @version : 1.0
* @note : 建议F频设置为100 Hz限制,以改善现场性能。
*/
void Set_Lowcut_Max( TEF6686Module_t module,TEF6686_WeakSignalHandleMode_t mode, u16 limit);
/**
* @name : Set_Lowcut_Min
* @brief : 可选择地定义了低信号频率的最小衰减。
* @params
* @module : 调制方式(FM/AM)
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;不限制低音频带宽(FM默认值)
* StrongSignalHandling_ON 开启;由限制参数设置的最小控制限制(AM默认值)
* @limit : 低切固定衰减极限,单位为HZ,范围是10HZ ~ 200Hz,默认值为20 Hz,
*
* @version : 1.0
* @note : 对于一个正常的控制行为,Set_Lowcut_Min()总是应该设置一个比Set_Lowcut_Max()更弱的信号处理限制(即一个较低的频率)。
*/
void Set_Lowcut_Min( TEF6686Module_t module,TEF6686_StrongSignalHandleMode_t mode, u16 limit);
/**
* @name : FM_Set_Highcut_Options
* @brief : 允许选择三个不同的高速控制特性(仅FM)
* @params
* @mode : FM高速切割控制特性 详情可见枚举TEF6686_HighCutControlMode_t
* IIR “analog”具有控制频率的一阶低通滤波器(默认)
* Deemphasis 50us/75us消音滤波器的控制频率
* FIR “digital”高阶低通滤波器与控制频率
*
* @version : 1.0
* @note : 1、不同的FM高频控制特性可用于选择声音的味道。
* 2、除了选项选择的高压过滤器类型,适当的值应该写入FM_Set_Highcut_Min()和FM_Set_Highcut_Max()。
* 3、在“deemphasis”特性的情况下,FM_Set_Deemphasis()设置将被忽略,而50us的选择或75us的取消强调则由FM_Set_Highcut_Min()来定义。
*/
void FM_Set_Highcut_Options(TEF6686_HighCutControlMode_t mode);
/**
* @name : FM_Set_Stereo_Time
* @brief : 定义了电平检测器、噪声和多路检测器激活的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项
* @params
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为1000s
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为4000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms
*
* @version : 1.0
* @note : 建议采用200 ms慢攻击和2 ms快速攻击,以提高现场性能。
*/
void FM_Set_Stereo_Time(u16 slow_attack, u16 slow_decay, u16 fast_attack, u16 fast_decay);
/**
* @name : FM_Set_Stereo_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭(默认)
* WeakSignalHandling_ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为21%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 9%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是50%(“最低限制”线性控制范围的百分比)
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Mod(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope, u16 shift);
/**
* @name : FM_Set_Stereo_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是30 dBuV ~ 60 dBuV,默认值为46dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,默认值为24dB
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Level(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope);
/**
* @name : FM_Set_Stereo_Noise
* @brief : 设置噪声,并实现慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为24%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是20%
*
* @version : 1.0
* @note : 建议用12%的开始和16%的斜率来提高田间性能。。
*/
void FM_Set_Stereo_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_Stereo_Mph
* @brief : 设置立体声的多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为24%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是20%
*
* @version : 1.0
* @note : 建议用10%的开始和15%的斜率来提高现场性能
*/
void FM_Set_Stereo_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_Stereo_Max
* @brief : 允许禁用动态立体控制。
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;(仅供评估)
* WeakSignalHandling_ON 开启;最大动态控制为0 dB通道秒,即单声道(默认)
*
* @version : 1.0
* @note : _Max模式“off”不适合禁用FMSI操作中可能需要的立体声处理。应该使用在_Mod、_Level、_Usn和_Mph上设置“off”。
*/
void FM_Set_Stereo_Max(TEF6686_WeakSignalHandleMode_t mode);
/**
* @name : FM_Set_Stereo_Min
* @brief : 可选地定义最小量的立体声衰减(在良好的信号条件下实现)
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;通道分离不受限制(默认值)
* StrongSignalHandling_ON 开启;由极限参数设定的最小控制极限
* ForcedMono 强制单声道
* @limit : 立体声固定衰减极限,立体声最小通道分离,单位为dB,范围是6dB ~ 40dB,默认值为40 dB,
*
* @version : 1.0
* @note : None
*/
void FM_Set_Stereo_Min(TEF6686_StrongSignalHandleMode_t mode, u16 limit);
/**
* @name : FM_Set_StHiBlend_Time
* @brief : FM StHiBlend弱信号处理的时间和质量灵敏度设置。定义了电平检测器、噪声和多路检测器激活的弱信号处理响应时间。双定时器功能的响应时间可以快速和缓慢,有级别、噪音和mph命令的启用选项。
* @params
* @slow_attack : 弱信号的缓慢处理时间,单位是ms,范围是60ms~2000ms,默认值为500ms
* @slow_decay : 弱信号处理的缓慢衰减时间,单位是ms,范围是120ms~12500ms,默认值为2000ms
* @fast_attack : 弱信号的快速处理时间,单位是ms,范围是1ms~120ms,默认值是2ms
* @fast_decay : 弱信号处理的快速衰减时间,单位是ms,范围是2ms~500ms,默认值是2ms
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Time(u16 slow_attack, u16 slow_decay, u16 fast_attack, u16 fast_decay);
/**
* @name : FM_Set_StHiBlend_Mod
* @brief : 启用调制依赖性并设置灵敏度
* @params
* @mode : 与调制相关的弱信号处理 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭(默认)
* WeakSignalHandling_ON 打开(独立调制定时器)
* @start : 弱信号处理调制启动,当调制低于该值时控制,单位是%,范围是10% ~ 100%,默认值为24%(注:对于FM频段,100%调制等于75 kHz偏差)
* @slope : 弱信号处理调制范围,控制调制范围,单位是%,范围是 3% ~ 100%,默认值是 12%
* @shift : 弱信号处理控制换挡,最大弱信号控制位移,单位是%,范围是 5% ~ 100%,默认值是67%(控制范围从最小限制到最大限制的百分比)
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Mod(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope, u16 shift);
/**
* @name : FM_Set_Stereo_Level
* @brief : 设置水平灵敏度,并启用慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭(仅供评估)
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当电平低于该参数时进行控制,单位是dBuV,范围是30 dBuV ~ 66 dBuV,默认值为60dBuV
* @slope : 弱信号处理电平范围,控制水平范围超过该参数,单位是dB,范围是 6 dB ~ 30 dB,默认值为24dB
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Level(TEF6686_WeakSignalHandleMode_t mode,u16 start, u16 slope);
/**
* @name : FM_Set_StHiBlend_Noise
* @brief : 设置噪声,并实现慢速和快速定时。
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理调制启动,当噪声高于该值时控制,单位是%,范围是0% ~ 80%,默认值为16%
* @slope : FM弱信号处理噪声范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是14%
*
* @version : 1.0
* @note : 建议从8%开始,以提高现场性能。。
*/
void FM_Set_StHiBlend_Noise( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_StHiBlend_Mph
* @brief : 设置立体声的多路径灵敏度,并实现慢速和快速定时
* @params
* @mode : 定时器选择 详情可见枚举TEF6686_TimerSelectionMode_t
* Timer_OFF 定时器关闭
* FastTimer 快速定时器控制
* SlowTimer 慢计时器控制
* DoubleTimer 结合快速和慢计时器控制(默认)
* @start : 弱信号处理多路启动,当mph高于该参数时进行控制,单位是%,范围是0% ~ 80%,默认值为16%
* @slope : FM弱信号处理多路径范围,最大弱信号控制位移,单位是%,范围是 10% ~ 100%,默认值是14%
*
* @version : 1.0
* @note : 建议从8%开始,以提高现场性能。
*/
void FM_Set_StHiBlend_Mph( TEF6686_TimerSelectionMode_t mode, u16 start,u16 slope);
/**
* @name : FM_Set_StHiBlend_Max
* @brief : 启用并定义StHiBlend衰减的最大量(在非常差的信号条件下实现)。
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;(仅供评估)
* WeakSignalHandling_ON 开启;由限制参数定义的最大动态控制(默认值)
* @limit : 静态混合器的动态衰减极限,单位为kHZ,范围是2.7kHZ ~ 7kHz,默认值为4kHz,
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Max(TEF6686_WeakSignalHandleMode_t mode, u16 limit);
/**
* @name : FM_Set_StHiBlend_Max
* @brief : 启用并定义StHiBlend衰减的最大量(在非常差的信号条件下实现)。
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_WeakSignalHandleMode_t
* WeakSignalHandling_OFF 关闭;(仅供评估)
* WeakSignalHandling_ON 开启;由限制参数定义的最大动态控制(默认值)
* @limit : 静态混合器的动态衰减极限,单位为kHZ,范围是2.7kHZ ~ 7kHz,默认值为4kHz,
*
* @version : 1.0
* @note : None
*/
void FM_Set_StHiBlend_Max(TEF6686_WeakSignalHandleMode_t mode, u16 limit);
/**
* @name : FM_Set_StHiBlend_Min
* @brief : 可选地定义StHiBlend衰减量(在良好的信号条件下实现))
* @params
* @mode : 弱信号处理(动态控制) 详情可见枚举TEF6686_StrongSignalHandleMode_t
* StrongSignalHandling_OFF 关闭;通道分离bw不受限制(默认值)
* StrongSignalHandling_ON 开启;由极限参数设定的最小控制限值
* @limit : 混合固定衰减极限,单位为kHZ,范围是3 kHz ~ 15 kHz
*
* @version : 1.0
* @note : 对于一个正常的控制行为,Set_StHiBlend_Min()总是应该设置一个比Set_StHiBlend_Max()更弱的信号处理限制(即一个更高的频率)。
*/
void FM_Set_StHiBlend_Min(TEF6686_StrongSignalHandleMode_t mode, u16 limit);
/**
* @name : Set_Scaler
* @brief : 在FM和AM模拟无线电声音之间的声音振幅的微调。
* @params
* @module : 调制方式(FM/AM)
* @gain : 通道增益,模拟无线电信号增益,单位是dB,范围是= -12 … +6 dB,默认是为0dB
*
* @version : 1.0
* @note : 关于FM和AM数字无线电声音振幅的微调,见Set_DR_Blend()
*/
void Set_Scaler(TEF6686Module_t module, u16 gain);
/**
* @name : FM_Set_RDS
* @brief : 调频无线电数据系统解调器和解码器系统的控制。
* @params
* @mode : RDS操作控制 详情可见TEF6686_RDSControlMode_t
* RDSControl_OFF 关闭(禁用RDS功能)
* DecoderMode 解码器模式(默认);从Get_RDS_Status/Get_RDS_Data、FM中输出RDS组数据(块A、B、C、D);= 130/131
* DemodulatorMode 解调器模式;从Get_RDS_Status/Get_RDS_Data输出原始解调器数据;FM cmd = 130/131
* @restart : RDS解码器重新启动 详情可见TEF6686_RDSDecoderRestartControl_t
* NoControl 不控制
* ManualRestart 手动重新启动;立即开始寻找新的RDS信号
* AutomaticRestart 调优后自动重新启动(默认);在预设、搜索、跳转或检查调优操作后开始寻找新的RDS信号(请参见FM cmd = 1)
* @interface : RDS引脚信号功能 详情可见TEF6686_RDSPinControl_t
* RDS_NoPinInterface 无引脚接口(默认)
* DataAvailable 数据可用状态输出;活动低(GPIO功能“DAVN”)
* DoubleWire 传统的双线解调器数据和时钟输出(“RDDA”和“RDCL”)
*
* @version : 1.0
* @note : 1、RDS ‘DAVN’信号(接口= 2)可以在任何可用的GPIO引脚上输出。为了接收原始解调器数据,建议使用“解调器模式”(模式= 2),2线输出选项(接口= 4)仅用于传统使用,不建议用于新的设计。
* 2、对于引脚信号,需要进行GPIO引脚分配;请参见Set_GPIO()。
*/
void FM_Set_RDS(TEF6686_RDSControlMode_t mode, TEF6686_RDSDecoderRestartControl_t restart, TEF6686_RDSPinControl_t interface);
/**
* @name : Set_QualityStatus
* @brief : 启用并定义质量检测器状态标志的中断使用或状态引脚输出
* @params
* @module : 调制方式(FM/AM)
* @mode : 调优准备就绪后的质量状态标志 详情可见TEF6686_QualityStatusFlag_t
* NoFlag 调优后未设置任何标志(默认值)
* SetFlag 当FM AF_Update质量结果可用时,设置标志
* @time : 设置标志在该时间后,调整准备好,单位是ms,范围是1ms~32ms
* 该参数只有参数mode选择SetFlag时生效,如为NoFlag,则该参数为任意值
* @interface : 质量状态引脚信号功能 详情可见TEF6686_QualityStatusPinControl_t
* QualityStatus_NoPinInterface 无引脚接口(默认)
* QualityStatus_Output 质量状态输出;活动低(“QSI”)
*
* @version : 1.0
* @note : 对于引脚信号,需要进行GPIO引脚分配;请参见APPL cmd 3 Set_GPIO()。注意:模式参数计时器的设置是四舍五入到1 ms的步长
*/
void Set_QualityStatus(TEF6686Module_t module, TEF6686_QualityStatusFlag_t mode, u16 time, TEF6686_QualityStatusPinControl_t interface);
/**
* @name : Set_Specials
* @brief : 用于评估和扩展应用程序使用的特殊无线电选项。
* @params
* @module : 调制方式(FM/AM)
* @ana_out : 音频输出使用 详情可见TEF6686_AudioOutputUse_t
* NormalOperation 默认
* DARC_Output DAC_L: FM MPX宽带(DARC)信号/ DAC_R: FM单声道音频
* DigitalAudio L:数字无线电左频道/R:模拟无线电左频道
*
* @version : 1.0
* @note : 1、设置ana_out = 1作用于DAC输出,并且仅可用于FM。FM立体声信号仍然可从数字音频I2S输出(IIS_SD_1)
* 2、设置ana_out = 2同时作用于DAC和数字音频I2S输出。DAC源选择或I2S输出源选择覆盖此数字无线电测试选项。
* 3、设置ana_out = 2需要一个音频输入选择的“无线电”,并且必须禁用数字无线电(或处于非活动状态的混合信号)。数字无线电增益比例不包括在内。此行为等同于设备版本V101。
*/
void Set_Specials(TEF6686Module_t module, TEF6686_AudioOutputUse_t ana_out);
/**
* @name : FM_Set_Bandwidth_Options
* @brief : FM自动带宽无线电选择性滤波器的附加控制选项。
* @params
* @modulation :扩展API: FM自动带宽提升上的调制,将带宽提高到最大带宽的调制指数,单位是%,范围位66% ~ 133%,默认值是95%
*
* @version : 1.0
* @note : 1、一般不建议调整默认值,但允许在特定条件下进行特定的性能微调。特性创新可能会导致扩展的API默认值和控制随着固件的发布而改变
* 2、有关主FM自动带宽控制和其他控制选项,请参见Set_Bandwidth().
*/
void FM_Set_Bandwidth_Options( u16 modulation);
/**
* @name : AUDIO_Set_Volume
* @brief : 音频音量的设置。
* @params
* @volume :音频音量,单位是dB,范围为 -60dB ~ +24dB,默认值是0dB
*
* @version : 1.0
* @note : 1、根据源信号,超过0 dB的音量设置可能会引入信号裁剪
* 2、TEF668X体积设置到体积= -40 dB在1 dB内是准确的,较低的体积显示出越来越大的不准确性和步长。设置-60 dB和较低的设置为静音
*/
void AUDIO_Set_Volume( u16 volume);
/**
* @name : AUDIO_Set_Mute
* @brief : 启用和禁用音频静音。
* @params
* @mode :音频静音 详情可见枚举TEF6686_AudioMuteMode_t
* MuteDisabled 禁用静音,允许音频输出
* MuteActive 静音起作用(默认)
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Mute( TEF6686_AudioMuteMode_t mode);
/**
* @name : AUDIO_Set_Input
* @brief : 输入选择;选择音频输入源信号。
* @params
* @source :音频源选择 详情可见枚举TEF6686_AudioSourceSelect_t
* Radio 默认(启用和可用时的模拟无线电或数字无线电)
* ExternalI2S_Audio 外部I2S音频源
* SineWaveGenerator 正弦波发电机
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Input( TEF6686_AudioSourceSelect_t mode);
/**
* @name : AUDIO_Set_Output_Source
* @brief : 输出选择;对音频输出的源信号的选择。
* @params
* @signal :音频输出 详情可见枚举TEF6686_AudioSourceSelect_t
* I2SDigitalAudioOutput_IIS_SD_1 I2S数字音频输出IIS_SD_1
* DAC_L_ROutput DAC输出
* @source :音频源选择 详情可见枚举TEF6686_AudioSourceSelect_t
* AnalogRadio 模拟无线电
* I2SDigitalAudioInput_IIS_SD_0 I2S数字音频输入IIS_SD_0
* AudioProcessor 音频处理(默认)
* SineWaveGenerator 正弦波发电机
*
* @version : 1.0
* @note : 1、默认情况下,DAC输出和IIS_SD_1输出信号都来自音频处理器,即信号由AUDIO_Set_Input、_Set_Volume和_Set_Mutt定义。Set_Output_Source允许替代输出信号选择,直接连接到一个可用的源信号而无需处理。
* 2、命令集_Output_源需要一个信号定义,即包括索引=1
*/
void AUDIO_Set_Output_Source( TEF6686_AudioOutput_t signal, TEF6686_AudioSourceSelect_t source);
/**
* @name : AUDIO_Set_Ana_Out
* @brief : 模拟输出信号的定义。
* @params
* @mode :输出方式 详情可见枚举TEF6686_DACOutputMode_t
* DisableDACOutput 禁用DAC输出
* EnableDACOutput 使能DAC输出
*
* @version : 1.0
* @note : None
*/
void AUDIO_Set_Ana_Out( TEF6686_DACOutputMode_t mode);
/**
* @name : AUDIO_Set_Dig_IO
* @brief : 数字输入和输出音频信号的定义。
* @params
* @signal :输出方式 详情可见枚举TEF6686_DigitalAudioSignal_t
* I2SDigitalAudio_Input I2S数字音频IIS_SD_0(输入)
* I2SDigitalAudio_Output I2S数字音频IIS_SD_1(输出)
* @format :数字音频格式选择 详情可见枚举TEF6688_DigitalAudioFormat_t
* I2S_16bits (fIIS_BCK = 32 * samplerate)
* I2S_32bits (fIIS_BCK = 64 * samplerate) (默认)
* lsb_aligned_16bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_18bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_20bit (fIIS_BCK = 64 * samplerate)
* lsb_aligned_24bit (fIIS_BCK = 64 * samplerate)
* @operation : 操作方式
* SlaveMode 从属模式;由源代码定义的IIS_BCK和IIS_WS输入(默认值)
* MasterMode 主模式;由设备定义的IIS_BCK和IIS_WS输出
* @samplerate : 音频采样率选择
* 32.0 32kHz
* 44.1 44.1kHz (默认)
* 48.0 48kHz
*
*
* @version : 1.0
* @note : 1、命令Set_Dig_IO需要一个信号定义,即包括索引=1。
* 2、一个TEF668X数字音频信号总是使用16个有源(msb)位。
* 3、在某些情况下,“操作”或“采样器”的设置不是可以独立选择的,例如,因为共享的BCK和WS引脚。在这种情况下,控制设置是基于枚举值最小的信号
* 4、fIIS_BCK表示在主模式操作时的输出频率和对lsb对准的格式化输出信号的从模式操作所需的输入频率。输入信号和I2S格式的输出信号的从属模式操作也允许其他比特时钟速率(16……32)*2*采样率。
*/
void AUDIO_Set_Dig_IO(TEF6686_DigitalAudioSignal_t signal, TEF6688_DigitalAudioFormat_t format, TEF6686_DigIOMode_t operation, u16 samplerate);
/**
* @name : AUDIO_Set_Input_Scaler
* @brief : 外部源声振幅的微调。对于每个可用的外部源,可以编程设置一个单独的声音振幅校正,以便在选择音频输入时使用( Set_Input())。
* @params
* @gain :外部源信道增益,单位是dB,范围是-12dB~6dB,默认值是0dB
*
* @version : 1.0
* @note : 1、命令Set_Input_Scaler需要一个源定义,即包括索引=1。
* 2、来自IIS_SD_0的数字无线电信号的缩放由无线电控制FM / AM Set_DR_Blend()
*/
void AUDIO_Set_Input_Scaler( u16 gain);
/**
* @name : AUDIO_Set_WaveGen
* @brief : 内部正弦波和偏移发生器信号的定义。波发生器可以选择作为音频源(见Set_Input()),并且仅用于测试目的。
* @params
* @mode :模式 详情可见枚举TEF6686_WaveGenMode_t
* WaveSignalOff 默认
* Wave1Signal_LChannel 左通道上的第1波信号
* Wave2Signal_RChannel 右通道上的第2波信号
* Wave1Signal_LChannel_Wave2Signal_RChannel 左通道第1波信号,右通道2波信号
* Wave1Signal_LRChannel 左右通道上的第一波信号
* Wave2Signal_LRChannel 左右通道上的第二波信号
* Wave1_Wave2Signal_LRChannel 左右通道上的第1波+第2波信号
* @offset :直流偏移,单位为LSB,范围是-32768LSB ~ +32767LSB,默认值为0LSB(无偏移)
* @amplitude1 : 波1振幅,单位为dB,范围是 -30dB ~ 0dB,默认值为-20dB
* @frequency1 : 波1频率,单位为HZ,范围是 10HZ ~ 20HZ,默认值为400Hz
* @amplitude2 : 波2振幅,单位为dB,范围是 -30dB ~ 0dB,默认值为-20dB
* @frequency2 : 波2频率,单位为HZ,范围是 10HZ ~ 20HZ,默认值为1000Hz
*
* @version : 1.0
* @note : 1、振幅的参考是数字全标度峰(FSPP);即,0 dB表示无偏移时的最大未失真正弦波信号。
* 2、直流偏移量在左通道和右通道上都可用于所有模式设置。
* 3、对于模式=7,将第1波和第波2的信号加在一起,对于无失真的信号,第波1和第波2的组合振幅不应超过0 dB。
*/
void AUDIO_Set_WaveGen( TEF6686_WaveGenMode_t mode, u16 offset, u16 amplitude1, u16 frequency1, u16 amplitude2, u16 frequency2);
/**
* @name : APPL_Set_OperationMode
* @brief : 设备电源控制。
* @params
* @mode :模式 详情可见枚举TEF6688_OperationMode_t
* DeviceNormalOperation 正常运算
* RadioStandbyMode 无无线电功能的低功耗模式(默认)
*
* @version : 1.0
* @note : 1、FM和AM命令在两种操作模式下都可用,允许在无线电待机模式下进行无线电初始化FM和AM操作。
* 2、“正常操作”将返回到待机前定义的无线电操作(除非在无线电待机模式下进行了其他选择)。或者,预设或搜索的无线电调优操作(见Tune_To())将启用正常操作。
*/
void APPL_Set_OperationMode( TEF6688_OperationMode_t mode);
/**
* @name : APPL_Set_GPIO
* @brief : 定义通用用途和应用销的用途
* @params
* @pin :GPIO引脚 详情可见枚举TEF6686_GPIO_t
* GPIO0
* GPIO1
* GPIO2
* @module : 调制方式(FM/AM)
* @feature : 特征 详情可见枚举TEF6686_GPIOFeature_t
* NoUse
* Input
* Output_0
* Output_1
* Output_RDS ( 参见cmd 81 ‘DAVN’)
* Output_QSI (FM / AM:请参见cmd82‘计时器和AF_Update标志”)
* Output_QSI_RDS (如果“DAVN”或“QSI”为活动状态,则活动“low”)
* Output_RDDA (FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
* Output_RDCL (FM:参见cmd 81 ‘RDDA,RDCL遗留选项”)
* Output_AGC (FM:参见cmd 11 ‘AGC步骤扩展”)
* @version : 1.0
* @note : 1、命令Set_GPIO需要一个GPIO编号定义,即包括索引=1。
* 2、通用输入的使用仅限于GPIO 0。
* 3、FM或AM的模块设置仅对适当的无线电模式是活动的,允许FM和AM的独立特征定义。
* 4、特征信号RDS、QSI和AGC均为“主动低”。
* 5、可以定义和启用指定的功能
*/
void APPL_Set_GPIO( TEF6686_GPIO_t pin, TEF6686Module_t module, TEF6686_GPIOFeature_t feature);
/**
* @name : APPL_Set_ReferenceClock
* @brief : 设置参考时钟。
* @params
* @frequency :时钟频率,单位是HZ,默认值是9216000HZ
* @type : 时钟类型 详情可见枚举TEF6686_ReferenceClockType_t
* CrystalOscillator 晶体振荡器操作(默认值)
* ExternalClockInput 外部时钟输入操作
* @version : 1.0
* @note : 1、此命令仅在“空闲状态”期间可用。
* 2、几种不同的频率可以用于晶体振荡器或外部参考时钟。为了正常工作,必须在激活设备之前输入参考频率,因此,该命令仅在“空闲”状态下可用。
* 3、TEF668X支持的频率:4.000 MHz、9.216 MHz、12.000 MHz、55.46667 MHz。
* 4、数字无线电使用的支持频率分别为9.216、12.000和55.46667 MHz。
* 5、55.46667 MHz仅用于时钟输入使用,不支持作为晶体频率
* 6、参考时钟频率设置的准确性不是关键的,近似值被转换为实际的支持频率。
*/
void APPL_Set_ReferenceClock(u32 frequency, TEF6686_ReferenceClockType_t type);
/**
* @name : APPL_Activate
* @brief : 从“空闲状态”转到“活动状态”。
* @params : None
* @version : 1.0
* @note : 1、此命令仅在“空闲状态”期间可用。
* 2、定义参考时钟频率后,必须将设备置于活动状态,以便进一步初始化和控制。激活后,设备将处于“无线电备用”操作模式。
*/
void APPL_Activate(void);
/***********************************************************************************************读指令************************************************************************************************************/
/**
* @name : Get_Quality
* @brief : 读取调谐器接收质量信息的状态
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式 详细可见TEF6686_GetQualitymode
* Get_Status 将读取状态和可能的数据,状态和任何冻结数据(例如在AF_Update调优后可用)保持不变。Get_质量状态是用于状态只读(即状态轮询),但可以在需要时采样数据。
* Get_Data 将读取状态和数据,以及读取后发布的任何冻结数据(例如,在AF_Update调整后可用),允许新的数据更新。获取_质量_数据旨在用于读取数据,并将状态告知数据内容和有效性
* @receive : 缓存区地址
*
* @version : 1.0
* @note : 读取的数据
* 1、质量检测器状态
* [15] :AF_update标志
* 0 具有时间戳的连续质量数据
* 1 AF_Update采样数据
* [14:10] :保留位
* [9:0] :质量时间戳
* 0 正在进行中,没有可用的质量数据
* !0 单位是ms,范围是1ms~320ms(*0.1ms)
* 2、液位检测结果,单位是dBuV,范围是-200dBuV ~ 1200dBuV (*0.1dBuV),输入水平的实际范围和精度受到噪声和agc的限制
* 3、噪声探测器
* FM 超声波噪声检测器,单位是%,范围是0% ~ 1000% (*0.1 %)
* AM 高频噪声检测器,单位是%,范围是0% ~ 50000% (*0.1 %),100%是近似相等的噪声和需要的信号
* 4、FM多径探测器/ AM共通道探测器
* FM “宽带-AM”多路径探测器,单位是%,范围是0% ~ 1000% (*0.1 %)
* AM 共通道检测器
* 0 未检测到共通道
* 1 已检测到的共同通道(基于所选标准)
* 5、射频偏移,单位是kHz,范围是-1200kHz ~ 1200kHz (*0.1 kHz)
* 6、中频带宽
* FM 单位是kHz,范围是560kHz ~ 3110kHz [*0.1 kHz]
* AM 单位是kHz,范围是30kHz ~ 80kHz [*0.1 kHz]
* 7、调制探测器
* FM 范围是0% ~ 1000% [*0.1 %]
* 范围是1000% ~ 2000% [*0.1 %]
* AM 范围是0% ~ 1000% [*0.1 %]
* 范围是1000% ~ 2000% [*0.1 %]
*/
void Get_Quality(TEF6686Module_t module, TEF6686_GetQualitymode_t mode, u16* receive);
/**
* @name : FM_Get_RDS_DemodulatorMode
* @brief : 读取调谐器接收质量信息的状态
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式 详细可见TEF6686_GetRDSmode_t
* Get_RDS_Status 于读取数据库实例的状态
* Get_RDS_Data 不仅返回数据库实例的状态,还返回存储在数据库中的数据。
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、FM RDS接收状态
* [15] :数据可用标志
* 0 没有可用的数据(不完整的组或没有第一个PI)
* 1 RDS组数据或第一个PI数据可用
* [14] :数据丢失标志
* 0 无数据丢失
* 1 以前的数据没有被读取,而是用较新的数据代替
* [13] :数据可用类型
* 0 组数据;连续操作
* 1 第一个PI数据;数据与PI代码后的解码器同步
* [12] :组类型
* 0 类型A;ABCD组(A块中的PI代码)
* 1 类型B;A-B-C‘-D组(具有块A和C’中的PI代码)
* [11:10] :保留位
* [9] :同步状态
* 0 RDS解码器未同步;未找到RDS数据
* 1 RDS解码器已同步;RDS数据接收已激活
* [8:0] : 保留位
* 2、块A的数据
* 3、块B的数据
* 3、块C的数据
* 3、块D的数据
* 6、错误代码(由解码器确定)
* [15:14] :块A的错误代码
* [13:12] :块B的错误代码
* [11:10] :块C的错误代码
* [9:8] :块D的错误代码
* [7:0] :保留位
* 错误代码
* 0 : 没有错误;块数据与匹配的数据和综合征
* 1 : 误差小;可能检测到1位接收错误;数据被修正
* 2 : 误差大,检测到理论可修正误差,数据被修正
* 3 : 不可纠正的错误;无法纠正数据
* @note : None
*/
void FM_Get_RDS_DemodulatorMode( TEF6686_GetRDSmode_t mode, u16* receive);
/**
* @name : FM_Get_RDS_DecoderMode
* @brief : 读取调谐器接收质量信息的状态
* @params
* @mode : 调整的模式 详细可见TEF6686_GetRDSmode_t
* Get_RDS_Status 于读取数据库实例的状态
* Get_RDS_Data 不仅返回数据库实例的状态,还返回存储在数据库中的数据。
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、FM RDS接收状态
* [15] :数据可用标志
* 0 没有可用的数据(不完整的组或没有第一个PI)
* 1 RDS组数据或第一个PI数据可用
* [14] :数据丢失标志
* 0 无数据丢失
* 1 以前的数据没有被读取,而是用较新的数据代替
* [13] :数据可用类型
* 0 组数据;连续操作
* 1 第一个PI数据;数据与PI代码后的解码器同步
* [12] :组类型
* 0 类型A;ABCD组(A块中的PI代码)
* 1 类型B;A-B-C‘-D组(具有块A和C’中的PI代码)
* [11:10] :保留位
* [9] :同步状态
* 0 RDS解码器未同步;未找到RDS数据
* 1 RDS解码器已同步;RDS数据接收已激活
* [8:0] : 保留位
* 2、块A的数据
* 3、块B的数据
* 3、块C的数据
* 3、块D的数据
* 6、错误代码(由解码器确定)
* [15:14] :块A的错误代码
* [13:12] :块B的错误代码
* [11:10] :块C的错误代码
* [9:8] :块D的错误代码
* [7:0] :保留位
* 错误代码
* 0 : 没有错误;块数据与匹配的数据和综合征
* 1 : 误差小;可能检测到1位接收错误;数据被修正
* 2 : 误差大,检测到理论可修正误差,数据被修正
* 3 : 不可纠正的错误;无法纠正数据
* @note : 该函数用于Set_RDS()函数中, mode = 1的情况
*/
void FM_Get_RDS_DecoderMode( TEF6686_GetRDSmode_t mode, u16* receive);
/**
* @name : FM_Get_RDS_DemodulatorMode
* @brief : 读取调谐器接收质量信息的状态
* @params
* @mode : 调整的模式 详细可见TEF6686_GetRDSmode_t
* Get_Status 于读取数据库实例的状态
* Get_Data 不仅返回数据库实例的状态,还返回存储在数据库中的数据。
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、FM RDS接收状态
* [15] :数据可用标志
* 0 无可用数据
* 1 32位的原始解调器数据可用
* [14] :数据丢失标志
* 0 无数据丢失
* 1 没有读取以前的数据,而是使用较新的数据
* [13:0] :保留位
* 2、32位原始解调器数据的MSB部分([31:16])
* 3、LSB是32位原始解调器数据的一部分([15:0])。
* @note : 该函数用于Set_RDS()函数中, mode = 2的情况
*/
void FM_Get_RDS_DemodulatorMode( TEF6686_GetRDSmode_t mode, u16* receive);
/**
* @name : Get_Signal_Status
* @brief : 读取有关所接收到的无线电信号的信息。
* @params
* @module : 调制方式(FM/AM)
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、无线电信号信息
* [15] :数据可用标志
* 0 单信号
* 1 调频立体声信号(检测到立体声导频)
* @note : 该函数用于Set_RDS()函数中, mode = 2的情况
*/
void Get_Signal_Status( TEF6686Module_t module, u16* receive);
/**
* @name : Get_Operation_Status
* @brief : 此读取命令在“启动状态”和“空闲状态”期间也可用。请读取有关操作状态的信息
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、设备运行状态
* 0 启动状态;没有命令支持
* 1 静止状态
* 2 活动状态;无线电备用
* 3 FM
* 4 AM
* @note :值0表示启动状态(通电、电源下降或参考频率中断后的重置状态)。实际上,所有的get命令都将在启动状态下返回0个值,并且没有命令支持可用。
*/
void Get_Operation_Status( u16* receive);
/**
* @name : Get_GPIO_Status
* @brief : 读取有关指定输入引脚的输入状态的信息(见Set_GPIO())。
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、输入状态(分配给输入使用时)
* [0] : GPIO_0的输入状态
* 0 低电平
* 1 高电平
* @note :值0表示启动状态(通电、电源下降或参考频率中断后的重置状态)。实际上,所有的get命令都将在启动状态下返回0个值,并且没有命令支持可用。
*/
void Get_GPIO_Status( u16* receive);
/**
* @name : Get_Identification
* @brief : 此读取命令在“空闲状态”期间也可用。请阅读有关设备类型和变体的信息。())。
* @params
* @receive : 缓存区地址
*
* @version : 1.0
* @data : 读取的数据
* 1、设备类型和变体
* [15:8] : 类型标识符
* 9 TEF668X“Lithio”系列
* [7:0] : 变体标识符
* 14 TEF6686 'Lithio'
* 1 TEF6687 'Lithio FMSI'
* 9 TEF6688 ‘Lithio DR’
* 3 TEF6689 ‘Lithio FMSI DR’
* 2、硬件版本
* [15:8] : 主要数字
* 1
* [7:0] : 小数
* 0
* 3、固件版本
* [15:8] : 主要数字
* 2
* [7:0] : 小数
* 0
* @note :类型编号版本名称“/V102”来源于主要hw_version和主要sw_version编号。
*/
void Get_Identification( u16* receive);
/**
* @name : Get_LastWrite
* @brief : 读取上次写入传输的数据内容
* @params
* @module : 调制方式(FM/AM)
* @mode : 调整的模式
* @receive : 缓存区地址
*
* @version : 1.0
* @note : 如第一次写入的参数比第二的参数要长,则第二次读出来的参数仍包含第一次写入的参数
*/
void Get_LastWrite(u16* receive);
#endif
标签:Set,0x00,V102,0xF0,TEF6686,STM32VET6,FM,0x60
From: https://www.cnblogs.com/Dazz24/p/18455798