📄 qam.c
字号:
/*function: control 3033 qam modulator.*/
#include <iom128v.h>
#include "Twi.h"
#include "qam.h"
#include <control.h>
unsigned char charmp[5],byWrite;
unsigned char ucaTemp[5],byTemp[5];
unsigned char temp_number;
extern unsigned int iSmbRat;
extern unsigned char center_frequency,qammode;
//---------------------------------------------------------
// NAME: SetSymbolRate()
// ENTRY: iFBaud
// RETURN: void
// FUNCTION:Set qam SymbolRate
// MODIFY: 2004.2.3
//--------------------------------------------------------
void SetSymbolRate(int iFBaud)
{
unsigned long ulData[2];
ulData[0]=(unsigned long)iFBaud;
ulData[1]=ulData[0]*2483/7125;
ulData[0]*=1177;
ulData[0]+=ulData[1];
ucaTemp[2]=(unsigned char)(ulData[0]%256);
ulData[0]/=256;
ucaTemp[1]=(unsigned char)(ulData[0]%256);
ulData[0]/=256;
ucaTemp[0]=(unsigned char)(ulData[0]%256);
ucaTemp[3]=0;
ucaTemp[4]=0;
}
//---------------------------------------------------------
// NAME: broad_3033_init()
// ENTRY: qam,addr
// RETURN: void
// FUNCTION:Init the chip 3033
// MODIFY: 2004.2.3
//--------------------------------------------------------
void broad_3033_init(unsigned char qam,unsigned char addr)
{
unsigned char byWrite;
unsigned char charmp[7];
/* 读芯片的信息 */
//ReadBCM3033Info(qam,addr);
/* 设置保留寄存器 */
byWrite = 0x00;
i2c_Write(byWrite,0x08,qam,addr);
/* 设置复位控制寄存器 */
byWrite =0x1c; //0x1f; //02-07-25; //0x1c;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(20);
/* 设置复位控制寄存器 */
byWrite = 0x20;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 设置QAM模式控制寄存器 05:0b*/
switch( qammode )
{
case 1://the last three bits 000 001 010 011 100 101 110 111
//QPSK: 16-QAM 32-QAM 64-QAM(default) 128-QAM 256-QAM Reserved Reserved
byWrite=0x09;
break;
case 2:
byWrite=0x0a;
break;
case 3:
byWrite=0x0b;
break;
case 4:
byWrite=0x0c;
break;
case 5:
byWrite=0x0d;
break;
default:
break;
}
//设置模式
//the last three bits 000 001 010 011 100 101 110 111
// QPSK 16-QAM 32-QAM 64-QAM(default) 128-QAM 256-QAM Reserved Reserved
i2c_Write(byWrite,0x05,qam,addr);
delayms(5);
/* 设置编码模式控制寄存器 06:0a*/
byWrite = 0x0a;
i2c_Write(byWrite,0x06,qam,addr);
delayms(5);
/* 设置复位控制寄存器 */
byWrite = 0x1C;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 设置伪随机二进制序列产生控制寄存器 0e:00*/
byWrite = 0x00;
i2c_Write(byWrite,0x0e,qam,addr);
delayms(5);
/* 设置交织深度控制寄存器 09:05*/
byWrite = 0x05;
i2c_Write(byWrite,0x09,qam,addr);
delayms(5);
/* 设置复位控制寄存器 */
byWrite = 0x1C;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 设置输入控制寄存器 0a:03*/
byWrite= 0x23; //主模式
//byWrite= 0x22; //从模式
i2c_Write(byWrite,0x0a,qam,addr);
delayms(5);
/* 设置复位控制寄存器 */
byWrite = 0x1C;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 设置输出控制寄存器 0b:01*/
byWrite = 0x01;
i2c_Write(byWrite,0x0b,qam,addr);
delayms(5);
/* 设置复位控制寄存器 */
byWrite = 0x01;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/*dbctl */
byWrite=0x0b;
i2c_Write(byWrite,0x13,qam,addr);
delayms(10);
/* 设置输入同步环线性系数 04,00,00,00,02*/
/* 20H--23H 存储BCM3033的操作码02H对应的多字节寄存器 */
/*操作码为02 的寄存器*/
charmp[0]=0x04;
charmp[1]=0x00;
charmp[2]=0x00;
charmp[3]=0x00;
charmp[4]=0x02;
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
delayms(10);
/* 设置输入同步环积分器系数 00,04,00,00,01*/
/* 1cH--1fH 存储BCM3033的操作码01H对应的多字节寄存器 */
/*操作码为01 的寄存器*/
charmp[0]=0x00;
charmp[1]=0x04;
charmp[2]=0x00;
charmp[3]=0x00;
charmp[4]=0x01;
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
delayms(10);
/* 设置符号率 */
/*操作码为00 的寄存器
公式:2^24*8*FBAUD/FMCLK FMCLK=114
*/
//*FBAUD=6875Kbps--7b823e
//6952=7CE45E
//6MBaud--6BCA1A
/*ucaTemp[0]=0x7d;//3100kBaud
ucaTemp[1]=0xc1;
ucaTemp[2]=0x1f;
ucaTemp[3]=0x00;
ucaTemp[4]=0x00;*/
SetSymbolRate(iSmbRat);
i2c_Write_mbyte(ucaTemp,0x00,5,qam,addr);
delayms(10);
/* 设置输入同步环积分器 00,00,00,00,03*/
/* 24H--27H 存储BCM3033的操作码03H对应的多字节寄存器 */
/*操作码为03 的寄存器*/
charmp[0]=0x00;
charmp[1]=0x00;
charmp[2]=0x00;
charmp[3]=0x00;
charmp[4]=0x03;
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
delayms(10);
/* 设置输入同步环使能 00,0c,44,00,04*/
/* 28H--2bH 存储BCM3033的操作码04H对应的多字节寄存器 */
/*操作码为04 的寄存器*/
charmp[0]=0x00;
charmp[1]=0x0c;
charmp[2]=0x44;
charmp[3]=0x00;
charmp[4]=0x04;
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
delayms(10);
/* 设置复位控制寄存器 */
byWrite = 0x1c;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 设置复位控制寄存器 */
byWrite = 0x20;
i2c_Write(byWrite,0x0d,qam,addr);
delayms(10);
/* 读同步寄存器 */
i2c_Read(&charmp[0],0x12,qam,addr);
delayms(20);
i2c_Read(&charmp[0],0x10,qam,addr);
i2c_Read(&charmp[0],0x0f,qam,addr);
i2c_Read(&charmp[0],0x14,qam,addr);
i2c_Read(&charmp[0],0x17,qam,addr);
// ReadBCM3033Info(qam,addr);
i2c_Read(&charmp[0],0x0a,qam,addr);
/* 设置中心频率(FIF=38M ,FS=FMCLK=114)*/
//IF=38M unsigned charmp[0..4]=55,55,55,55,08
//IF=36.15 unsigned charmp[0..4]=51,2d,cf,7e,08
//IF=36.65 unsigned charmp[0..4]=52,4d,3f,c6,08
switch (center_frequency)
{
case 0x01:
{
charmp[0]=0x51;
charmp[1]=0x2d;
charmp[2]=0xcf;
charmp[3]=0x7e;
charmp[4]=0x08;
break;
}
case 0x02:
{
charmp[0]=0x52;
charmp[1]=0x4d;
charmp[2]=0x3f;
charmp[3]=0xc6;
charmp[4]=0x08;
break;
}
case 0x03:
{
charmp[0]=0x55;
charmp[1]=0x55;
charmp[2]=0x55;
charmp[3]=0x55;
charmp[4]=0x08;
break;
}
default:
{
break;
}
}
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
/* 设置输出采样时钟使能 00,00,00,00,09*/
/*操作码为09 的寄存器*/
charmp[0]=0x00;
charmp[1]=0x00;
charmp[2]=0x00;
charmp[3]=0x00;
charmp[4]=0x09;
i2c_Write_mbyte(charmp,0x00,5,qam,addr);
i2c_Read(&charmp[0],0x12,qam,addr);
}
//---------------------------------------------------------
// NAME: ReadBCM3033Info()
// ENTRY: chanl,.
// addr,.
// RETURN: if success return TRUE, otherwise return FALSE.
// FUNCTION:Read the chip 3033 ID
// MODIFY: 2004.2.3
//--------------------------------------------------------
unsigned char ReadBCM3033Info(unsigned char chanl, unsigned char addr)
{
unsigned char byTemp[7];
byTemp[0] = 0x0a;
i2c_Write(byTemp[0], 0x04, chanl, addr);
delayms(5);
// the bytes read from BCM3033 is (LSB)0x00 0x02 0x0B 0xD9(MSB)
i2c_Read(&byTemp[2], 0x02, chanl, addr);
i2c_Read(&byTemp[3], 0x03, chanl, addr);
if((byTemp[2] == 0x0B) && (byTemp[3] == 0xD9))
return TRUE;
else
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -