📄 pt2314.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL ****************/
/*************** ****************/
/*************** Description : PT2314 control ****************/
/*************** ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : ****************/
/**********************************************************************/
#pragma NOAREGS
#include "general.h"
#include "pt2314.h"
#ifdef PT2314
//#define PLAYER_DEBUG
#ifdef PLAYER_DEBUG
extern xdata DWRD _dCreatedWB ;
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
//for I2C control related function declaration
extern BOOL fgI2CStart(BYTE bDevice) large;
extern BOOL fgI2CSend(BYTE bValue) large;
extern void vI2CStop(void) large;
extern void vI2CDelay2us(BYTE bValue) large;
extern structFlagI2C xdata sFlagI2C;
#ifdef MCU_ENCRYPT
extern BOOL fgDDCSend(BYTE bValue) large;
extern void vDDCRead(BYTE *prValue, BOOL fgSeq_Read) large;
extern BOOL fgDDCStart(BYTE bDevice) large;
extern void vDDCStop(void) large;
#endif
code BYTE _bVolImageTable[] = {
#ifdef AV_CENTER
0x3f,0x2b,0x26,0x20,0x1e,0x1a,0x18,0x16,0x14,0x12,0x10,0xf,0xe,0xd,0xc,0x0a,0x08,0x06,0x03,0x01,0x00
#else
0x3f,0x2e,0x2b,0x29,0x26,0x23,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,0xf,0xe,0xd,0xc,0xb,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
#endif
};
#ifdef YXT_LOST_PATCH
BYTE xdata _rewrite1;
BYTE xdata _rewrite2;
BYTE xdata _rewrite3;
BYTE xdata _rewrite4;
BYTE xdata _rewrite5;
BYTE xdata _rewrite6;
#endif
/************************************************************************
Function : vPT2314Write(BYTE bData)
Description :
Parameter :
Return :
************************************************************************/
#if 0//def PT2314
/************************************************************************
Function : BOOL fgI2CStart(BYTE bValue, BOOL fgRead)
Description : Start Routine
timing : SCL ^^^^|___|^|___|^|__~__|^|___|^|___|^|__~
SDA ^^|____/A6 \_/A5 \_~_/A0 \_/R/W\_/ACK\_~
(S)
|<--- start condition
Parameter : bDevice(7-bit slave address) + fgRead(R/W bit)
Return : TRUE : successful with ACK from slave
FALSE : bus (SCL = 0) or ACK failure
************************************************************************/
BOOL fgI2CStart_PT2314(BYTE bDevice) large
{
BYTE bBusDelayTemp = BUS_DELAY;
HI_SDATA_PT2314(); // make sure SDA released
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
HI_SCLK_PT2314(); // make sure SCL released
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
#ifdef PT2314
ACK_SCLK_PT2314();
#ifdef PLAYER_DEBUG
DRS232LogB((bReadBIM(BIM_RIODIH)&IOH_SDATA1), 0, 0, 0);
#endif
while((!bReadBIM(BIM_RIODIH)&IOH_SDATA1)&&(--bBusDelayTemp))
#else
while((!SCL) && (--bBusDelayTemp))
#endif
{
; // simple bus abritration
}
if(!bBusDelayTemp)
{
return(FALSE); // time out protection & timing delay
}
// vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
LO_SDATA_PT2314(); // start condition here
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
LO_SCLK_PT2314(); // ready for clocking
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
return(fgI2CSend_PT2314(bDevice));// slave address & R/W transmission
}
/************************************************************************
Function : BOOL fgI2CSend(BYTE bValue)
Description : Send Routine
timing : SCL ___|^|___|^|__~__|^|___|^|__
SDA __/D7 \_/D6 \_~_/D0 \_/ACK\_
Parameter : bValue(8-bit output data)
Return : TRUE : successful with ACK from slave
FALSE : bus (SCL = 0) or ACK failure
************************************************************************/
BOOL fgI2CSend_PT2314(BYTE bValue) large
{
BYTE bBitMask = 0x80;
// step 1 : 8-bit data transmission
while(bBitMask)
{
if(bBitMask & bValue)
{
HI_SDATA_PT2314();
}
else
{
LO_SDATA_PT2314();
}
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
HI_SCLK_PT2314(); // data clock in
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
LO_SCLK_PT2314(); // ready for next clock in
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
bBitMask = bBitMask >> 1; // MSB first & timing delay
}
// step 2 : slave acknowledge check
HI_SDATA_PT2314(); // release SDA for ACK polling
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
HI_SCLK_PT2314(); // start ACK polling
bBitMask = ACK_DELAY; // time out protection
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
if(!sFlagI2C.ADAC) // ADAC don't care about ACK
{
#ifdef PT2314
ACK_SDATA_PT2314();
#ifdef PLAYER_DEBUG
DRS232LogB((bReadBIM(BIM_RIODIH)&IOH_SDATA2), 0, 0, 1);
#endif
while((bReadBIM(BIM_RIODIH)&IOH_SDATA2)&&(--bBitMask))
#else
while(SDA && --bBitMask)
#endif
{
; // wait for ACK, SDA=0 or bitMask=0->jump to this loop
}
}
// vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
LO_SCLK_PT2314(); // end ACK polling
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
if(bBitMask)
{
return(TRUE); // return TRUE if ACK detected
}
else
{
return(FALSE); // return FALSE if time out
}
}
/************************************************************************
Function : void vI2CStop(void)
Description : Stop Routine
timing : SCL ___|^^^^^
SDA xx___|^^^
(P)
|<--- stop condition
Parameter : NONE
Return : NONE
************************************************************************/
void vI2CStop_PT2314(void) large
{
LO_SDATA_PT2314(); // ready for stop condition
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
HI_SCLK_PT2314(); // ready for stop condition
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
HI_SDATA_PT2314(); // stop condition here
vI2CDelay2us(1);
// SRVDelay10us(); // timing delay 2us
}
#endif
/************************************************************************
Function : vPT2314Write(BYTE bData)
Description :
Parameter :
Return :
************************************************************************/
#ifdef MCU_ENCRYPT
BOOL vPT2314Write(BYTE Data) large
{
sFlagI2C.fgBusBusy = 1;
if(!fgDDCStart(PT2314_ADDR)) // Write Command
{
sFlagI2C.fgBusBusy = 0;
return(FALSE);
}
if(!fgDDCSend(Data)) // Data Content Write
{
sFlagI2C.fgBusBusy = 0;
return(FALSE);
}
vDDCStop();
sFlagI2C.fgBusBusy = 0;
return(TRUE);
}
#else
BOOL vPT2314Write(BYTE Data) large
{
sFlagI2C.fgBusBusy = 1;
if(!fgI2CStart(PT2314_ADDR)) // Write Command
{
sFlagI2C.fgBusBusy = 0;
return(FALSE);
}
if(!fgI2CSend(Data)) // Data Content Write
{
sFlagI2C.fgBusBusy = 0;
return(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -