www.pudn.com > Bit1611_demo_code.rar > EEPROM.H


/* ********************************************************************** 
 
         Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd 
 
        All rights are reserved. Reproduction in whole or in parts is 
    prohibited without the prior written consent of the copyright owner. 
   ---------------------------------------------------------------------- 
 
    Module: EEPROM.H 
 
    Purpose: Interface of EEPROM. 
 
    Version: 0.01                                   07:25PM  2005/05/13 
 
    Compiler: Keil 8051 C Compiler v8.01 
 
    Reference: 
 
   ---------------------------------------------------------------------- 
    Modification: 
 
    R0.01 07:24PM  2005/05/13 Jeffrey Chang 
    Reason: 
        1. Original. 
    Solution: 
 
   ********************************************************************** */ 
 
#ifndef _EEPROM_H_ 
#define _EEPROM_H_ 
 
 
/* ------------------------------------ 
    Header Files 
   ------------------------------------ */ 
#include "osd.h" 
#include "platform.h" 
#include "vp.h" 
#include "yuv.h" 
 
/* ------------------------------------ 
    Macro Definitions 
   ------------------------------------ */ 
#undef EXTERN 
 
 
#ifdef _EEPROM_C_ 
    #define EXTERN 
#else 
    #define EXTERN extern 
#endif 
 
/* :::::::::::::::::::::::::::::::::::: 
    EEPROM Configuration 
   :::::::::::::::::::::::::::::::::::: */ 
#if (EEPROM_CFG == EEPROM_PCF85116) 
    #define EEPROM_BLOCK                256     /* 256 bytes/block x 8 blocks */ 
    #define EEPROM_MAX_BLOCK            8 
 
    #define EEPROM_PAGE                 32      /* 32 bytes/page x 64 pages */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     100     // 10 ms 
 
#elif (EEPROM_CFG == EEPROM_24LC04B) 
    #define EEPROM_BLOCK                256     /* 256 bytes/block x 2 blocks */ 
    #define EEPROM_MAX_BLOCK            2 
 
    #define EEPROM_PAGE                 16      /* 16 bytes/page x 32 pages */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     100     // 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AT24C04)           // Atmel AT24C04 
                                                // 4096 = 2 x 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* 256 bytes/block x 2 blocks */ 
    #define EEPROM_MAX_BLOCK            2 
 
    #define EEPROM_PAGE                 16      /* 16 bytes/page x 32 pages */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     100     // 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AT24C08)           // AT24C08 
                                                // 8192 = 4 x 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            4       // Total Blocks: 4 blocks 
 
    #define EEPROM_PAGE                 16      /* Page Size: 16 bytes/page */ 
 
    //#define EEPROM_WRITE_CYCLE_TIME     10      // 10 ms 
    #define EEPROM_WRITE_CYCLE_TIME     20      // 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AT24C16)           // AT24C16 
                                                // 16384 = 8 x 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* [12]2-39 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            8       // [12]2-39 Total Blocks: 8 blocks 
 
    #define EEPROM_PAGE                 16      /* [12]2-43 Page Size: 16 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     10      // [12]2-40 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AT24C32)           // AT24C32 
                                                // 32768 = 16 x 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* [12]2-39 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            16      // [12]2-39 Total Blocks: 16 blocks 
 
    #define EEPROM_PAGE                 32      /* [12]2-85 Page Size: 32 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [12]2-82 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AT24C64)            // AT24C64 
                                                // 65536 = 32 x 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* [12]2-39 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            32      // [12]2-39 Total Blocks: 16 blocks 
 
    #define EEPROM_PAGE                 32      /* [12]2-85 Page Size: 32 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [12]2-82 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_AM24LC02)           // AM24LC02 
                                                // 2048 = 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* [12]2-39 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            1       // [12]2-39 Total Blocks: 1 blocks 
 
    #define EEPROM_PAGE                 8       /* [12]2-85 Page Size: 8 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [14]3 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_IS24C02)            // [16] 
                                                // 2048 = 256 x 8 bits 
    #define EEPROM_BLOCK                256     /* [16]1 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            1       // [16]1 Total Blocks: 1 blocks 
 
    #define EEPROM_PAGE                 8       /* [16]5 Page Size: 8 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [16]12 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_IS24C04)            // [16] 
                                                // 4096 = 512 x 8 bits 
    #define EEPROM_BLOCK                256     /* [16]1 Block Size: 256 bytes/block */ 
    #define EEPROM_MAX_BLOCK            2       // [16]1 Total Blocks: 2 blocks 
 
    #define EEPROM_PAGE                 16      /* [16]5 Page Size: 16 bytes/page */ 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [16]12 Twr: 10 ms 
 
