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

📄 access.c

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

#include "Header\INCLUDE.H"


#if (MCU_TYPE == MCU_MTV512)
///////////////////////////////////////////////////////////////////////
// SCL Processor
///////////////////////////////////////////////////////////////////////
void MCU_WriteI2cScl(bit Status)
{
    bIIC_SCL    = Status;
}	
///////////////////////////////////////////////////////////////////////
// SDA Processor
///////////////////////////////////////////////////////////////////////
void MCU_WriteI2cSda(bit Status)
{
    bIIC_SDA    = Status;
}	

bit MCU_ReadI2cSda(void)
{
    return (bIIC_SDA);
}		
///////////////////////////////////////////////////////////////////////
// RTD Reset Processor
///////////////////////////////////////////////////////////////////////
#if (RESET_TYPE == RESET_IN)
void MCU_WriteRtdReset(bit Status)
{
    bRTD_RST    = Status;
}

bit MCU_ReadRtdReset(void)
{
    return (bRTD_RST);
}	
#endif

	
///////////////////////////////////////////////////////////////////////
// RTD SDIO Processor
///////////////////////////////////////////////////////////////////////
/*
void MCU_WriteRtdSdio(bit Status)
{
       bRTD_SDIO_0 = Status;
}	

bit MCU_ReadRtdSdio(void)
{
       return(bRTD_SDIO_0);
}	

///////////////////////////////////////////////////////////////////////
// RTD Sclk Processor
///////////////////////////////////////////////////////////////////////
void MCU_WriteRtdSclk(bit Status)
{
    bRTD_SCLK   = Status;
}	
///////////////////////////////////////////////////////////////////////
// RTD Scsb Processor
///////////////////////////////////////////////////////////////////////
void MCU_WriteRtdScsb(bit Status)
{
    bRTD_SCSB   = Status;
}	
*/
///////////////////////////////////////////////////////////////////////
// VIDEO POWER Processor
///////////////////////////////////////////////////////////////////////
#if (VIDEO_CHIP != VDC_NONE)
void MCU_WriteVideoPower(bit Status)
{
    bVDC_PWR    = Status;
}	
#endif

///////////////////////////////////////////////////////////////////////
// PANEL POWER Processor
///////////////////////////////////////////////////////////////////////
void MCU_WritePanelPower(bit Status)
{
    bPANEL_PWR  = Status;
}	

///////////////////////////////////////////////////////////////////////
// BACKLIGHT POWER Processor
///////////////////////////////////////////////////////////////////////
void MCU_WriteBacklightPower(bit Status)
{	
    bLIGHT_PWR  = (Status);
}


///////////////////////////////////////////////////////////////////////
// VGA CONNECT Processor
///////////////////////////////////////////////////////////////////////
bit MCU_ReadVgaConnect(void)
{
    return (bVGA_CONNECT);
}

#endif

void BitDly(void)
{
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}

void I2CRead(unsigned char addr, unsigned char index, unsigned char count)
{
    unsigned char   n;

    if (count)
    {
        I2CSendAddr(addr, index, 0);
        
        I2CSendAddr(addr, 0, 1);

        count   = count - 1;

        for (n = 0; n < count; n++)     Data[n] = I2CGetByte(0);

        Data[count] = I2CGetByte(1);

        I2CSendStop();
    }
}

void I2CWrite(unsigned char *array)
{
    unsigned char   n, len;

    if (3 <= array[0])
    {
        len     = array[0];
        I2CSendAddr(array[1], array[2], 0);     

        for (n = 3; n < len; n++)   I2CSendByte(array[n]);

        I2CSendStop();
    }
}


unsigned char I2CGetByte(unsigned char ack) 
{
    unsigned char   r, m;

    r = 0;

#if (MCU_TYPE == MCU_STD8051)
    for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
    {
        bIIC_SCL    = 1;
        BitDly();                   // Delay

        r   = (r << 1) | bIIC_SDA;

        bIIC_SCL    = 0;
        BitDly();                   // Delay
    }  

    // Send ACK according to 'ack'
    bIIC_SDA    = (bit)(ack & 0x01);
    BitDly();                       // Delay
    
    bIIC_SCL    = 1; 
    BitDly();                       // Delay
    
    bIIC_SCL    = 0; 
    BitDly();                       // Delay
    
    bIIC_SDA    = 1;

#else
   
    for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
    {
        MCU_WriteI2cScl(_HIGH);
        BitDly();                   // Delay
        r   = (r << 1) | MCU_ReadI2cSda();
        MCU_WriteI2cScl(_LOW);
        BitDly();                   // Delay
    }  
    // Send ACK according to 'ack'
    MCU_WriteI2cSda((bit)(ack & 0x01));
    BitDly();                       // Delay
    MCU_WriteI2cScl(_HIGH);
    BitDly();                       // Delay
    MCU_WriteI2cScl(_LOW);
    BitDly();                       // Delay
    MCU_WriteI2cSda(_HIGH);

#endif

    return (r);
}

void I2CSendByte(unsigned char send)
{
    unsigned char   m;

#if (MCU_TYPE == MCU_STD8051)

    for (m = 0; m < 8; m++)
    {
        bIIC_SDA    = (bit)(send & 0x80);   // Send each bit, MSB first
        BitDly();

        bIIC_SCL    = 1;
        BitDly();

        bIIC_SCL    = 0;

        send    = send << 1;
    }

    bIIC_SDA    = 1;
    bIIC_SCL    = 1;
    BitDly();

    bIIC_SCL    = 0;
    BitDly();

#else

    for (m = 0; m < 8; m++)
    {
        MCU_WriteI2cSda((bit)(send & 0x80));   // Send each bit, MSB first
        BitDly();
        MCU_WriteI2cScl(_HIGH);
        BitDly();
        MCU_WriteI2cScl(_LOW);;
        send    = send << 1;
    }
    MCU_WriteI2cSda(_HIGH);
    MCU_WriteI2cScl(_HIGH);
    BitDly();
    MCU_WriteI2cScl(_LOW);;
    BitDly();

#endif
} 

void I2CSendAddr(unsigned char addr, unsigned char index, unsigned char rd)
{         
#if (MCU_TYPE == MCU_STD8051)

    bIIC_SCL    = 1;
    bIIC_SDA    = 0;    // Start
    BitDly();

    bIIC_SCL    = 0;
    I2CSendByte(addr + rd);             // Send address byte

    if (0 == rd)    I2CSendByte(index); // Send index byte  

#else

    MCU_WriteI2cScl(_HIGH);
    MCU_WriteI2cSda(_LOW);              // Start
    BitDly();
    MCU_WriteI2cScl(_LOW);;
    I2CSendByte(addr + rd);             // Send address byte
    
    if (0 == rd)    I2CSendByte(index); // Send index byte 

#endif
}

void I2CSendStop(void)
{
#if (MCU_TYPE == MCU_STD8051)

    bIIC_SDA    = 0; 
    BitDly();

    bIIC_SCL    = 1;
    BitDly();

    bIIC_SDA    = 1;
    BitDly();

#else

    MCU_WriteI2cSda(_LOW); 
    BitDly();
    MCU_WriteI2cScl(_HIGH);
    BitDly();
    MCU_WriteI2cSda(_HIGH);
    BitDly();

#endif
}

unsigned char RTDGetByte(void) 
{
#if (PARALLEL_PORT)

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    r0  = bRTD_SDIO_0;
    r1  = bRTD_SDIO_1;
    r2  = bRTD_SDIO_2;
    r3  = bRTD_SDIO_3;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    r4  = bRTD_SDIO_0;
    r5  = bRTD_SDIO_1;
    r6  = bRTD_SDIO_2;
    r7  = bRTD_SDIO_3;

    bRTD_SCLK   = 1;

    /*
    bRTD_SCLK = 1;
    bRTD_SCLK = 0;
    
    Reg = P0 & 0x0f;

    bRTD_SCLK = 1;
    bRTD_SCLK = 0;

    Reg = Reg | ((P0 & 0x0f) << 4);

    bRTD_SCLK   = 1;
    */

#else   // Serial port
    
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r0          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r1          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r2          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r3          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r4          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r5          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r6          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r7          = bRTD_SDIO_0;

    bRTD_SCLK   = 1;   

#endif

    return Reg;
}

void RTDSendByte(unsigned char send)
{
#if (PARALLEL_PORT)

    bRTD_SDIO_0 = (bit)(send & 0x01);
	bRTD_SDIO_1 = (bit)(send & 0x02);
	bRTD_SDIO_2 = (bit)(send & 0x04);
	bRTD_SDIO_3 = (bit)(send & 0x08);
	bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

	bRTD_SDIO_0 = (bit)(send & 0x10);
	bRTD_SDIO_1 = (bit)(send & 0x20);
	bRTD_SDIO_2 = (bit)(send & 0x40);
	bRTD_SDIO_3 = (bit)(send & 0x80);
	bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

	bRTD_SDIO_0 = 1;
	bRTD_SDIO_1 = 1;
	bRTD_SDIO_2 = 1;
	bRTD_SDIO_3 = 1;
	bRTD_SCLK   = 1;

    /*
    unsigned char ucTemp;

	ucTemp = P0 & 0xf0;

    P0 = ucTemp | (send & 0x0f);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    P0 = ucTemp | (send >> 4);

   	bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    P0 = ucTemp | 0x0f;
   	bRTD_SCLK   = 1;
    */

#else //serial port

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

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

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

⌨️ 快捷键说明

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