コード例 #1
0
ファイル: hello_world.c プロジェクト: rcavazza/LPVR
int main()
{
    bool bRxVideoOn = FALSE, bTxSinkOn = FALSE, bRxModeChanged = FALSE;
    alt_u8 led_mask;
    alt_u32 BlinkTime;
    bool bHwNg = FALSE;

    // disable color depth if button1 is pressed when system boot.
    gEnableColorDepth = ((~IORD(PIO_BUTTON_BASE,0)) & 0x02)?0:1;

    OS_PRINTF("\n======== HDMI Demo REMIX by gh00st==============\n");

    //-------------------------------
    // HDMI TX init
    //-------------------------------
#ifndef TX_DISABLED
    if (!HDMITX_Init()) {
        printf("Failed to find CAT6613 HDMI-TX Chip.\n");
        bHwNg = TRUE;
        //return 0;
    }

    // init tx i2s irq
    THDMI_TX_I2S_Start();
    IOWR(I2S_TX_BASE, I2S_REG_IRQ_CLEAR, 0x00);  //clear interrupt flag

    // hdmi i2s irq
    if ((alt_irq_register(I2S_TX_IRQ, (void *)0, i2s_isr) != 0))
        OS_PRINTF("[I2S]register callback fail\n");
    else
        OS_PRINTF("[I2S]register callback success\n");

    //
    // button irq for generate audio
    // enable interrupt, button0/1

    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BUTTON_BASE, 0x03);

    // Reset the edge capture register
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUTTON_BASE,0);

    if ((alt_irq_register(PIO_BUTTON_IRQ, (void *)0, button_isr) != 0))
        OS_PRINTF("[I2S]register button callback fail\n");
    else
        OS_PRINTF("[I2S]register button callback success\n");
    //

#endif //TX_DISABLED        


    //-------------------------------
    // HDMI RX init
    //-------------------------------

#ifndef RX_DISABLED

    IOWR(HDMI_RX_HPD_N_BASE, 0, 0x03);    // pull-low hdmi connector hpd
    OS_DelayMS(1); // 1 ms
    if (!HDMIRX_Init(RX_PORT_AUTO))
        bHwNg = TRUE;
    IOWR(HDMI_RX_HPD_N_BASE, 0, 0x00); // pull-high hdmi connector hpd

#endif //RX_ENABLED    


    // gh00st
    SelectHDMIPort(CAT_HDMI_PORTA);
    InitIT6605();
//HDMIRX_DevLoopProc();
    SelectHDMIPort(CAT_HDMI_PORTB);
    InitIT6605();
//HDMIRX_DevLoopProc();
    //

    IOWR(HDMI_RX_SYNC_BASE, 0,0x00);
    led_mask = ~0x01;
    IOWR(PIO_LED_BASE, 0, led_mask);
    BlinkTime = alt_nticks() + alt_ticks_per_second()/4;

    if (bHwNg) {
        led_mask = 0x00;
        while(1) {
            if (alt_nticks() > BlinkTime) {
                IOWR(PIO_LED_BASE, 0, led_mask);
                led_mask ^= 0xFF;
                BlinkTime = alt_nticks() + alt_ticks_per_second()/4;
            }
        }
    }

    //-------------------------------
    // MAIN LOOP
    //-------------------------------

    while(1) {
#ifndef TX_DISABLED
        //========== TX
        if (HDMITX_DevLoopProc() || bRxModeChanged) {
            bTxSinkOn = HDMITX_HPD();
            if (bTxSinkOn) {
                // update state
                gDemoMode = bRxVideoOn?DEMO_LOOPBACK: DEMO_TX_ONLY;
                //
                HDMITX_DisableVideoOutput();
                if (gDemoMode == DEMO_TX_ONLY) {
                    // tx-only
                    VPG_Config(gVpgMode, gVpgColor);
                    SetupTxVIC(gVpgMode);
                }
                SetupColorSpace();
                HDMITX_EnableVideoOutput();
            } else {
                HDMITX_DisableVideoOutput();
            }
        }

#endif //

#ifndef RX_DISABLED
        //========== RX
        bRxModeChanged = HDMIRX_DevLoopProc();
        if (HDMIRX_IsVideoOn() ^ bRxVideoOn) {
            bRxVideoOn = HDMIRX_IsVideoOn();
            IOWR(HDMI_RX_SYNC_BASE, 0, bRxVideoOn?0x01:0x00);
            OS_PRINTF("[RX]Video On:%s\n", bRxVideoOn?"Yes":"No");
            // update state
            gDemoMode = !bTxSinkOn?DEMO_READY:(bRxVideoOn?DEMO_LOOPBACK:DEMO_TX_ONLY);
        }

        if (bRxModeChanged && bRxVideoOn) {
            OS_PRINTF("XXXXXX \n");
#ifndef TX_DISABLED
            // bypass AviInfoFrame from source to sink
            alt_u8 VIC, ColorMode;
            bool b16x9, bITU709;
            if (HDMIRX_GetAVIInfoFrame(&VIC, &ColorMode, &b16x9, &bITU709)) {
                OS_PRINTF("YYYYYYY \n");
                HDMITX_ChangeVideoTimingAndColor(VIC, ColorMode);
            }
            //SetupColorSpace();
#endif
        }
#endif //RX_ENABLED        

        //===== LED indication
        if (alt_nticks() > BlinkTime) {
            led_mask ^= 0x03;
            led_mask |= ~0x03;
            if (HDMITX_HPD())
                led_mask &= ~0x04;  // rx-source available (led is low-active)
            if (bRxVideoOn)
                led_mask &= ~0x08;  // rx-source available (led is low-active)

            IOWR(PIO_LED_BASE, 0, led_mask);
            //led_mask ^= 0xFF;

            BlinkTime = alt_nticks() + alt_ticks_per_second()/4;
        }

#if 0   // (DEBUG Purpose) dump register if button is pressed        
        alt_u8 mask;
        mask = (~IORD(PIO_BUTTON_BASE,0)) & 0x03;  // active low (PCI)
        if ((mask & 0x01)  == 0x01) { // BUTTON[0]
            HDMITX_DumpAllReg();
            HDMIRX_DumpAllReg();
        }
#endif


    }

}
コード例 #2
0
ファイル: cat66121_hdmi_hw.c プロジェクト: gopal02/aio
int cat66121_hdmi_sys_config_video(struct hdmi_video_para *vpara)
{
	struct fb_videomode *mode;
	HDMI_Aspec aspec ;
	HDMI_Colorimetry Colorimetry ;
	VIDEOPCLKLEVEL level ;

	if(vpara == NULL) {
		hdmi_err(hdmi->dev, "[%s] input parameter error\n", __FUNCTION__);
		return -1;
	}

	// output Color mode
	switch(vpara->output_color)
	{
		case HDMI_COLOR_YCbCr444:
			bOutputColorMode = F_MODE_YUV444 ;
			break ;
		case HDMI_COLOR_YCbCr422:
			bOutputColorMode = F_MODE_YUV422 ;
			break ;
		case HDMI_COLOR_RGB:
		default:
			bOutputColorMode = F_MODE_RGB444 ;
			break ;
	}
	// Set ext video
	mode = (struct fb_videomode *)hdmi_vic_to_videomode(vpara->vic);
	if(mode == NULL)
	{
		hdmi_err(hdmi->dev, "[%s] not found vic %d\n", __FUNCTION__, vpara->vic);
		return -ENOENT;
	}

	hdmi->tmdsclk = mode->pixclock;
	switch(vpara->vic)
	{
		case HDMI_640x480p60:
			pixelrep = 0 ;
			aspec = HDMI_4x3 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_480p60:
			pixelrep = 0 ;
			aspec = HDMI_4x3 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_480p60_16x9:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_720p60:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_1080i60:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_480i60:
			pixelrep = 1 ;
			aspec = HDMI_4x3 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_480i60_16x9:
			pixelrep = 1 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_1080p60:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_576p50:
			pixelrep = 0 ;
			aspec = HDMI_4x3 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_576p50_16x9:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_720p50:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_1080i50:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_576i50:
			pixelrep = 1 ;
			aspec = HDMI_4x3 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_576i50_16x9:
			pixelrep = 1 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU601 ;
			break ;
		case HDMI_1080p50:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_1080p24:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_1080p25:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;
		case HDMI_1080p30:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
			break ;

		case HDMI_720p30:
			pixelrep = 0 ;
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;		
		default:
			aspec = HDMI_16x9 ;
			Colorimetry = HDMI_ITU709 ;
	}
	if( Colorimetry == HDMI_ITU709 )
	{
		bInputColorMode |= F_VIDMODE_ITU709 ;
	}
	else
	{
		bInputColorMode &= ~F_VIDMODE_ITU709 ;
	}
	if( vpara->vic != HDMI_640x480p60)
	{
		bInputColorMode |= F_VIDMODE_16_235 ;
	}
	else
	{
		bInputColorMode &= ~F_VIDMODE_16_235 ;
	}
	
	if( (hdmi->tmdsclk*(pixelrep+1))>80000000L )
	{
		level = PCLK_HIGH ;
	}
	else if((hdmi->tmdsclk*(pixelrep+1))>20000000L)
	{
		level = PCLK_MEDIUM ;
	}
	else
	{
		level = PCLK_LOW ;
	}

	HDMITX_EnableVideoOutput(level,bInputColorMode,bOutputColorMode ,vpara->output_mode);

	if(vpara->output_mode == OUTPUT_HDMI) {
		cat66121_sys_config_avi(vpara->vic, bOutputColorMode, aspec, Colorimetry, pixelrep);
#ifdef OUTPUT_3D_MODE
		ConfigfHdmiVendorSpecificInfoFrame(OUTPUT_3D_MODE);
#endif

	}
	else {
		HDMITX_EnableAVIInfoFrame(FALSE ,NULL);
		HDMITX_EnableVSInfoFrame(FALSE,NULL);
	}
	setHDMITX_VideoSignalType(INPUT_SIGNAL_TYPE);
#ifdef SUPPORT_SYNCEMBEDDED
	if(INPUT_SIGNAL_TYPE & T_MODE_SYNCEMB)
	{
		setHDMITX_SyncEmbeddedByVIC(vpara->vic,INPUT_SIGNAL_TYPE);
	}
#endif

	return HDMI_ERROR_SUCESS;
}
コード例 #3
0
ファイル: hello_world.c プロジェクト: rcavazza/LPVR
void button_isr(void* context, alt_u32 id) {
    static alt_u32 NextActiveTime = 0;
    bool bUpdateVPG = FALSE;
    // static alt_u8 disp_mode = 0;
    alt_u8 pushbutton_mask;

    if (id != PIO_BUTTON_IRQ)
        return;

    // get the edge capture mask
    pushbutton_mask = IORD_ALTERA_AVALON_PIO_EDGE_CAP(
                          PIO_BUTTON_BASE) & 0x03;  // button0/1

    // Reset the edge capture register
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUTTON_BASE,0);

//    // the following function only work for tx-only mode
//    if (gDemoMode != DEMO_TX_ONLY)
//        return;

    if (pushbutton_mask & 0x02) { // BUTTON[1]     // play tone
//        gbPlayTone = TRUE;
//        #ifndef TX_VPG_COLOR_CTRL_DISABLED
        OS_PRINTF("===> BUTTON 1 \n");

//RxActivePort = RX_PORT_A;
//                    // 1. power down hdmi
//PowerDownHDMI();
//                    // 2. Select HDMI Port
        SelectHDMIPort(CAT_HDMI_PORTA);
////                    // 3. Call InitIT6605
        InitIT6605();

        if (alt_nticks() > NextActiveTime) {
//                gVpgColor++;
//                if (gVpgColor == COLOR_YUV422 && !HDMITX_IsSinkSupportYUV422())
//                    gVpgColor++;
//                if (gVpgColor == COLOR_YUV444 && !HDMITX_IsSinkSupportYUV444())
//                    gVpgColor++;
//                if (gVpgColor == COLOR_MODE_NUM)
//                    gVpgColor = 0;  // RGB
//                bUpdateVPG = TRUE;
//gh00st
            NextActiveTime = alt_nticks() + alt_ticks_per_second()/2;
        }
//        #endif //TX_VPG_COLOR_CTRL_DISABLED
    } else if (pushbutton_mask & 0x01) { // BUTTON[0]    // change pattern generotor's pattern
        OS_PRINTF("===> BUTTON 0 \n");
//RxActivePort = RX_PORT_B;
//                    // 1. power down hdmi
//PowerDownHDMI();
//                    // 2. Select HDMI Port
        SelectHDMIPort(CAT_HDMI_PORTB);
//                    // 3. Call InitIT6605
        InitIT6605();
        if (alt_nticks() > NextActiveTime) { // note. timer should have a highter IRQ priority than button
//            // next mode
//            if (gVpgMode == MODE_1920x1080i120)
//                gVpgMode = MODE_720x480;
//            else
//                gVpgMode++;
//            bUpdateVPG = TRUE;
            NextActiveTime = alt_nticks() + alt_ticks_per_second()/2;
        }
    }

    if (bUpdateVPG) {
        HDMITX_DisableVideoOutput();
        VPG_Config(gVpgMode, gVpgColor);
        SetupTxVIC(gVpgMode);
        SetupColorSpace();
        HDMITX_EnableVideoOutput();
    }

}