#elif (EEPROM_CFG == EEPROM_TU24C02)            // [8] 
                                                // 2048 bits = 256 x 8 bits = 32 pages 
    #define EEPROM_BLOCK                256     // [8]1 Block Size: 256 bytes/block 
    #define EEPROM_MAX_BLOCK            1       // [8]1 Total Blocks: 1 blocks 
 
    #define EEPROM_PAGE                 8       // [8]5 Page Size: 8 bytes/page 
 
    #define EEPROM_WRITE_CYCLE_TIME     20      // [8]12 Twr: 10 ms 
 
#else 
    #error EEPROM.H - Invalid EEPROM_CFG ! 
 
#endif  // EEPROM_CFG 
 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    tEGD: EEPROM General Descriptor Default Values 
   :::::::::::::::::::::::::::::::::::: */ 
#define EGD_PROJECT_CODE            PROJECT_CODE    // Project Code for EEPROM update 
#define EGD_COLOR_STD_MODE          YUV_CS_AUTO     // Color Standard Detection Mode 
 
/* :::::::::::::::::::::::::::::::::::: 
    [1]18 Audio Volume 
   :::::::::::::::::::::::::::::::::::: */ 
 
#define EGD_AUDIO_VOLUME            25      // PWM2 Duty for Audio Volume control ! 
 
/* :::::::::::::::::::::::::::::::::::: 
    [1]23 VP Background and Test Pattern 
   :::::::::::::::::::::::::::::::::::: */ 
// Normal Pattern 
#define PATTERN_NORMAL_R            0x3F            // [1]23 Color R Intensity 0x00..0x3F 
#define PATTERN_NORMAL_G            0x00            // [1]23 Color G Intensity 0x00..0x3F 
#define PATTERN_NORMAL_B            0x00            // [1]23 Color B Intensity 0x00..0x3F 
 
// No Signal Pattern 
#define PATTERN_NOSIGNAL_R          0x00            // [1]23 Color R Intensity 0x00..0x3F 
#define PATTERN_NOSIGNAL_G          0x00            // [1]23 Color G Intensity 0x00..0x3F 
#define PATTERN_NOSIGNAL_B          0x3F            // [1]23 Color B Intensity 0x00..0x3F 
 
/* :::::::::::::::::::::::::::::::::::: 
    IR Channel 
   :::::::::::::::::::::::::::::::::::: */ 
#define IR_CHANNEL_A        0 
#define IR_CHANNEL_B        1 
#define IR_CHANNEL_OFF      2 
#define IR_CHANNEL_NO       3 
 
/* :::::::::::::::::::::::::::::::::::: 
    AV System 
   :::::::::::::::::::::::::::::::::::: */ 
#define AV_AUTO             0 
#define AV_NTSC             1 
#define AV_PAL              2 
#define AV_NO               3 
 
/* :::::::::::::::::::::::::::::::::::: 
    Screen 
   :::::::::::::::::::::::::::::::::::: */ 
#define SCREEN_OFF          0 
#define SCREEN_ON           1 
#define SCREEN_AUTO         2 
#define SCREEN_NO           3 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    [1]56 PWM Function 
   :::::::::::::::::::::::::::::::::::: */ 
 
// PWM1 as Backlight control 
#define EGD_CB_PWM1_REF             0x64        // [1]58 PWM1's Reference Clock 
#define EGD_CC_PWM1_FREQ            0x64        // [1]58 PWM1's PWM Frequency 
#define EGD_CD_PWM1_ATTR1           0x00        // [1]58 PWM1's PWM Attribute 
#define EGD_CECF_PWM1_DUTY          0x0032      // [1]58 PWM1's PWM Duty 
#define EGD_D0_PWM1_ATTR2           0x00        // [1]58 PWM2's Reference Clock 
 
// PWM2 as Audio Volume control 
#define EGD_D1_PWM2_REF             0x64        // [1]58 PWM2's Reference Clock 
#define EGD_D2_PWM2_FREQ            0x64        // [1]58 PWM2's PWM Frequency 
#define EGD_D3_PWM2_DELAY           0x50        // [1]58 PWM2's PWM Delay 
#define EGD_D4_PWM2_ATTR1           0x00        // [1]58 PWM2's PWM Attribute 1 
 
