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

📄 access.c

📁 Realtek 公司的RTD2523A芯片原厂source code,没有被修改过的。
💻 C
📖 第 1 页 / 共 2 页
字号:

    bRTD_SDIO_0 = (bit)(send & 0x08);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = (bit)(send & 0x10);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = (bit)(send & 0x20);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = (bit)(send & 0x40);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = (bit)(send & 0x80);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = 1;
    bRTD_SCLK   = 1;

#endif
}

void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc)   // rd   : 0 - Write, 1 - Read
{
#if (PARALLEL_PORT)

    RTDSendByte(addr);

	bRTD_SDIO_0 = (bit)(rd & 0x01);
	bRTD_SDIO_1 = (bit)(inc & 0x01);
	
	bRTD_SCLK   = 0;

	bRTD_SDIO_0 = 1;
	bRTD_SDIO_1 = 1;
	bRTD_SCLK   = 1;

#else   // Serial port

    RTDSendByte(addr);

    bRTD_SDIO_0 = (bit)(rd & 0x01); 
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = (bit)(inc & 0x01); 
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDIO_0 = 1;

#endif
}

void RTDSendStop(void)
{
    bRTD_SCLK   = 0;
    bRTD_SCLK   = 1; 
    bRTD_SCSB   = 1;
}

void RTDRead(unsigned char index, unsigned char count, unsigned char inc)
{
    if (count)
    {
        bRTD_SCSB   = 0;

        RTDSendAddr(index, 1, inc);

        index   = 0;
        do
        {
            Data[index++]   = RTDGetByte();
        }
        while (--count);

		RTDSendStop();
    }
}

void RTDWrite(unsigned char data *array)
{
    unsigned char   len, m;

    do
    {
        if (0 == (array[0] & 0xfc))     return;

        len     = array[0] - 3;
        array   = array + 1;
        
        bRTD_SCSB   = 0;

        if (BURST == array[0])
        {
            RTDSendAddr(array[1], 0, N_INC);

            array   = array + 2;
            m       = array[0];

            do
            {
                RTDSendByte(m);
            }
            while (--len);

            array   = array + 1;
        }
        else
        {
            RTDSendAddr(array[1], 0, array[0]);

            array   = array + 2;
            do
            {
                RTDSendByte(*array++);
            }
            while (--len);
        }

		RTDSendStop();
    }
    while (1);
}

void RTDCodeW(unsigned char code *array)
{
    unsigned char   len, m;

    do
    {
        if (0 == (array[0] & 0xfc))     return;

        len     = array[0] - 3;
        array   = array + 1;

        bRTD_SCSB   = 0;

        if (BURST == array[0])
        {
            RTDSendAddr(array[1], 0, N_INC);

            array   = array + 2;
            m       = array[0];
            
            do
            {
                RTDSendByte(m);
            }
            while (--len);

            array   = array + 1;
        }
        else
        {
            RTDSendAddr(array[1], 0, array[0]);

            array   = array + 2;
            do
            {
                RTDSendByte(*array++);
            }
            while (--len);
        }

		RTDSendStop();
    }
    while (1);
}

void RTDOSDW(unsigned char code *array)
{
    unsigned char   len;
    do
    {
        if (array[0] == _end_)     return;
        
        bRTD_SCSB   = 0;
        RTDSendAddr(OSD_ROW_90,WRITE,Y_INC);
        RTDSendByte(*array++);
        RTDSendByte(*array++);
        RTDSendStop();

        bRTD_SCSB   = 0;
        RTDSendAddr(OSD_DATA_92,WRITE,N_INC);
        do
        {
            if (array[0] == _ext_)
            {
                if (array[2] == _bb_)
                {
                    do
                    {
                        len = array[3] - 1;
                        RTDSendByte(_ext_ + array[1]);
                    }
                    while(len--);
                    
                    array += 4;
                }
                else
                {
                    RTDSendByte(_ext_ + array[1]);
                    array += 2;
                }
            }
            else if (array[1] == _bb_)
            {
                len = array[2] - 1;
                do
                {
                    RTDSendByte(*array);
                }
                while(len--);
                
                array += 3;
            }
            else
                RTDSendByte(*array++);
        }
        while(array[0] != _nn_);
        
        array +=1 ;
        RTDSendStop();
    }
    while (1);
}


void RTDSetByte(unsigned char addr, unsigned char val)
{
    // Set Write Address
    bRTD_SCSB   = 0;   

    RTDSendAddr(addr, 0, 1);

    // Write one Byte
    RTDSendByte(val);

	RTDSendStop();
}

void RTDSetBit(unsigned char addr, unsigned char and, unsigned char or)
{
    // Set Read Address
    bRTD_SCSB   = 0;
    RTDSendAddr(addr, 1, 1);

    // Read 1 Byte
    or      = (RTDGetByte() & and) | or;

	RTDSendStop();

    // Set Write Address
    bRTD_SCSB   = 0;   
    RTDSendAddr(addr, 0, 1);

    // Write one Byte
    RTDSendByte(or);

	RTDSendStop();
}


#if (VLC_COMPRESS)

void Load_VLC_Font(unsigned char code *array, unsigned int start, unsigned int length)
{
	unsigned char m;
	unsigned char ucVLD0, ucVLD1, ucVLD2;


	start   += FONT_BASE_ADDRESS;

    bRTD_SCSB   = 0;   
    RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
    RTDSendByte((unsigned char)((start >> 8) & 0x000f) | 0xd0);
    RTDSendByte((unsigned char)(start & 0x00ff));
	RTDSendStop();

    ucCnt       = 0;
	ucByte_Temp = 0;
    pVLDArray   = array;

    bRTD_SCSB   = 0;   
    RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
	do
	{
		for (m = 0; m < 9; m++)
		{
            ucVLD0 = Get_VLD() << 4;
            ucVLD0 |= Get_VLD();
            ucVLD1 = Get_VLD() << 4;
            ucVLD1 |= Get_VLD();
            ucVLD2 = Get_VLD() << 4;
            ucVLD2 |= Get_VLD();
			
            // Rearrange the byte order
            RTDSendByte((ucVLD1 << 4) | (ucVLD2 & 0x0f));
            RTDSendByte((ucVLD2 & 0xf0) | (ucVLD0 & 0x0f));
            RTDSendByte((ucVLD0 & 0xf0) | (ucVLD1 >> 4));
        }
	}
	while (--length);

	RTDSendStop();	
}

unsigned char Get_VLD()
{
	unsigned char   ucZero_Cnt  = 0;


    while (!Getbit())   ucZero_Cnt  += 1;

    // Issac
    // we can get speed advantage if the most case in font-map is 0.
    if (0 == ucZero_Cnt)    return 0;

    switch (ucZero_Cnt)
    {
    case 1 :
        return (Getbit() ? 15 : 1);
    case 2 :
        return (Getbit() ? 8 : 2);
    case 3 :
        return (Getbit() ? 7 : 12);
    case 4 :
        if (Getbit())
        {
            return (Getbit() ? 9 : 4);
        }
        else
        {           
            if (Getbit())
            {
                return (Getbit() ? 5 : 10);
            }
            else
            {
                return (Getbit() ? 11 : 3);
            }
        }
    default :   // case 5 :                
        if (Getbit())
        {
            return (Getbit() ? 13 : 14);
        }
        else
        {
            Getbit();    
            
            // Issac :
            // bBit should be always 1 if table is correct ....
            
            return 6;   // if (bBit)   return 6;
        }
    }
}

bit Getbit()
{
    ucByte_Temp = (0 == ((ucCnt++) & 0x07)) ? *pVLDArray++ : (ucByte_Temp << 1);

    return (ucByte_Temp & 0x80);
}

#else   // Not using VLC_COMPRESS

//length represent the number of character
// character number of 1 bit font  = 1
// character number of 2 bit font  = 2
// character number of 4 bit font  = 4
// length = (1 bit font amount) x 1 + (2 bit font amount) x 2 + (4 bit font amount) x 4
void Load_Font(unsigned char code *array, unsigned int start, unsigned int length)
{
    unsigned char   m;
    unsigned char   ucTemp0, ucTemp1, ucTemp2;

    start = start * 9;
    start += FONT_BASE_ADDRESS;

    bRTD_SCSB   = 0;   
    RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
    RTDSendByte((unsigned char)((start >> 8) & 0x000f) | 0xd0);
    RTDSendByte((unsigned char)(start & 0x00ff));
	RTDSendStop();

	bRTD_SCSB   = 0;   
	RTDSendAddr(OSD_DATA_92, WRITE, N_INC);
    do
    {
        for (m = 0; m < 9; m++)
        {
            ucTemp0 = *array++;
            ucTemp1 = *array++;
            ucTemp2 = *array++;

            // Rearrange the byte order
            RTDSendByte((ucTemp1 << 4) | (ucTemp2 & 0x0f));
            RTDSendByte((ucTemp2 & 0xf0) | (ucTemp0 & 0x0f));
            RTDSendByte((ucTemp0 & 0xf0) | (ucTemp1 >> 4));
        }
    }
    while (--length);

	RTDSendStop();
}

#endif


#if (HDCP_ENABLE)
void KEYCodeW(unsigned char code *array)
{
    unsigned int m;  

   RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Reset the HDCP key download index
   RTDSetBit(DVI_CTRL1_AF, 0x7f,0x80);
	
    for(m = 0; m < 320; m++)   //Key 0 ~ Key39   
    {
		RTDSetByte(0xb1,array[m]);
    }	

    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Disable the Key Access Download port
    RTDSetBit(TMDS_INPUT_ENA_A1, 0x7f, 0x00);   // Turn on HDCP DDC channel  
}
#endif

⌨️ 快捷键说明

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