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

📄 t_imia1.c

📁 M3355的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*====================================================================
 *
 *  Copyright (C) 1997 Acer Labs, Inc.  All Rights Reserved.
 *
 *  File:       t_imia1.c
 *
 *  Contents: Create a timer for VFD
 *
 *
 *  History:
 *   Date               By      Reason
 *   ====               ==      ======
 *  21-Jun-1999    Wang
 ********************************************************************/
#include    <comsub.h>
#include "frntp.h"
#include <platform.h>
#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_DISABLE_)
#include <ui.h>
#include <gpio.h>

#if 0
#define C_KEY_POWER                 0
#define C_KEY_OPEN                  1
#define C_KEY_PLAY                  2
#define C_KEY_STOP                  3
#define C_KEY_SKIP_L                6
#define C_KEY_SKIP_R                7
#define C_KEY_PAUSE                 73

//#include <gpio.h>
#define	GPIODAT	   0xff101000
#define GPIORW	   0xff101004

#define inw(a)	    (*((volatile DWORD *)(a)))/* Input register value */
#define outw(a,v)      (*((volatile DWORD *)(a))=(v))/* Output register value */

#define readGPIODAT()	(inw(GPIODAT))
#define readGPIORW()	(inw(GPIORW))
#define writeGPIODAT(gpiodata)	(outw(GPIODAT,gpiodata))
#define writeGPIORW(gpiorw)	(outw(GPIORW,gpiorw))

//gamble add for LA_FP
#define SPI_SCK	(0x00000010)/* GPIO4 */
#define SPI_TXD	(0x00020000)/* GPIO17 SCI_MC */
#define SPI_RXD	(0x00000020)/* GPIO5 */
#define M_REQ	(0x00000008)/* GPIO3 VFD_CS*/
#define S_REQ      (0x00000080)/* GPIO7 SCI_MD */
//end gamble
#endif
#define SCANTIME	9
#define iSET_GPIO_R(dwPorts)       (writeGPIORW(readGPIORW() & (~(dwPorts))))
#define iSET_GPIO_W(dwPorts)      (writeGPIORW(readGPIORW() | (dwPorts)))
#if(USE_244_ENABLE==1)
#define iSET_GPIO_HI(dwPorts)      (writeGPIODAT(readGPIODAT() | (dwPorts)))
#define iSET_GPIO_LOW(dwPorts)   (writeGPIODAT(readGPIODAT() & (~(dwPorts))))
#else
#define iSET_GPIO_HI(dwPorts) iSET_GPIO_R(dwPorts)
#define iSET_GPIO_LOW(dwPorts) {iSET_GPIO_W(dwPorts);writeGPIODAT(readGPIODAT() & (~(dwPorts)));}
#endif
#define iGET_GPIO_DATA(dwPorts) (readGPIODAT() & (dwPorts))

#define READ_COMMAND 0x57
#define UP_STATE 0x00
#define DEBOUNCE_STATE 0x01
#define RPT_STATE	0x02

//adam 2004/04/12
#if(_SDRAM_MODE==_SDRAM_1M16x2_MODE_)
#define IR_DELAY(_time)     for(dw=0;dw<(_time/2);dw++);
#else
#define IR_DELAY(_time)     for(dw=0;dw<_time;dw++);
#endif



unsigned long TimerTick = 0;

unsigned long IRLastKey=0xFE;
unsigned char PKLastKey=0xFF;
//unsigned long PKKey;
unsigned long IROldKey;
unsigned long PKOldKey;
unsigned long IRKeyClock;
unsigned long PKKeyClock;
unsigned long IRKeyRPTCount;
unsigned long PKKeyRPTCount;
//unsigned long PKKeyRPTCount;
//unsigned long g_dwOldAPClock;
//long LastSReq=0;
long IRState=UP_STATE;
long PKState=UP_STATE;
#if (_IR==KENWOOD_IR)
extern unsigned long KeyTable[224];
#else
extern unsigned long KeyTable[112];
#endif

extern unsigned char IR_Custom_Code1  , IR_Custom_Code2 ;
extern unsigned char MPIR_Custom_Code1  , MPIR_Custom_Code2 ;
extern unsigned char tbl_bit_swap[256];
extern long FPMICOMPowerModeInitialFlag;
extern BOOL I2CIsBusy;
extern WORD g_UiCrntSubFunc;
BOOL IsWheeled=0;
#else
unsigned long TimerTick = 0;
#endif

/*-------------------------[Local Function]--------------------------
 * Function_Name: AP_Clock()
 *
 * Description:
 *    create a clock for AP use.
 *
 * Arguments:
 *     Input: none.
 *     Output: none.
 *
 * History:
 *     Date         By          Reason           Ver.
 *   ==========  =========    ================= ======
 *   2001/9/3     Tom Gao               Create it          0.1
 *------------------------------------------------------------------*/
 #if (_SDRAM_MODE==_SDRAM_4M16x1_MODE_||_SDRAM_MODE==_SDRAM_CARDVD_MODE_)
 #define COUNTS_PER_MICROSECOND1 (20)
 #elif(_SDRAM_MODE==_SDRAM_1M16x2_MODE_)
  #define COUNTS_PER_MICROSECOND1 (5)

 #endif
 

 void DelayuSec(unsigned long w)
{
    unsigned long dw;
    unsigned long dwCountSize;
    dwCountSize=w*COUNTS_PER_MICROSECOND1;
    for(dw=0;dw<dwCountSize;dw++)
        ;
}

void I2cDelay(WORD w)
{
    DWORD dw;
    DWORD dwCountSize;
    //dwCountSize=w*COUNTS_PER_MICROSECOND;
    dwCountSize=w*100;
    for(dw=0;dw<dwCountSize;dw++)
        ;
}


void AP_Clock()
{

#if (_TRANSFER_ALI_BOARD_ == _TRANSFER_ALI_BOARD_DISABLE_)
    //static long IRCount;
    //static long PKCount;
    long dw;
    long b;
    long bytecount;
    unsigned char RecData=0;
    unsigned char SendData=READ_COMMAND;
    unsigned char frontReceiveDdata[12];
    unsigned char checkSum;
    unsigned long TempKey;
    extern BYTE bZoomCount;//30826_03 Sean for speedup smooth Zoom and Screenfit

    g_dwAPClock ++;
    TimerTick++;
    //return;
    //    	if(!(g_dwAPClock%100))
    //    		EPRINTF("enter timer interrupt!!!!!!\n");
    //return;
    if(IRState!=UP_STATE)
        IRKeyClock++;
    if(PKState!=UP_STATE)
        PKKeyClock++;
    /*
        	if(LastSReq && !iGET_GPIO_DATA(S_REQ))
        	{
        		LastSReq=0;
        		goto haha;
        	}
        	if(iGET_GPIO_DATA(S_REQ))
        		LastSReq=1;
        	else
        		LastSReq=0;
        	return;
        	
    //return;
     //   	#if 0
     haha:
     //*/
    //if(FPMICOMPowerModeInitialFlag)	//10ms??//(!(g_dwAPClock%9)) &&
    if((!(g_dwAPClock%SCANTIME)) && FPMICOMPowerModeInitialFlag && !I2CIsBusy)
    {//read key from lg front panel
        //IRCount++;
        //PKCount++;
#if(USE_244_ENABLE==1)
        iSET_GPIO_W(SPI_TXD);
#endif
        if(iGET_GPIO_DATA(S_REQ)) //s_req is high
            return;
        //****	front_interface_receive(11)   ****//
	IR_DELAY(600);
        if(iGET_GPIO_DATA(S_REQ)) //s_req is high
            return;

        //pull M_REQ low
        //		iSET_GPIO_W(M_REQ);
        iSET_GPIO_LOW(M_REQ);
        //(writeGPIODAT(readGPIODAT() & 0x7fffffff & (~(M_REQ))));

        //delay 20--40us
	IR_DELAY(600);
        if(iGET_GPIO_DATA(S_REQ)) //s_req is high
        {
            //			iSET_GPIO_R(M_REQ);
            iSET_GPIO_HI(M_REQ);
            return;
        }

        //send read command
        for(b=0;b<8;b++)
        {
            RecData>>=1;
            //(writeGPIODAT(readGPIODAT() & 0x7fffffff & (~(SPI_SCK))));/* pull SPI_SCK low */
            // 	       iSET_GPIO_W(SPI_SCK);
            iSET_GPIO_LOW(SPI_SCK);
            if(SendData&0x01)
                //   (writeGPIODAT(readGPIODAT() & 0x7fffffff | (SPI_TXD)));/* pull SPI_TXD high */
                //	iSET_GPIO_R(SPI_TXD);
                iSET_GPIO_HI(SPI_TXD);
            else
            {
                //(writeGPIODAT(readGPIODAT() & 0x7fffffff & (~(SPI_TXD))));/* pull SPI_TXD low */
                //	iSET_GPIO_W(SPI_TXD);
                iSET_GPIO_LOW(SPI_TXD);
            }
		IR_DELAY(50);
            //(writeGPIODAT(readGPIODAT() & 0x7fffffff | (SPI_SCK)));/*pull SPI_SCK high*/
            //       	iSET_GPIO_R(SPI_SCK);
            iSET_GPIO_HI(SPI_SCK);
		IR_DELAY(20);
            if(iGET_GPIO_DATA(SPI_RXD))
                RecData|=0x80;/* SPI_RXD=1 */
            else
                RecData&=0x7f;/* SPI_RXD=0 */
		IR_DELAY(20);
            SendData>>=1;
        }
        frontReceiveDdata[0]=RecData;
        checkSum = READ_COMMAND;

        //delay 20-40us
	IR_DELAY(800);
        if(iGET_GPIO_DATA(S_REQ)) //s_req is high
        {
            //			iSET_GPIO_R(M_REQ);
            iSET_GPIO_HI(M_REQ);
            return;
        }

        //receive 10 bytes
        for(bytecount=1; bytecount <10; ++bytecount)
        {
            // send data  byte
            for(b=0;b<8;b++)
            {
                RecData>>=1;
                //(writeGPIODAT(readGPIODAT() & 0x7fffffff & (~(SPI_SCK))));/* pull SPI_SCK low */
                // 	       	iSET_GPIO_W(SPI_SCK);
                iSET_GPIO_LOW(SPI_SCK);
		IR_DELAY(50);
                //(writeGPIODAT(readGPIODAT() & 0x7fffffff | (SPI_SCK)));/*pull SPI_SCK high*/
                //        		iSET_GPIO_R(SPI_SCK);
                iSET_GPIO_HI(SPI_SCK);
		IR_DELAY(20);
                if(iGET_GPIO_DATA(SPI_RXD))
                    RecData|=0x80;/* SPI_RXD=1 */
                else
                    RecData&=0x7f;/* SPI_RXD=0 */
		IR_DELAY(20);
            }
            frontReceiveDdata[bytecount] = RecData;
            checkSum = checkSum ^ RecData;
            // wait 40uSec
		IR_DELAY(600);
            if(iGET_GPIO_DATA(S_REQ)) //s_req is high
            {
                //			iSET_GPIO_R(M_REQ);
                iSET_GPIO_HI(M_REQ);
                return;
            }
        }
#if 0
        for(b=0;b<8;b++)
        {
            RecData>>=1;
            //(writeGPIODAT(readGPIODAT() & 0x7fffffff & (~(SPI_SCK))));/* pull SPI_SCK low */
            iSET_GPIO_W(SPI_SCK);
            iSET_GPIO_LOW(SPI_SCK);

            for(dw=0;dw<20;dw++)
                ;
            //(writeGPIODAT(readGPIODAT() & 0x7fffffff | (SPI_SCK)));/*pull SPI_SCK high*/
            iSET_GPIO_R(SPI_SCK);
            for(dw=0;dw<2;dw++)
                ;
            if(iGET_GPIO_DATA(SPI_RXD))
                RecData|=0x80;/* SPI_RXD=1 */
            else
                RecData&=0x7f;/* SPI_RXD=0 */
            for(dw=0;dw<20;dw++)
                ;
            SendData>>=1;
        }
        frontReceiveDdata[10]=RecData;
        checkSum = checkSum ^ frontReceiveDdata[10];
#endif
        //pull M_REQ high
        //(writeGPIODAT(readGPIODAT() & 0x7fffffff | (M_REQ)));
        //	iSET_GPIO_R(M_REQ);
        iSET_GPIO_HI(M_REQ);
        /*
        	IPRINTF("Front read:%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x  c/s:%02x \n",
        			frontReceiveDdata[0],
        			frontReceiveDdata[1],

⌨️ 快捷键说明

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