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

📄 ti2cmid.c.svn-base

📁 最新火热的CX32 源代码
💻 SVN-BASE
字号:
/**
 *  This code and information is part of Trident DPTV API (TDAPI)
 *
 *  Copyright (C) Trident Multimedia Technologies (Shanghai) Co., Ltd.
 *         2001-2004  All rights reserved.
 *
 *  This file contains Middle Level I2C Routines
 *
 *  Revision:
 *  08/01/2001     Created by Roger, Joy and Archie
 *
 */

#include "tdefs.h"
#include "ti2c.h"
#include "C91Cx27U.h"
#include "ioctrl.h"

#define ACK 0

#ifdef _CPU_X86_
extern Bool s_bReadSDA;
extern Word s_wParaport;

#endif

//extern GByte s_ucActiveI2Bus;
#ifndef wait_6u
extern BYTE PortBuf;
extern GByte g_bI2CNoWaiting;
Void wait_6u(Void)
{
	Word i;          
	//if(g_bI2CNoWaiting)  return;
	//if (s_ucActiveI2Bus) return;
	//for (i = 0; i<40; i++) asm("nop");
	//for (i = 0; i<40; i++) asm("nop");
	//for (i = 0; i<240; i++) asm("nop");
}


Void tdI2CEnableSDAWrite(Void)
{
/*    if(s_ucActiveI2Bus == 1)
        P70C = 1;
    else
*/
    //    P61C = 1;
    HI2C_SDA_OUTMODE;
}

#endif

/**
 * Sends 8 bits to the device via I2C bus.
 *
 * @param ucByte - The 8 bits to the device.
 *
 * @return _TRUE_ - Succeeded.
 *         _FALSE_ - Failed.
 *
 * @see tdI2CReceiveByte
 */
Bool tdI2CSendByte(Byte ucByte)
{
    IByte ucData;

    for(ucData = 0; ucData < 8; ucData++)
    {
        if(ucByte & 0x80)
            tdI2CSDA(1);
        else
            tdI2CSDA(0);
        tdI2CSCL(1);
       // wait_6u();
        asm("nop");
        tdI2CSCL(0);
        //wait_6u();
        asm("nop");
        ucByte <<= 1;
    }
#ifdef _CPU_X86_
    if (s_wParaport == 0x3d4 || s_wParaport == 0x3ce)
        s_bReadSDA = _TRUE_;
#endif
    tdI2CEnableSDARead();
   // wait_6u();
   asm("nop");
    tdI2CSCL(1);
   // wait_6u();
   asm("nop");
/*   if (tdI2CReadSCL() == 0)
    {
        return _FALSE_;
    }*/
    ucData = tdI2CReadSDA();
    tdI2CSCL(0);
    tdI2CEnableSDAWrite();

    return ucData == ACK;
}

/**
 * Receives 8 bits from the device via I2C bus.
 *
 * @param None.
 *
 * @return (Byte) The 8 bits from the device.
 *
 * @see tdI2CSendByte
 */
Byte tdI2CReceiveByte(Void)
{
    IByte ucB2,ucData;

    ucData = 0;
    tdI2CEnableSDARead();
    for(ucB2 = 0; ucB2 < 8; ucB2++)
    {
#ifdef _CPU_X86_
        if (s_wParaport == 0x3d4 || s_wParaport == 0x3ce)
            s_bReadSDA = _TRUE_;
#endif
        tdI2CSCL(1);
        //wait_6u();
        asm("nop");
        ucData <<= 1;
        if(tdI2CReadSDA())
            ucData |= 1;
        tdI2CSCL(0);
    }
    tdI2CEnableSDAWrite();
    return ucData;
}

/**
 * Sends Start signal to the device via I2C bus.
 *
 * @param None.
 *
 * @return None.
 *
 * @see tdStop
 * @see tdACK
 * @see tdNOACK
 */

Void tdStart(Void)
{
//    tdI2CSCL(0);
    tdI2CSDA(1); 
    //wait_6u();
    asm("nop");
    tdI2CSCL(1);
    //wait_6u();
    asm("nop");
    tdI2CSDA(0);
    //wait_6u();
    asm("nop");
    tdI2CSCL(0);
    //wait_6u();
    asm("nop");

}

/**
 * Sends Stop signal to the device via I2C bus.
 *
 * @param None.
 *
 * @return None.
 *
 * @see tdStart
 * @see tdACK
 * @see tdNOACK
 */
Void tdStop(Void)
{
    tdI2CSDA(0);
    tdI2CSCL(1);
    //wait_6u();
    asm("nop");
    tdI2CSDA(1);
    //wait_6u();
    asm("nop");

}

/**
 * Sends ACK signal to the device via I2C bus.
 *
 * @param None.
 *
 * @return None.
 *
 * @see tdStart
 * @see tdStop
 * @see tdNOACK
 */
Void tdACK(Void)
{
    tdI2CSDA(0);  
    //wait_6u();
    asm("nop");
    tdI2CSCL(1);
    asm("nop");
    //wait_6u();
    tdI2CSCL(0);
    asm("nop");
    //wait_6u();
}

/**
 * Sends NOACK signal to the device via I2C bus.
 *
 * @param None.
 *
 * @return None.
 *
 * @see tdStart
 * @see tdStop
 * @see tdACK
 */
Void tdNOACK(Void)
{
    tdI2CSDA(1);
    //wait_6u();
    asm("nop");
    tdI2CSCL(1);
    asm("nop");
    //wait_6u();
    tdI2CSCL(0);
    asm("nop");
    //wait_6u();
}


⌨️ 快捷键说明

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