//========================================================================
//TITLE:
// TCC79xx的BCLK和LRCK数值推算
//AUTHOR:
// norains
//DATE:
// Tuesday 16-December-2008
//Environment:
// TCC79XX
//========================================================================
如果想为TCC79XX编写相应的音频驱动,我们首先要清楚知道IIS的MCLK,BCLK和LRCK的数值。最简单的方法自然是用示波器测量,但由于很多方面限制,这种方法测量出来的数值不一定是非常正确。更为恰当的方法是,我们根据BSP代码,比照相应的datasheet,推算出较为正确的数值。
首先了解这三个变量代表的意思:
MCLK:称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍,384倍或512倍。
BCLK:串行时钟SCLK,也叫位时钟
LRCK:帧时钟,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率。
不过在TCC79XX中并没有直接明确设置这三个频率的寄存器,所以我们需要从代码中去需找相应的蛛丝马迹,看看默认的驱动的输出频率为多少。
唯一我们能在代码中看到的频率设置是处于tcc_wave.c文件的tea_i2s_setclock函数:
void tea_i2s_setclock(unsigned int ClockRate)
{
tca_ckc_com_setperi(PERI_DAI,KHz,11289,DIRECTPLL0);
}
根据datasheet,我们可以知道,在这里的PCK_DAI频率,其实就是IIS的MCLK频率,所以,我们首先可以确定:
MCLK:11289KHZ
和频率有关的寄存器,我们现在需要用到的是DAMR。查看BD[7:6]字段,数值为0.
关于BD的字段,文档说明如下:
00 Select Div 4 ( 256fs->64fs )
01 Select Div 6 ( 384fs->64fs )
10 Select Div 8 ( 512fs->64fs, 384fs->48fs , 256fs->32fs)
11 Select Div16 ( 512fs->32fs )
也就是说,现在MCLK是11289KHZ,是采样频率的256倍。换而言之,采样频率就是: 11289/256= 44.09765625KHZ。
而LRCK就相当于采样频率,所以LRCK的数值也就确定了:
LRCK:44.09765625KHZ
现在BD段的数值为0,等于该数值时,BCLK相当于采样频率的64倍:44.09765625*64=2822.25KHZ。
所以,BCLK的数值为:
BCLK:2822.25KHZ
只要确定了MCLK,BCLK和LRCK之后,剩下的音频芯片调试就简单多了,在此就不再详述。