⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sff8472_table.c

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 C
字号:
// sff8472_table.c

#include "common.h"

void sff8472_table(void)
{

/////////////////////////////////////////////////////////////////////
// 2-wire address A2h                                              //
/////////////////////////////////////////////////////////////////////

A0h[0] = 0x03;
A0h[1] = 0x04;
A0h[2] = 0x07;
A0h[3] = 0x00;
A0h[4] = 0x01;
A0h[5] = 0x00;
A0h[6] = 0x00;
A0h[7] = 0x00;

#if DEBUG == 1
A0h[0] = 0x00;
A0h[1] = 0x11;
A0h[2] = 0x22;
A0h[3] = 0x33;
A0h[4] = 0x44;
A0h[5] = 0x55;
A0h[6] = 0x66;
A0h[7] = 0x77;
#endif


A0h[8] = 0x02;
A0h[9] = 0x00;
A0h[10] = 0x00;
A0h[11] = 0x03;
A0h[12] = 0x19;
A0h[13] = 0x00;
A0h[14] = 0x02;		A0h[15] = 0x14;
A0h[16] = 0x00;		A0h[17] = 0x00;
A0h[18] = 0x00;		A0h[19] = 0x00;
A0h[20] = 0x41;		A0h[21] = 0x44;		// Vendor Name
A0h[22] = 0x49;		A0h[23] = 0x20;
A0h[24] = 0x20;		A0h[25] = 0x20;
A0h[26] = 0x20;		A0h[27] = 0x20;
A0h[28] = 0x20;		A0h[29] = 0x20;
A0h[30] = 0x20;		A0h[31] = 0x20;
A0h[32] = 0x20;		A0h[33] = 0x20;
A0h[34] = 0x20;		A0h[35] = 0x20;
A0h[36] = 0x00;		A0h[37] = 0x00;
A0h[38] = 0x00;		A0h[39] = 0x00;
A0h[40] = 0x41;		A0h[41] = 0x44;		// Vendor PM
A0h[42] = 0x75;		A0h[43] = 0x43;
A0h[44] = 0x37;		A0h[45] = 0x30;
A0h[46] = 0x32;		A0h[47] = 0x30;
A0h[48] = 0x2D;		A0h[49] = 0x53;
A0h[50] = 0x46;		A0h[51] = 0x50;
A0h[52] = 0x2D;		A0h[53] = 0x52;
A0h[54] = 0x44;		A0h[55] = 0x4B;
A0h[56] = 0x31;		A0h[57] = 0x2E;		// Vendor Rev
A0h[58] = 0x30;		A0h[59] = 0x30;		// Vendor Rev
A0h[60] = 0x00;		A0h[61] = 0x00;
A0h[62] = 0x00;		A0h[63] = 0x00;
A0h[64] = 0x00;		A0h[65] = 0x1A;
A0h[66] = 0x00;		A0h[67] = 0x00;
A0h[68] = 0x00;		A0h[69] = 0x00;
A0h[70] = 0x00;		A0h[71] = 0x00;
A0h[72] = 0x00;		A0h[73] = 0x00;
A0h[74] = 0x00;		A0h[75] = 0x00;
A0h[76] = 0x00;		A0h[77] = 0x00;
A0h[78] = 0x00;		A0h[79] = 0x00;
A0h[80] = 0x00;		A0h[81] = 0x00;
A0h[82] = 0x00;		A0h[83] = 0x00;
A0h[84] = 0x30;		A0h[85] = 0x33;		// Date Code
A0h[86] = 0x31;		A0h[87] = 0x32;
A0h[88] = 0x30;		A0h[89] = 0x38;
A0h[90] = 0x7F;		A0h[91] = 0x7F;
A0h[92] = 0x68;		A0h[93] = 0xF0;
A0h[94] = 0x01;		A0h[95] = 0x00;

// Vendor EEPROM
A0h[96] = 0x31;		A0h[97] = 0x2E;		// Firmware revision
A0h[98] = 0x37;		A0h[99] = 0x30;

A0h[100] = 0x31;	A0h[101] = 0x2E;    // Module PCB revision
A0h[102] = 0x33;	A0h[103] = 0x30;

A0h[104] = 0x00;	A0h[105] = 0x00;    // Host PCB revision
A0h[106] = 0x00;	A0h[107] = 0x00;

A0h[108] = 0x00;	A0h[119] = 0x00;
A0h[110] = 0x00;	A0h[111] = 0x00;
A0h[112] = 0x00;	A0h[113] = 0x00;
A0h[114] = 0x00;	A0h[115] = 0x00;
A0h[116] = 0x00;	A0h[117] = 0x00;
A0h[118] = 0x00;	A0h[119] = 0x00;
A0h[120] = 0x00;	A0h[121] = 0x00;
A0h[122] = 0x00;	A0h[123] = 0x00;
A0h[124] = 0x00;	A0h[125] = 0x00;
A0h[126] = 0x00;	A0h[127] = 0x00;

/////////////////////////////////////////////////////////////////////
// 2-wire address A2h                                              //
/////////////////////////////////////////////////////////////////////

// alarm/warning thresholds
A2h[0] = 0x46;		A2h[1] = 0x00;		// Temp High Alarm, 70degC
A2h[2] = 0x00;		A2h[3] = 0x00;		// Temp Low Alarm, 0degC
A2h[4] = 0x3C;		A2h[5] = 0x00;		// Temp High Warning, 60degC
A2h[6] = 0x0A;		A2h[7] = 0x00;		// Temp Low Warning, 10degC
A2h[8] = 0x8C;		A2h[9] = 0xA0;		// Voltage High Alarm, 3.6V
A2h[10] = 0x79;		A2h[11] = 0x18;		// Voltage Low Alarm, 3.0V
A2h[12] = 0x84;		A2h[13] = 0xD0;		// Voltage High Warning, 3.4V
A2h[14] = 0x7D;		A2h[15] = 0x00;		// Voltage Low Warning, 3.2V
A2h[16] = 0xAF;		A2h[17] = 0xC8;		// Bias High Alarm, 90mA
A2h[18] = 0x3A;		A2h[19] = 0x98;		// Bias Low Alarm, 30mA
A2h[20] = 0x9C;		A2h[21] = 0x40;		// Bias High Warning, 80mA
A2h[22] = 0x4E;		A2h[23] = 0x20;		// Bias Low Warning, 40mA
A2h[24] = 0x9C;		A2h[25] = 0x40;		// Tx Power High Alarm, 4mW
A2h[26] = 0x03;		A2h[27] = 0xE8;		// Tx Power Low Alarm, 0.1mW
A2h[28] = 0x88;		A2h[29] = 0xB8;		// Tx Power High Warning, 3.5mW
A2h[30] = 0x13;		A2h[31] = 0x88;		// Tx Power Low Warning, 0.5mW
A2h[32] = 0x27;		A2h[33] = 0x10;		// Rx Power High Alarm,	1mW
A2h[34] = 0x00;		A2h[35] = 0x64;		// Rx Power Low Alarm, 0.01mW
A2h[36] = 0x13;		A2h[37] = 0x88;		// Rx Power High Waring, 0.5mW
A2h[38] = 0x00;		A2h[39] = 0xC8;		// Rx Power Low Warning, 0.02mW

// reserved 40 to 55
A2h[40] = 0x00;		A2h[41] = 0x00;
A2h[42] = 0x00;		A2h[43] = 0x00;
A2h[44] = 0x00;		A2h[45] = 0x00;
A2h[46] = 0x00;		A2h[47] = 0x00;
A2h[48] = 0x00;		A2h[49] = 0x00;
A2h[50] = 0x00;		A2h[51] = 0x00;
A2h[52] = 0x00;		A2h[53] = 0x00;
A2h[54] = 0x00;		A2h[55] = 0x00;

// external colibration constants
A2h[56] = 0x01;		A2h[57] = 0x01;
A2h[58] = 0x19;		A2h[59] = 0xB4;
A2h[60] = 0x64;		A2h[61] = 0x00;
A2h[62] = 0x00;		A2h[63] = 0x00;
A2h[64] = 0x00;		A2h[65] = 0x00;
A2h[66] = 0x00;		A2h[67] = 0x00;
A2h[68] = 0x00;		A2h[69] = 0x00;
A2h[70] = 0x00;		A2h[71] = 0x00;
A2h[72] = 0x00;		A2h[73] = 0x00;
A2h[74] = 0x00;		A2h[75] = 0x00;
A2h[76] = 0x00;		A2h[77] = 0x00;
A2h[78] = 0x00;		A2h[79] = 0x00;
A2h[80] = 0x00;		A2h[81] = 0x00;
A2h[82] = 0x00;		A2h[83] = 0x00;
A2h[84] = 0x00;		A2h[85] = 0x00;
A2h[86] = 0x00;		A2h[87] = 0x00;
A2h[88] = 0x00;		A2h[89] = 0x00;
A2h[90] = 0x00;		A2h[91] = 0x00;
A2h[92] = 0x00;		A2h[93] = 0x00;
A2h[94] = 0x00;

// checksum byte0-94
A2h[95] = 0x00;

// monitor results
A2h[96] = 0x00;		A2h[97] = 0x00;		// Temperature Mon
A2h[98] = 0x00;		A2h[99] = 0x00;		// Voltage Mon
A2h[100] = 0x00;	A2h[101] = 0x00;	// Tx Bias Mon
A2h[102] = 0x00;	A2h[103] = 0x00;	// Tx Power Mon
A2h[104] = 0x00;	A2h[105] = 0x00;	// Rx Power Mon

// reserved
A2h[106] = 0x00;	A2h[107] = 0x00;
A2h[108] = 0x00;	A2h[109] = 0x00;

// status/control bits
A2h[110] = 0x01;

// reserved
A2h[111] = 0x00;

// alarm flags
A2h[112] = 0x00;	// Alarm Flags
A2h[113] = 0x00;	// Alarm Flags

// reserved
A2h[114] = 0x00;	A2h[115] = 0x00;

// warning flags
A2h[116] = 0x00;
A2h[117] = 0x00;

// reserved
A2h[118] = 0x00;	A2h[119] = 0x00;

// vendor specific (ADI reserved)
A2h[120] = 0x00;	A2h[121] = 0x00;	// Tx Mod Mon
A2h[122] = 0x17;	A2h[123] = 0x70;	// Reference Tx Power, 0.6mW, 1LSB=0.1uW
A2h[124] = 0x10;	A2h[125] = 0x2C;	// Reference Impd current, 414uA, 1LSB=0.1uA
A2h[126] = 0x5A;                        // Photo Diode Responsivity, 0.90A/W, 1LSB=0.01[A/W]
A2h[127] = 0x00;

// user eeprom
A2h[128] = 0x00;    // Flash update counter
A2h[129] = 0x00;    // Force Flash update enable resister
A2h[130] = 0x00;    // Flash initialize enable resister
A2h[131] = 0x00;    // Tx Power monitor enable resister
A2h[132] = 0x00;    // ER compensation enable resister
A2h[132] = 0x00;
A2h[133] = 0x00;
A2h[134] = 0x00;
A2h[135] = 0x00;
A2h[136] = 0x00;
A2h[137] = 0x00;
A2h[138] = 0x00;
A2h[139] = 0x00;
A2h[140] = 0x00;
A2h[141] = 0x00;
A2h[142] = 0x00;
A2h[143] = 0x00;
A2h[144] = 0x00;
A2h[145] = 0x00;
A2h[146] = 0x00;
A2h[147] = 0x00;
A2h[148] = 0x00;
A2h[149] = 0x00;
A2h[150] = 0x00;

// vendor specific (ADI reserved)
A2h[248] = 0x02;    A2h[249] = 0x80;	// PAV set, 0x000 to 0xFFF
A2h[250] = 0x02;    A2h[251] = 0x80;	// ER set, 0x000 to 0xFFF
A2h[252] = 0x19;    A2h[253] = 0x00;	// Ref_Temp, 1/256degC/LSB
A2h[254] = 0x04;    A2h[255] = 0xFE;	// Ref_ADCDAT, 0x000 to 0xFFF

}

