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通讯正常的话,示波器会显示比较稳定的波形,抓取此波形便于直观的调试程序。


本文标签: 中断 配置 总线 使用 解调