#define EGD_D5D6_PWM2_DUTY          0x0032      // [1]59 PWM2's PWM Duty 
#define EGD_D7_PWM2_ATTR2           0x21        // [1]59 PWM2's PWM Attribute 2 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    [1]58 IR Decoder Function 
   :::::::::::::::::::::::::::::::::::: */ 
#define EGD_D8_IR_UDCC_L            0x00        // [1]58 User Defined Customer Code 
#define EGD_D9_IR_UDCC_H            0x00        // [1]58 User Defined Customer /Code 
#define EGD_DA_IR_DATA_L            0x00        // [1]58 IR Data 
#define EGD_DB_IR_CODE_L            0x00        // [1]58 IR Code 
#define EGD_DC_IR_DATA_H            0x00        // [1]58 IR /Data 
#define EGD_DD_IR_CODE_H            0x00        // [1]58 IR /Code 
#define EGD_DE_IR_ATTR              0x00        // [1]58 IR Attribute 
 
/* :::::::::::::::::::::::::::::::::::: 
    [1]55 External OSD Interface 
   :::::::::::::::::::::::::::::::::::: */ 
#define EGD_FE_EXTOSD_ATTR              0x00 
 
#define EGD_DISPLAY_MODE                DISPLAY_MODE_LINEAR     // [1]14 Linear 
#define EGD_IMAGE_FILTER                IMAGE_FILTER_NORMAL     // 0x8B 
#define EGD_IMAGE_MIRROR                OFF                     // [1] Image Mirror 
#define EGD_TCON_MODE                   TCON_MODE_RU            // [19]63 TCON Mode 
 
/* :::::::::::::::::::::::::::::::::::: 
    tEYD: EEPROM YUV Descriptor Default Values 
   :::::::::::::::::::::::::::::::::::: */ 
#define EYD_YUV_ID                      YUV_ID_CVBS_11    // YUV_ID_CVBS_11 as DEFAULT YUV ! 
 
 
// VP 
#define EGD_BLACKLEVEL              0x00    // 0x082 (2's) 
#define EGD_WHITESLOPE              0x80    // 0x083 
#define EGD_BLACKSLOPE              0x80    // 0x084 
#define EGD_WHITESTART              0x80    // 0x085 
#define EGD_BLACKSTART              0x80    // 0x086 
 
#define EGD_BRIGHTNESS              0x80    // 0x07C..0x07E 
#define EGD_CONTRAST                0x80    // 0x07F..0x081 
#define EGD_VOLUME                  0x00 
 
// VD 
#define EYD_BRIGHTNESS              0x98    // 0x106 (2's) 
#define EYD_CONTRAST                0x84    // 0x107 
#define EYD_BLACKLEVEL              0x10    // 0x108 
#define EYD_SATURATION              0x31    // 0x109 
#define EYD_HUE                     0x00    // 0x10A 
#define EYD_SHARPNESS               0x00    // 0x105 
 
 
#define EYD_CS_MODE                     YUV_CS_NTSC   // Default YUV Color Standard Mode 
//#define EYD_CS_MODE                     YUV_CS_PAL      // Default YUV Color Standard Mode 
#define EYD_SKIN_TONE                   0               // 0 degree 
 
#define EYD_CHANNEL                     10              // Channel 
 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    tsEGD structure starting address 
   :::::::::::::::::::::::::::::::::::: */ 
#define EGD_ADDR                        0 
#define EGD_ADDR_PROJECT_CODE           (EGD_ADDR) 
#define EGD_ADDR_COLOR_STD_MODE         (EGD_ADDR_PROJECT_CODE      + sizeof(tsEGD.ulProjectCode)) 
#define EGD_ADDR_DISPLAY_MODE           (EGD_ADDR_COLOR_STD_MODE    + sizeof(tsEGD.bColorStdMode)) 
#define EGD_ADDR_IMAGE_FILTER           (EGD_ADDR_DISPLAY_MODE      + sizeof(tsEGD.bDisplay_Mode)) 
#define EGD_ADDR_IMAGE_MIRROR           (EGD_ADDR_IMAGE_FILTER      + sizeof(tsEGD.bImage_Filter)) 
#define EGD_ADDR_TCON_MODE              (EGD_ADDR_IMAGE_MIRROR      + sizeof(tsEGD.bImage_Mirror)) 
#define EGD_ADDR_BLACKLEVEL             (EGD_ADDR_TCON_MODE         + sizeof(tsEGD.bTCON_Mode)) 
#define EGD_ADDR_WHITESLOPE             (EGD_ADDR_BLACKLEVEL        + sizeof(tsEGD.bBlackLevel)) 
#define EGD_ADDR_BLACKSLOPE             (EGD_ADDR_WHITESLOPE        + sizeof(tsEGD.bWhiteSlope)) 
#define EGD_ADDR_WHITESTART             (EGD_ADDR_BLACKSLOPE        + sizeof(tsEGD.bBlackSlope)) 
#define EGD_ADDR_BLACKSTART             (EGD_ADDR_WHITESTART        + sizeof(tsEGD.bWhiteStart)) 
#define EGD_ADDR_BRIGHTNESS             (EGD_ADDR_BLACKSTART        + sizeof(tsEGD.bBlackStart)) 
#define EGD_ADDR_CONTRAST               (EGD_ADDR_BRIGHTNESS        + sizeof(tsEGD.bBrightness)) 
#define EGD_ADDR_VOLUME                 (EGD_ADDR_CONTRAST          + sizeof(tsEGD.bContrast)) 
#define EGD_ADDR_LAST                   (EGD_ADDR_VOLUME            + sizeof(tsEGD.wVolume)) 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    tsEYD structure starting address 
   :::::::::::::::::::::::::::::::::::: */ 
#define EYD_ADDR                        (EGD_ADDR + sizeof(tEGD)) 
 
#define EYD_ADDR_YUV_ID                 (EYD_ADDR) 
#define EYD_ADDR_BRIGHTNESS             (EYD_ADDR_YUV_ID            + sizeof(tsEYD.bYUV_ID)) 
#define EYD_ADDR_CONTRAST               (EYD_ADDR_BRIGHTNESS        + sizeof(tsEYD.bBrightness)) 
#define EYD_ADDR_BLACKLEVEL             (EYD_ADDR_CONTRAST          + sizeof(tsEYD.bContrast)) 
#define EYD_ADDR_SATURATION             (EYD_ADDR_BLACKLEVEL        + sizeof(tsEYD.bBlackLevel)) 
#define EYD_ADDR_HUE                    (EYD_ADDR_SATURATION        + sizeof(tsEYD.bSaturation)) 
#define EYD_ADDR_SHARPNESS              (EYD_ADDR_HUE               + sizeof(tsEYD.bHue)) 
#define EYD_ADDR_YUV_CS                 (EYD_ADDR_SHARPNESS         + sizeof(tsEYD.bSharpness)) 
#define EYD_ADDR_SKIN_TONE              (EYD_ADDR_YUV_CS            + sizeof(tsEYD.bYUV_CS)) 
#define EYD_ADDR_CHANNEL                (EYD_ADDR_SKIN_TONE         + sizeof(tsEYD.bSkin_Tone)) 
#define EYD_ADDR_LAST                   (EYD_ADDR_CHANNEL           + sizeof(tsEYD.bChannel)) 
 
/* :::::::::::::::::::::::::::::::::::: 
     EEPROM Cinfiguration 
   :::::::::::::::::::::::::::::::::::: */ 
 
#define EEPROM_RX_BURST         ON 
#define EEPROM_RX_BYTE          OFF 
 
#define EEPROM_TX_BURST         ON 
#define EEPROM_TX_BYTE          OFF 
 
 
 
/* ------------------------------------ 
    Type Definitions 
   ------------------------------------ */ 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    tEGD: EEPROM General Descriptor 
   :::::::::::::::::::::::::::::::::::: */ 
typedef struct EGD_TAG { 
    UW32    ulProjectCode;      // Project Code 
 
    UB8     bColorStdMode;      // Color Standard Detection Mode 
    UB8     bDisplay_Mode;      // Display mode 
                                // 0: Bypass 
                                // 1: Linear (Expansion) 
                                // 2: Nonlinear (Anamorphic) 
    UB8     bImage_Filter;      // Image Filter 
    UB8     bImage_Mirror;      // 0: Bypass 
                                // 1: Mirror/Flip 
    UB8     bTCON_Mode;         // TCON Mode 
                                // 0: RU 
                                // 1: LU 
                                // 2: LD 
                                // 3: RD 
 
    UB8     bBlackLevel; 
    UB8     bWhiteSlope; 
    UB8     bBlackSlope; 
    UB8     bWhiteStart; 
    UB8     bBlackStart; 
 
    UB8     bBrightness; 
    UB8     bContrast; 
 
    UW16    wVolume; 
} tEGD; 
 
 
/* :::::::::::::::::::::::::::::::::::: 
    tEYD: EEPROM YUV Descriptor 
 
    Inside these descriptors reside all mode-dependent 
    initial values which must be for all known modes. 
 
    Note: EYD structure NOT TO BE LONGER THAN 32 BYTES 
   :::::::::::::::::::::::::::::::::::: */ 
typedef struct EYD_TAG { 
    UB8     bYUV_ID;            // Video Source ID: MIN_YUV_ID..MAX_YUV_ID 
    UB8     bBrightness;        // Brightness 
    UB8     bContrast;          // Contrast 
    UB8     bBlackLevel;        // Black Level 
    UB8     bSaturation;        // Saturation 
    UB8     bHue;               // Hue 
    UB8     bSharpness;         // Sharpness 
 
    UB8     bYUV_CS;            // Color Standard Mode: 
                                //  YUV_CS_BW 
                                //  YUV_CS_NTSC 
                                //  YUV_CS_PAL 
                                //  YUV_CS_SECAM 
    UB8     bSkin_Tone; 
    UB8     bChannel;           // Tuner Channel 
} tEYD; 
 
 
/* ------------------------------------ 
    Variables Definitions/Declarations 
   ------------------------------------ */ 
EXTERN tEGD tsEGD; 
EXTERN tEYD tsEYD; 
 
 
 
#ifdef _EEPROM_C_ 
 
 
    EXTERN tEGD CODE    tsEGD_Default = 
    { 
        CODE_PROJECT,               // Project Code for EEPROM update 
 
        EGD_COLOR_STD_MODE,         /* Color Standard Detection Mode  */ 
        EGD_DISPLAY_MODE,           // [2]47 
        EGD_IMAGE_FILTER, 
        EGD_IMAGE_MIRROR, 
        EGD_TCON_MODE, 
 
        EGD_BLACKLEVEL, 
        EGD_WHITESLOPE, 
        EGD_BLACKSLOPE, 
        EGD_WHITESTART, 
        EGD_BLACKSTART, 
 
        EGD_BRIGHTNESS, 
        EGD_CONTRAST, 
 
        EGD_VOLUME, 
    }; 
 
 
    EXTERN tEYD CODE    tsEYD_Default = 
    { 
        EYD_YUV_ID,                 // Video ID 
        EYD_BRIGHTNESS, 
        EYD_CONTRAST, 
        EYD_BLACKLEVEL, 
        EYD_SATURATION, 
        EYD_HUE, 
        EYD_SHARPNESS, 
 
        EYD_CS_MODE,                // Color Standard mode: NTSC_M or PAL 
        EYD_SKIN_TONE, 
 
        EYD_CHANNEL,                // TV tuner channel 
    }; 
#else 
 
EXTERN tEGD CODE tsEGD_Default; 
EXTERN tEYD CODE tsEYD_Default; 
 
#endif // _EEPROM_C_ 
 
 
/* ------------------------------------ 
    Function Prototypes 
   ------------------------------------ */ 
 
EXTERN void EEPROM_Default(void); 
EXTERN void EEPROM_Init(void); 
 
#if (EEPROM_RX_BURST) 
EXTERN void EEPROM_RxBurst(UW16 wAddr, UB8 bCnt, UB8 *pbData); 
#endif 
 
#if (EEPROM_RX_BYTE) 
EXTERN UB8  EEPROM_RxByte(UW16 wAddr); 
#endif 
 
#if (EEPROM_TX_BURST) 
EXTERN void EEPROM_TxBurst(UW16 wAddr, UB8 bCnt, UB8 *pbData); 
#endif 
 
#if (EEPROM_TX_BYTE) 
EXTERN void EEPROM_TxByte(UW16 wAddr, UB8 bData); 
#endif 
 
 
 
#endif /* _EEPROM_H_ */ 
 
 
/* ********************************************************************** 
 
    Description: 
 
   ********************************************************************** */ 
 
/* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */