admin 管理员组文章数量: 887021
2023年12月19日发(作者:sumif函数的使用方法多个条件)
基于Arm7的I2C总线配置Tuner简述
SHARP编号VA1K5CE5405 Tuner-c是用于数字有线电视的解调模块,其内部采用SN761664进行RF降频,STV0297E进行QAM解调,通过I2C总线对相关参数配置。本文以Arm7(LPC2114芯片)为平台,简单阐述本款Tuner的I2C参数配置过程。
一、LPC2114芯片I2C总线规则
LPC2114芯片具备标准的I2C总线接口,使用中断方式传输。使用前需要配置LPC2114复用管脚P0.2、P0.3为I2C的时钟线(SCL)、和数据线(SDA),并使能I2C中断以及配置I2C中断处理函数。相关的C代码如下:
PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50;
I2SCLH = (Fpclk/fi2c + 1) / 2;
I2SCLL = (Fpclk/fi2c) / 2;
I2CONCLR = 0x2C;
I2CONSET = 0x40; // 使能主I2C
install_irq(I2C0_INT, I2C_INT_PRIO, (void * )I2C_Handler); // 安装I2C中断处理函数
// 设置I2C控制口有效
// 设置I2C时钟为fi2c
LPC2114使用I2C总线时需置位I2EN以使能I2C功能。之后置位STA,LPC2114进入主-发送器模式。I2C逻辑在总线空闲后立即发送一个起始条件。当发送完起始条件后,SI置位。此时I2STAT中的状态代码应当为08H。该状态代码用于指向一个中断服务程序。该中断程序将从地址和写方向位装入I2DAT(I2C数据寄存器,该寄存器的所有数据都以I2C标准发送至总线),然后清零SI位(向I2CONCLR寄存器中的SIC位写入1可清零 SI)。当从地址和R/W位已发送且接收到应答位之后,SI位再次置位,此时中断程序通过判断I2STAT状态字进行相应的操作。
void __irq IRQ_I2C(void) //I2C中断服务程序
{ uint8 sta;
sta = I2STAT; // 读出I2C状态字
switch(sta)
{case 0x08: // 己发送起始条件
if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE; //指定子地址读时,先写入地址
else I2DAT = I2C_sla; // 否则直接发送从机地址
I2CONCLR = 0x28; // SI=0
break;
case 0x10:
…………
case 0x18:
…………
default: break;
}
VICVectAddr=0x00; // 中断处理结束
}
二、SHARP数字解调Tuner VA1K5CE5405
模块完成的内容有:降频,ADC,FIR滤波,同步,差分译码,解交织,解扰。降频过程由芯片SN761664完成;解调芯片STV0297E包括了ADC,FIR滤波,同步,差分译码,解交织,解扰等所有解调过程。模块的I2C接口接入STV0297E的SDA、SCL引脚(模块外围要在SDA、SCL接上拉电阻),在STV0297E内部,通过I2C中继器接入SN761664,中继器的开断由STV0297E内部寄存器I2C_TEN位控制。
RF信号进入模块后先由SN761664降频为36.167MHz,BW=8MHz的中频(IF)信号,计算公式为:
IF=(Fclk*Npro)/Nref-RF
参数Npro和Nref通过I2C总线对SN761664配置得到。
所以,对应不同的RF信号降频,需先配置STV0297E内部寄存器,打开I2C中继器,再配置SN761664。
Repeateron/offI2CMaster1615SCLSALT/GPIOTunerSDAT/GPIOSDASTV0297EInternalregisters
另外,ADC,FIR滤波,同步,差分译码,解交织,解扰用到的参数,如QAM解调方式、符号率、滚将悉数、扫描范围、扫描频率等均可以通过I2C对STV0297E的相关寄存器配置。
综上所述,通过I2C总线对Tuner配置的程序可以设计为:
Confg_Tuner ()
{
I2C_Open_Repeater(); /*置位STV0297E的I2C_TEN打开I2C Repeater*/
I2C_Set_Tuner(); /*通过I2C对SN761664进行写操作*/
I2C_Close_Repeater(); /*关闭I2C Repeater*/
I2C_Set_STV0297E(); /*配置QAM解调参数*/
}
三、I2C程序调试方法
由于I2C传输速率较大(一般为100KHz-400KHz),并且正常通讯需要从机作正确的应答,所以在调试I2C通讯程序时需要使用相关的仪器,最常用的就是用示波器抓取波形。使用这种方法时,可以在调试程序中加入如下代码:
While(1)
{I2C_Str(sla, suba, s, no);//向器件sla的子地址suba写入no字节,写入内容在*s
DelayUS(n); } //延时n微秒
这样,I2C总线上会出现以n微秒为周期的数据波形。用示波器以微秒扫描观察这个波形,如果I2C通讯正常的话,示波器会显示比较稳定的波形,抓取此波形便于直观的调试程序。
版权声明:本文标题:IIC配置tuner说明 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702989341h438654.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论