AtomIC (TEF6606) Software Development Guideline
Version 1.0
Version 1.0 Author Jiajie Wang Date 2007-11-05
Page: 1 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
收音机模块
本说明将介绍收音机除RDS外所有的功能实现,补充说明TEF6606的v1.0版本参考程序。 DEFINE模块
驱动部分TEF6606.H的预设有:
①I2C写tuner时的不同模式,后文将具体介绍写入模式。 ②I2C读入时寄存器地址的偏移量。 ③I2C写入时寄存器地址的偏移量。 功能函数部分:
① 各频段的频率边界,调谐步进。 ② 各频段的搜台停台条件。
③ 各频段的弱信号处理等有关性能的设置。 各函数列表,包括输入输出和简单描述 驱动部分:
表1 Tuner的驱动函数 函数名
简介
寄存器
I2C地址:0xC0
读取数据长度num = 5 I2C地址:0xC0 子地址类型 I2c_subtype = 1
子地址 sub_adr 由调谐模式和寄存器(0x00 ~ 0x0F)组成。
Void readTunerRegister (uint8 从I2C地址为i2c_adr的器件中读取i2c_adr, uin8 *read_buffer, uint32 num个数据,存入到read_buffer所指num) 的指针或数组中。 Void writeTunerRegister (uint8 向I2C地址为i2c_adr的器件,子地i2c_adr, uint8 i2c_subtype, uint32 址类型为i2c_subtype;以子地址sub_adr, uint8 *write_buffer, uint32 sub_adr为初始入口,将write_buffernum) 所指的num个数组元素写入到器件。
Tuner 有关读操作函数
uint8 getLevel (void)
uint8 getIFCounter (uint8 IFCReady)
通过I2C总线从tuner读取当前的信Level: byte 1h
号强度,并返回为8位无符号整形数。 当IFCReady等于TRUE时,表示中频计数器的结果已经就绪,读取计数值并以8位无符号整形数形式返回。 当IFCReady等于FALSE时,表示中频计数器结果还未就绪,返回当前是否就绪的标志位。
读取当前的噪声水平,返回为8位无符号整形数。
读取当前的多径干扰水平,返回为8位无符号整形数。
IFCReady: byte 3h (bit6 and bit7)
IFC result: byte 3h (bit0 ~ bit4)
uint8 getUSN (void) uint8 getWAM (void)
enum STIN getStereoIndicator (void)
USN: byte 2h (bit4 ~ bit7)
WAM: byte 2h (bit0 ~ bit3)
在FM频段下,检测立体声导频信号,STIN: byte 0h (bit4)
Page: 2 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
并判断当前的信号强度是否在弱信号处理中能输出立体声,返回为STIN{MONO,STEREO}形式。 Tuner有关写操作的函数
void setFrequency (enum BAND 设置tuner的调谐频段为band,频率为BAND: byte 0h (bit5 band, uint32 freq, uint8 write_mode) freq千赫兹。调谐模式为write_mode。and bit6)
关于调谐模式,后文会有详细介绍。 FREQ: byte 1h
byte 0h (bit0 ~ bit4) void setMono (uint8 ForceMono)
在FM频段下,设置是否强制单声道输出。ForceMono表示当前的输出状态。
MONO: byte 3h (bit4)
功能函数部分: 表2 Tuner功能函数 函数名
简介
void Ftun_Seek (enum DIRECTION direction, Tuner的调谐操作函数,调谐步进的方向为uint8 ams, uint8 singlestep) DIRECTION{DOWN,UP}。
单步调谐(tune up/down) singlestep = TRUE ams = FALSE
搜台 (seek up/down) singlestep = FALSE Ams = FALSE
自动搜台存台 (AMS) singlestep = FALSE ams = TRUE void Ftun_BandSwitch (void) void Ftun_StereoMonoSwitch (void)
在FM, SW, MW, LW, OIRT之间切换频段。 设置或取消强制单声道音频输出。
void Ftun_SaveCurrentStation (uint32 freq, 将频率为freq千赫兹设置为预存台preset。 enum PRESET preset)
void Ftun_TunetoPreset (enum PRESET preset)enum PRESET Ftun_IsPreset (uint32 freq) uint8 Ftun_CheckLevel (enum BAND band)
将当前频率调谐到预存台preset。 判断频率freq千赫兹是否为预存台。
在搜台程序中,检查信号场强是否达到预设置。
void PresetSort (uint8 count, uint32 将自动搜台后得到的count个有效台(preset_level*preset_level, uint32 *preset_sta) 所指数组)按照信号强度排序,得到信号最强的
预存台,其中预存台数量在头文件中定义。 void Ftun_TunetoFrequency (enum BAND 通过对setFrequency的调用,并做边界判断,调band, uint32 freq, uint8 write_mode) 谐到频段为band,频率为 freq千赫兹,调谐方式
为write_mode。 void Ftun_Init (enum BAND band, uint32 freq)
对tuner做初始化,对所有的16个写寄存器做配置,调整如弱信号处理等参数。关于弱信号处理,在后文有详细介绍。
Page: 3 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
TEF6606的I2C写操作格式: 表3 写入方式下I2C的子地址格式
如表3所示,TEF6606的I2C写入的子地址由两部分组成,一部分是由bit5~bit7所组成的调谐模式,另一部分是要写入的起始寄存器地址,由bit0~bit3所构成的16个寄存器。表6所示为调谐模式的具体说明,红线框中的为调谐函数种所需用到的模式,剩下的模式会在RDS功能中用到。 表4 调谐模式
这四种模式会在不同的操作中分别采用。
Standard: 不涉及频率和频段的操作,如弱信号处理的寄存器配置;强制单声道输出等。 Preset: 单步调谐(tune up/down);更改频段(band);停台。 Search: 搜台(seek up/down);自动搜索存台(AMS)。
Mirror test: 搜台时,测试混频后的镜像抑制,并决定最好的差频方式:外差,内差。 Ftun_BandSwitch 表5 Byte 0H
采用掩码的方式来设置频段,如(byte0h & 0x9F) | BAND[1:0]。
在切换频段的同时,需要将属于该频段范围的频率更新,并对Byte0h 和Byte1h中的频率位进行设置。
Page: 4 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
Ftun_TunetoFrequency 表6 Byte 1H
表7 各频段频率物理值和寄存器设置值的换算关系
通过对Byte 0H和 Byte 1H的设置,可以调谐所有频段的频率值。 函数实现步骤:
1.根据Define的预设值,判断当前频率是否越界,如越界,修正到边界值。 2.选择Preset写入模式,并将I2C写入子地址设置为0x20。
3.设置频率,写入寄存器。调用setFrequency(band,freq,write_mode) 函数,实现方法为:
首先如表7所示,将所需调谐的频率物理值(fRf )换算为符合寄存器格式的13位元的数值(FREQ[12:0])。每个频段的对应关系和调谐最小步进可参考表7。然后将换算好的13位元数值分为两段: ① bit8~bit12连同频段的设置位写入Byte 0H;(如表5) ② bit0~bit7写入Byte 1H(如表6)。 Ftun_Seek
搜台函数是本参考设计tuner模块中,代码量最大的函数。共有三个输入参数,分别是direction, ams, singlestep。本函数共实现三种功能,即单步调台(tune up/down);搜台(seek up/down);自动搜台存储(AMS)。
本函数使用一个全局变量SeekState来贯穿整个搜台程序的状态和进度。以下将就这三种功能的实现做具体介绍,框图中表示的是SeekState的各个状态。 1. 单步调台 函数输入参数:
Direction = DOWN / UP ams = FALSE singlestep = TRUE
Page: 5 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
图1 单步调台程序流程图
IDLE:①调用Ftun_TunetoFrequency函数,调谐到当前频率,writemode为Preset,释放静音;②将系统状态设为IDLE;③SeekState设为CONFIGURE。
CONFIGURE:①初始化频率边界,搜台步进;②清空BUFFER;③根据函数实现功能,设置系统状态,在单步模式下为IDLE。
REQUEST:①根据DIRECTION按照步进增加或减少频率;②频率边界判断。 CHANGE_FREQUENCY:①调用Ftun_TunetoFrequency函数,writemode为Search;②SeekState设为IDLE。
单步调台结束,搜台状态SeekState回到IDLE。
2. 搜台(Seek up/down) 函数输入参数:
Direction = DOWN / UP ams = FALSE
singlestep = FALSE
图2搜台程序流程图
Page: 6 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
IDLE:实现内容和单步调台一样。
CONFIGURE:①和②实现和单步一样;③和单步不同的是,系统状态会设为SEEK。
REQUEST:①和②实现和单步一样;③判断是否已经搜完整个频段而未搜到有效台,如图2所示的虚线A,搜完整个频段后退出搜索状态,复位到IDLE状态。 CHANGE_FREQUENCY:①和单步一样;②SeekState设为WAIT_LEVEL。
WAIT_LEVEL:①设定频段在AM和FM时的定时器预值,即等待时间;②SeekState设为CHECK_LVEL。
CHECK_LEVEL:当预设等待时间到后,①检查LEVEL是否达到搜台条件,如果没有,则如图2中虚线B所示,返回至REQUEST状态,继续下一搜索;②当LEVEL满足条件后,根据用户的设置,可以再检测USN和WAM(如图2中红线所示流程),或者直接进入等待中频计数状态(WAIT_IFC)。
CHECK_USN:检测USN是否达到要求,如否,返回如虚线C所示到REQUEST状态,继续下一搜索。达到要求后,继续去检测WAM(CHECK_WAM)。
CHECK_WAM:检测WAM是否达到要求,如否,返回如虚线D所示到REQUEST状态,继续下一搜索。达到要求后,进入等待中频计数结果状态(WAIT_IFC)。
WAIT_IFC:等待32ms中频计数结果可用时,SeekState设为CHECK_IFC。
CHECK_IFC:检测IFC是否达到要求,如否,返回如虚线E所示到REQUEST状态,继续下一搜索。达到要求后,搜索到有效台,返回IDLE状态。搜台程序结束。
3. 自动搜索存台 函数输入参数:
Direction = DOWN / UP ams = TRUE
singlestep = FALSE
Page: 7 of 8
NXP Semiconductor AtomIC Software Guideline V1.0
图3 自动搜台存储程序流程图
如图3所示,除了增加AMS状态,其他流程基本相同。
CONFIGURE:①和②实现和单步一样;③不同,系统状态设为AMS。
AMS:①将所有满足条件的电台的LEVEL和频率存入BUFFER;②在全频段搜索完成后,将所有在BUFFER中的电台按照LEVEL从高到低选出预存台;③返回SeekState到IDLE,自动搜索存台程序结束。 Ftun_Init
初始化TEF6606的寄存器[Byte 2H ~ Byte FH]。Byte 2H到Byte FH的寄存器设置包括了tuner的调谐属性,弱信号处理等。用户可以自由配置属于不同频段的初始寄存器。 BYTE 2H:AGC启动点设置;LOW/HIGH INJECTION设置。
3H:噪声抑制灵敏度;立体声设置;去加重时间常数设置;音频输出高低切换。
4H~6H:弱信号软静音(SOFTMUTE)。 7H~9H:弱信号高音抑制(HIGHCUT)。
AH~CH:弱信号立体声控制(STEREO BLEND)。 DH:带宽设置。 EH:信号强度读取值的偏移量设置(LEVEL_ALIGN)。 FH:AM的LNA设置;立体声分离度调整。
这里主要就弱信号处理在软件上的设置做进一步介绍。 弱信号处理将在后期版本中详细说明。
Page: 8 of 8
因篇幅问题不能全部显示,请点此查看更多更全内容