/********************************************************************/
/*                                                                  */
/*      Checksum                                                    */
/*                                                                  */
/********************************************************************/
void Checksum(BYTE cc_range){
    HALFWORD sum=0;
    BYTE i;

    switch(cc_range){
        case 1:
            for(i=0; i<63; i++){            // sum byte 0 to 62
                sum += A0h[i];
            }
            A0h[63] = (BYTE)(sum & 0x00FF);        
            break;
        case 2:
            for(i=64; i<95; i++){           // sum byte 64 to 94
                sum += A0h[i];
            }
            A0h[95] = (BYTE)(sum & 0x00FF);
            break;
        case 3:
            for(i=0; i<95; i++){            // sum byte 0 to 94
                sum += A2h[i];
            }
            A2h[95] = (BYTE)(sum & 0x00FF);
            break;
    }
}

/********************************************************************/
/*                                                                  */
/*      Write Protect                                               */
/*                                                                  */
/********************************************************************/
BYTE WriteProtect(BYTE i2c_addr, BYTE byte_addr){

    BYTE res=0;

    // A0 bank
    if(i2c_addr == 0xA0){
        res=0;
    }

    // A2 bank
    if(i2c_addr == 0xA2){
        if(0x5F<byte_addr && byte_addr<0x7A) res=1;
        else res=0;
    }

    return res;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -