亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? anx9021.c

?? HDMI anx9021的驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
//*******************************************************************************************************
//*******************************************************************************************************
// ********************************     Firmware for ANX9021     ****************************************
//*******************************************************************************************************
//*******************************************************************************************************


//******************************************************************************
//  ANX Company SRC 
//  Ver 1.51
//  2006/05/11
//******************************************************************************
//******************************************************************************
// Version 1.52    2006/05/19
// Disable HDCP auto reset before PLL reset and enable HDCP auto reset after PLL reset
// updated by XiaoYong 
//******************************************************************************

//******************************************************************************
// Version 1.53   2006/05/24
// Change POP Noise handling sequence and add more time slot for POP Noise handling routine "void ANX9021_POPNoise(void);"
// updated by XiaoYong 
//******************************************************************************

//******************************************************************************
// Version 1.54    2006/06/06
// Use hardware solution to handle POP Noise, change two registers' ( [0x60:0xB7] and [0x60:0xB4] ) value
// And remove the software POP Noise handling routine "void ANX9021_POPNoise(void);"
// updated by XiaoYong 
//******************************************************************************

//******************************************************************************
// Version 1.55   2006/11/08
// Remove some operation to INTR2_MASK_REG to control the interrupt pin;
// Add hardware reset operation in the beginning of the main():ANX9021_Chip_Located();
// Modify the operation when sync lost then quickly found
// Before shut down AVC, config some video registers
// Kill all boost
// updated by zy
//******************************************************************************

//******************************************************************************
// Version 1.56   2007/01/23
// 1. Remove all the chip power down operation in 0x60:0x08;
//
// 2. Added routine "ANX9021_Align_ODCK_Repeated_Mode(void)" to align the data 
//    and clock in 480i(divided mode).
//
// 3. Add routine  "ANX9021_Auth_Start_Int()".
//
// 4. Remove the auto reset HDCP function.
//
// 5. In routine "ANX9021_HDMI_Port_Switch()", enable DDC after HPD .
//
// 6. Add routine "ANX9021_PLL_Reset()" to reset PLL.
//
// 7. Add routine "ANX9021_RGBin_Range_Scaling()" to scale input range when RGB in,
//    YCbCr out.
//
// 8. Set state to MONITOR_CKDT when no TMDS clock;
//
// 9. Added some macros to configure chip settings(input color space, DAC output). 
//    This code is in the file ANX9021.h;
//
// 10. Reset chip and firmware if register INTR1_MASK_REG turn to default value;
// 
// 11. Check if the AVI infoframe existed or not before RGB input range scaling.
//
// 12. Add routine "ANX9021_Show_Video_Info()" to show basic information.
//
// 13. Add API routine "ANX9021_PowerCtrl_API()" to power down or power up ANX9021.
//
// 14. Modified the HPD routines.
//
// updated by zy
//
//******************************************************************************

//******************************************************************************
//  I N C L U D E    F I L E S
//******************************************************************************

#include "ANX9021.h"   
#include "i2c_intf.h"
#include "Timer.h"
#include "mcu.h"



//******************************************************************************
//  G L O B A L    V A R I A B L E S
//******************************************************************************
BYTE g_HDMI_DVI_Status;
BYTE g_Sys_State;
BYTE g_Cur_Pix_Clk;
BYTE g_Video_Stable_Cntr;
BYTE g_Audio_Stable_Cntr;
BYTE g_Sync_Expire_Cntr;
BYTE g_Timer_Slot ;  
BYTE g_HDCP_Err_Cnt;
BYTE g_Sync_Change; //record sync interrupt

WORD g_Cur_H_Res;
WORD g_Cur_V_Res;
BOOL g_Video_Muted;
BOOL g_Audio_Muted;
BOOL g_CTS_Got;
BOOL g_Audio_Got;
BOOL g_Restart_System; 
BOOL g_Auth_Start;



//******************************************************************************
//  F U N C T I O N     P R O T O T Y P E S
//******************************************************************************
static void ANX9021_Init_var(void);
static void ANX9021_Video_Timer_Slot(void);
static void ANX9021_Audio_Timer_Slot(void);
static void ANX9021_Timer_Slot2(void);
static void ANX9021_Set_Sys_State(BYTE ss);
static void ANX9021_Sync_Det_Int(void);
static void ANX9021_Cts_Rcv_Int(void);
static void ANX9021_Audio_Rcv_Int(void);
static void ANX9021_HDCP_Error_Int(void);
static void ANX9021_Aac_Done_Int(void);
static void ANX9021_HDMI_DVI_Int(void);
static void ANX9021_Auth_Start_Int(BYTE s1);
static void ANX9021_Get_Video_Info(void);
static char ANX9021_Is_Video_Change(void);
static void ANX9021_Mute_Video(void);
static void ANX9021_Unmute_Video(void);
static void ANX9021_Mute_Audio(void);
static void ANX9021_Unmute_Audio(void);
static void ANX9021_Restart_Audio_Chk(void);
static void ANX9021_Clk_Detected_Int(void);
static BYTE ANX9021_Initialize(void);
static void ANX9021_PLL_Reset(void);
static void ANX9021_Align_ODCK_Repeated_Mode(void);
static void ANX9021_RGBin_Range_Scaling(void);
static void ANX9021_Show_Video_Info(void);
static void ANX9021_New_AVI_Int(void);

//******************************************************************************
//  F U N C T I O N S   D E F I N I T I O N
//******************************************************************************

void ANX9021_PowerCtrl_API(BYTE onoff)
{
    BYTE c;
    if(onoff) //power on ANX9021
    {
        ANX9021_ReadI2C_RX0(SYS_CTRL1_REG, &c);
        ANX9021_WriteI2C_RX0(SYS_CTRL1_REG, c | 0x01); // power up all
    }
    else   //power off ANX9021
    {
        ANX9021_ReadI2C_RX0(SYS_CTRL1_REG, &c);
        ANX9021_WriteI2C_RX0(SYS_CTRL1_REG, c & 0xfe); // power off all
    }
    
}


void ANX9021_Int_Process(void)
{
    BYTE c;
    BYTE s1, s2, s3, s4, s5, s6;

    ANX9021_ReadI2C_RX0(STATE_REG, &c);
    if (c & ANX9021_SYNC_DECT)  // sync is found
    {
        if (g_Sys_State == WAIT_SCDT) 
        {
            ANX9021_ReadI2C_RX0(INTR2_REG, &s2);
            if(!(s2 & ANX9021_SCDT_CHANGE))
            {
                debug_puts("\n\n++++++++ Sync Interrput lost +++++++.\n\n");
                ANX9021_ReadI2C_RX0(AEC_CTRL_REG, &c);
                ANX9021_WriteI2C_RX0(AEC_CTRL_REG, c | 0x04);
                ANX9021_Set_Sys_State(WAIT_VIDEO);
                g_Video_Stable_Cntr = 0;
            }
        }
    }
  
    ANX9021_ReadI2C_RX0(STATE_REG, &c);
    if( c&0x02 )    // Pixel clock is existed
    {
        if (g_Sys_State == MONITOR_CKDT)  
        {
            ANX9021_PLL_Reset();
        } 
        else  
        {
            ANX9021_ReadI2C_RX0(INTR1_REG, &s1);
            ANX9021_WriteI2C_RX0(INTR1_REG, s1);

            ANX9021_ReadI2C_RX0(INTR2_REG, &s2);
            ANX9021_WriteI2C_RX0(INTR2_REG, s2);

            ANX9021_ReadI2C_RX0(INTR3_REG, &s3);
            ANX9021_WriteI2C_RX0(INTR3_REG, s3);


            ANX9021_ReadI2C_RX0(INTR4_REG, &s4);
            ANX9021_WriteI2C_RX0(INTR4_REG, s4);

            ANX9021_ReadI2C_RX0(INTR5_REG, &s5);
            ANX9021_WriteI2C_RX0(INTR5_REG, s5);

            ANX9021_ReadI2C_RX0(INTR6_REG, &s6);
            ANX9021_WriteI2C_RX0(INTR6_REG, s6);

            if (s2 & 0x10)//clk detect change interrupt
            {
                ANX9021_Clk_Detected_Int();
            }
            
            if (s2 & ANX9021_SCDT_CHANGE)  // SYNC detect interrupt
            {
                ANX9021_Sync_Det_Int();
            }
            
            if (s2 & ANX9021_HDMI_DVI_MODE_CHANGE) // HDMI_DVI detect interrupt
            {                
                ANX9021_HDMI_DVI_Int();
            }

            if (s3 & ANX9021_NEW_AVI_DECT) 
            {
                ANX9021_New_AVI_Int();
            }

            if (s1 & ANX9021_CTS_ACR_CHANGE)  
            { 
                debug_puts("*ANX9021 Interrupt: Audio Error(4 Bits)."); 
                ANX9021_Restart_Audio_Chk();
            }

            if (s2 & ANX9021_CTS_RECV)  
            {
                ANX9021_Cts_Rcv_Int();
            }

            if (s2 & ANX9021_AUDIO_RECV)  
            {
                ANX9021_Audio_Rcv_Int();
            }

            if (s1 & 0x02)      // Authentication start interrupt
            {
                ANX9021_Auth_Start_Int(s1);
            }

            if ( (s4 & ANX9021_HDCP_ERROR) && g_Auth_Start )  // HDCP error
            {
                ANX9021_HDCP_Error_Int();
            }
            else
            {
                g_HDCP_Err_Cnt = 0;
            }
            
            if (s5 & ANX9021_AAC_MUTE)  // AAC done
            {
                ANX9021_Aac_Done_Int();
            }

            // align odck when sync changed and pixel clock divider enabled
            ANX9021_Align_ODCK_Repeated_Mode();
        } 
    }
    else // no TMDS clock
    {
        if(g_Sys_State != MONITOR_CKDT)
        {
            debug_puts("No TMDS clock."); 
            ANX9021_Set_Sys_State(MONITOR_CKDT);
            g_Sync_Expire_Cntr = 0;
        }
    }
}

void ANX9021_Video_Timer_Slot(void)
{
    BYTE c;
    BYTE AVMUTE_STATUS;
     
    if (g_Sys_State == MONITOR_CKDT) { return; }

    if (g_Sys_State == WAIT_SCDT) // No sync in WAIT_SCDT
    {
        delay_ms(100);
        ANX9021_ReadI2C_RX0(STATE_REG, &c);
        if(  (c & ANX9021_SYNC_DECT) != ANX9021_SYNC_DECT)
        {
            debug_puts("WAIT_SCDT: No Sync for 100ms."); 
            ANX9021_Set_Sys_State(MONITOR_CKDT);
        }
        return;
    }

    ANX9021_ReadI2C_RX0(STATE_REG, &c);
    if (!(c & ANX9021_SYNC_DECT)) // No sync in WAIT_VIDEO, WAIT_AUDIO, PLAYBACK
    {
            if (g_Sync_Expire_Cntr >= SCDT_EXPIRE_TH) 
            {
                //ANX9021_ReadI2C_RX0(SYS_CTRL1_REG, &c);
                //ANX9021_WriteI2C_RX0 (SYS_CTRL1_REG, c & 0xfe);
                debug_puts("No sync for long time."); 
                ANX9021_Set_Sys_State(MONITOR_CKDT);
                g_Sync_Expire_Cntr = 0;
            }
            else
            {
                g_Sync_Expire_Cntr++;
            }
        return;
    }
    else// clear sync expire counter
    {
        g_Sync_Expire_Cntr = 0;
    }

    if ( g_Sys_State < WAIT_VIDEO )  
    { 
        g_HDMI_DVI_Status = DVI_MODE;
        return; 
    }

    //General Control Packet AV mute handler
    ANX9021_ReadI2C_RX1(HDMI_STAT_REG, &c);
    AVMUTE_STATUS = (c & ANX9021_AV_MUTE_STAT);
    if(AVMUTE_STATUS == ANX9021_AV_MUTE_STAT) 
    {
        debug_puts("ANX9021 AV mute packet received."); 

        if (!g_Video_Muted) 
        {
            ANX9021_Mute_Video();
        }
        if (!g_Audio_Muted)
        {
            ANX9021_Mute_Audio();
        }
        ANX9021_Set_Sys_State(WAIT_VIDEO);
    }

    if (ANX9021_Is_Video_Change()) 
    {
        debug_puts("Video Changed , mute video and mute audio");
        ANX9021_Set_Sys_State(WAIT_VIDEO);
        g_Video_Stable_Cntr = 0;

        if (!g_Video_Muted)
        {  
            ANX9021_Mute_Video();
        }
        if (!g_Audio_Muted)
        {
            ANX9021_Mute_Audio();
        }
    } 
    else if (g_Video_Stable_Cntr < VIDEO_STABLE_TH) 
    {
        g_Video_Stable_Cntr++;
        debug_puts("WAIT_VIDEO: Wait for video stable cntr.");
    } 
    else if ((g_Sys_State == WAIT_VIDEO) && (AVMUTE_STATUS==0x00))
    {
        if (g_HDMI_DVI_Status) 
        {
            if (g_Sys_State == WAIT_VIDEO) 
            {
                ANX9021_Get_Video_Info();
                debug_puts("HDMI mode: Video is stable."); 
                ANX9021_Unmute_Video();	
                ANX9021_Set_Sys_State(WAIT_AUDIO);
            }
        } 
        else 
        {
            ANX9021_Get_Video_Info();
            debug_puts("DVI mode: Video is stable.");
            ANX9021_Unmute_Video();
            ANX9021_Unmute_Audio();
            ANX9021_Set_Sys_State(PLAYBACK);
            ANX9021_Show_Video_Info();
        }
    }


    if(g_Sys_State >= WAIT_VIDEO) //Check R2Y scaling
    {
        ANX9021_ReadI2C_RX0(VID_AOF_REG, &c);
        if(c & 0x80)    //output is YCbCr
        {
            ANX9021_RGBin_Range_Scaling();
        }
        else            //output is RGB
        {
            ANX9021_ReadI2C_RX0(AEC_CTRL_REG, &c);
            ANX9021_WriteI2C_RX0(AEC_CTRL_REG, c | 0x04);           
        }
    }
    ANX9021_Get_Video_Info();
}

void ANX9021_Audio_Timer_Slot(void)
{
    BYTE c;//,c1,c2,c3;

    if (g_Sys_State == MONITOR_CKDT)
    {
        return; 
    }

    ANX9021_ReadI2C_RX0(SHD_BSTAT2_REG, &c);
    if (!(c & ANX9021_HDMI_MODE)) // if not HDMI mode, do nothing
    {
        return; 
    }

    if (g_Sys_State == PLAYBACK) 
    {
        ANX9021_ReadI2C_RX1(HDMI_MUTE_REG, &c);
        if (c & ANX9021_AUD_MUTE) 
        {
            ANX9021_Set_Sys_State(WAIT_AUDIO);
        }
    }

    if ((g_Sys_State != WAIT_AUDIO)) 
    {
        return;
    }

    ANX9021_ReadI2C_RX0(STATE_REG, &c);
    if (!(c & ANX9021_SYNC_DECT)) 
    {
        return ; 
    }


    if (g_CTS_Got && g_Audio_Got) 
    {
        if (g_Audio_Stable_Cntr >= AUDIO_STABLE_TH) 
        {
            ANX9021_Unmute_Audio();
            ANX9021_Unmute_Video();
            g_Audio_Stable_Cntr = 0;
            ANX9021_Set_Sys_State(PLAYBACK);
            ANX9021_Show_Video_Info();
        } 
        else 
        {
            g_Audio_Stable_Cntr++;
        }
    } 
    else 
    {
        g_Audio_Stable_Cntr = 0;
    }
}

void ANX9021_Timer_Slot2(void) 
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频一区二区三区| 亚洲女人小视频在线观看| 精品视频999| 日韩在线一区二区三区| 一区二区三区国产| 亚洲激情欧美激情| 亚洲一区二区视频在线| 自拍视频在线观看一区二区| 国产精品二三区| 中文字幕一区二区三区视频| 国产精品天美传媒沈樵| 中文字幕一区二区三区色视频 | 国产精品一区三区| 国产在线精品国自产拍免费| 国产一区二区三区久久悠悠色av | 国产精品久久久久国产精品日日| 国产亚洲一二三区| 中文字幕一区二区三区四区不卡 | 成人av网址在线观看| 96av麻豆蜜桃一区二区| 91高清视频免费看| 337p亚洲精品色噜噜噜| 精品日产卡一卡二卡麻豆| 欧美国产欧美综合| 一区二区免费在线| 蜜桃久久久久久久| 成人aaaa免费全部观看| 日本黄色一区二区| 精品国产免费人成在线观看| 日韩一区二区中文字幕| 久久久亚洲高清| 樱桃视频在线观看一区| 久久99这里只有精品| 成人激情黄色小说| 欧美系列在线观看| 久久久久一区二区三区四区| 国产精品久久综合| 看片网站欧美日韩| 韩国av一区二区三区| 91免费在线播放| 日韩精品一区二区三区四区视频| 国产精品乱码人人做人人爱| 视频一区欧美日韩| 风间由美性色一区二区三区| 欧美日韩另类一区| 久久色.com| 国产一区福利在线| 全国精品久久少妇| 99re热视频精品| 亚洲精品在线观| 亚洲高清久久久| 91无套直看片红桃| 久久综合久久99| 天天亚洲美女在线视频| 99精品视频一区| ww久久中文字幕| 免费高清在线一区| 欧美探花视频资源| 亚洲少妇屁股交4| 国产精品99久久久| 精品播放一区二区| 青青草伊人久久| 欧美色视频一区| 一级中文字幕一区二区| 波多野洁衣一区| 中文字幕欧美三区| 国产一区二区三区日韩 | 免费在线看成人av| 91久久国产综合久久| 中文字幕亚洲区| 福利91精品一区二区三区| 久久久久久免费网| 国产精品一二三四区| 精品国产免费久久| 久久精品国产99| 精品国产麻豆免费人成网站| 捆绑调教一区二区三区| 91精品国产乱| 精品在线观看视频| 精品久久久网站| 成人一区在线观看| 国产精品国产馆在线真实露脸| 国产成人综合在线观看| 日本一区二区三区在线不卡| 国产iv一区二区三区| 日本一区二区综合亚洲| 成人av资源在线| 亚洲欧洲综合另类| 欧美日韩国产123区| 久久国产精品99久久人人澡| 欧美成人a∨高清免费观看| 国产一区二区三区久久悠悠色av| 欧美日本国产视频| 久久机这里只有精品| 久久综合九色综合欧美就去吻| 国产在线精品一区二区不卡了| 欧美激情一区二区三区蜜桃视频 | www激情久久| 成人美女视频在线观看18| 亚洲欧美中日韩| 一本久久a久久免费精品不卡| 一区二区三区欧美久久| 欧美三级午夜理伦三级中视频| 亚洲影院久久精品| 日韩一区二区三区免费看| 国产一区二区调教| 亚洲品质自拍视频| 日韩欧美国产高清| 99精品热视频| 蜜桃一区二区三区在线观看| 中文字幕一区二区三区蜜月| 在线不卡欧美精品一区二区三区| 国产精品一区二区在线观看不卡| 国产精品视频第一区| 在线电影欧美成精品| 国产成人丝袜美腿| 五月天网站亚洲| 国产丝袜美腿一区二区三区| 欧美午夜理伦三级在线观看| 久久成人久久爱| 亚洲乱码国产乱码精品精98午夜| 欧美肥胖老妇做爰| 粉嫩13p一区二区三区| 天堂蜜桃91精品| 国产精品麻豆一区二区| 欧美一区二区女人| 在线观看亚洲精品| 久久国产剧场电影| 亚洲自拍偷拍欧美| 欧美激情一区二区三区不卡| 日韩欧美自拍偷拍| 欧美少妇bbb| 一本大道久久a久久综合婷婷 | 国产精品网站在线| 日韩欧美国产午夜精品| 色综合久久综合网97色综合| 久久99精品久久久久久久久久久久| 亚洲精品视频一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 99re6这里只有精品视频在线观看| 奇米影视一区二区三区小说| 亚洲视频在线观看三级| 久久精品男人天堂av| 欧美日韩一级片在线观看| 96av麻豆蜜桃一区二区| 成人黄色小视频在线观看| 日韩成人一级大片| 国产欧美va欧美不卡在线| 欧美一区二区大片| 精品视频免费看| 99热国产精品| 国产91精品久久久久久久网曝门| 日韩电影在线免费看| 亚洲乱码国产乱码精品精的特点| 久久精品人人爽人人爽| 日韩欧美电影一二三| 欧美日韩一本到| 欧美日韩国产乱码电影| 欧美午夜精品理论片a级按摩| 日本韩国欧美在线| 成人一道本在线| 91丨九色丨蝌蚪丨老版| 91捆绑美女网站| 成人午夜av影视| 91亚洲精华国产精华精华液| 国产·精品毛片| 99精品视频一区二区三区| 一道本成人在线| 一本色道综合亚洲| aaa欧美色吧激情视频| 国产高清久久久久| fc2成人免费人成在线观看播放| 经典三级在线一区| 大美女一区二区三区| 色哟哟一区二区在线观看| 91丝袜美腿高跟国产极品老师| 欧洲一区在线电影| 欧美自拍丝袜亚洲| 日韩欧美成人一区二区| 欧美一区二区福利在线| 精品国产一区二区亚洲人成毛片| 国产午夜精品一区二区| 亚洲国产经典视频| 亚洲激情一二三区| 午夜电影网亚洲视频| 极品美女销魂一区二区三区| 岛国精品在线观看| 日本久久一区二区| 精品国产凹凸成av人导航| 欧美国产禁国产网站cc| 偷偷要91色婷婷| 成人av网站在线观看| 欧洲av一区二区嗯嗯嗯啊| 精品动漫一区二区三区在线观看| 久久夜色精品国产欧美乱极品| 一区二区三区在线看| 韩国成人精品a∨在线观看| 北条麻妃国产九九精品视频| 91精品国模一区二区三区| 久久久久久久综合日本|