📄 t_imia1.c
字号:
/*====================================================================
*
* 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 + -