📄 dspctrl.c.bak
字号:
/********************************************************************************/
/*!
@file dspctrl.c
@brief 昞帵惂屼張棟
@version $Revision: 2.00 $
@date 2007/XX/XX
@author Matsushita Electronics Co.,Ltd.
*/
/********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <itron.h>
#include <kernel.h>
#include <kernel_id.h>
#include "..\gerda_dd\include\gerda_dd.h"
#include "..\gerda_dd\include\dd_sys.h"
#include "..\gerda_dd\include\gerda_reg.h"
#include "..\gerda_dd\dsp\dst_ram.h"
#include "..\gerda_dd\dsp\ini_def.h"
#include "..\texture\texdata.h"
#include "systype.h"
#include "sr103se60pub.h"
#include "option.h"
#include "if_cmd.h"
#include "if_mxr.h"
#include "if_txtid.h"
#include "parameter.h"
#include "dd_param.h"
#include "dspctrl.h"
/********************************************************************/
/* 儅僋儘掕媊 */
/********************************************************************/
#define touch(x) ((x) = 0) /* WARNING 懳嶔 */
/********************************************************************/
/* 娭悢愰尵 */
/********************************************************************/
void vDSP_raminitial(void); /* 曄悢弶婜壔 */
void vDSP_dspinitial(void); /* 昞帵乛昤夋弶婜壔 */
void vDSP_initdsp(void); /* 婲摦夋柺昤夋 */
void vDSP_set_mode(void); /* 僐儅儞僪庴棟張棟 */
void vDSP_set_texture(void); /* 僥僋僗僠儍揥奐乮俽俢俼俙俵乯*/
#if (SSPFMODE == SSPF_V2)
void vDSP_drw_haikei(void); /* 攚宨昤夋 */
#endif /* SSPFMODE */
int putc(int,FILE *stream);
UCHAR ucLIB_bcd2hex(UCHAR);
void vDSP_timecount5ms(void);
void vDSP_timecount100ms(void);
void TSC_Reaed(void);
/********************************************************************/
/* 奜晹娭悢愰尵 */
/********************************************************************/
#if (MXMODE == MXRON)
extern int MXEventKeyDown(unsigned int keyCode, int reserved);
#endif
/********************************************************************/
/* 曄悢愰尵 */
/********************************************************************/
UCHAR ucDSP_mode; /* 儌乕僪曄悢 */
static UCHAR cmdID; /* 僐儅儞僪俬俢 */
static UCHAR cmd[100]; /* 僐儅儞僪 */
#if (MXMODE == MXROFF)
T_MSG_MODE snd_mode;
#endif
#if ((T0UCHPANEL_THOOSE==THOOSE)||(ANALG_PANEL_THOOSE==THOOSE))
extern USHORT CONTER;
#define D_LCDCLK bCPU_P01OE
#define D_LCDDAT bCPU_P00OE
#define I_LCDCLK bCPU_ID1
#define I_LCDDAT bCPU_ID0
#define LCD_DAT bCPU_P00GPDO
#define LCD_CLK bCPU_P01GPDO
#define SDA LCD_DAT
#define SCL LCD_CLK
#define ISDA I_LCDDAT
#define ISCL I_LCDCLK
//ULONG time=0;
#endif
#if (ANALG_PANEL_THOOSE==THOOSE)
typedef struct tagRegAdrVal
{
ui8_t ucRegAdr;
ui8_t ucRegVal;
}REGADRVAL;
/* T108寄存器Page0 寄存器初始化数据 */
const REGADRVAL stInitT10xP0[]={
0x0E , 0xFF,
0x0F , 0xE0,
0x16 , 0xD3,
0x18 , 0x01,
0x19 , 0x00,
0x1A , 0x87,
0x1C , 0xE0,
0x30 , 0x03,
0x31 , 0x50,
0x32 , 0x3F,
0x33 , 0xBF,
0x3F , 0x00,
0x40 , 0x00,
0x54 , 0xE0,
0x55 , 0x01,
0x56 , 0xEA,
0x58 , 0x51,
0x59 , 0xD5,
0x5A , 0x07,
0x5B , 0x01,
0x5C , 0x10,
0x60 , 0x01,
0x66 , 0x88,
0x70 , 0x30,
0x81 , 0xB7,
0x82 , 0xC1,
0x85 , 0x00,
0x90 , 0x80,
0x91 , 0x07,
0x9E , 0x80,
0x9F , 0x80,
0xA0 , 0x80,
0xA1 , 0x80,
0xA8 , 0x80,
0xA9 , 0x80,
0xB0 , 0x3A,
0xB2 , 0x1F,
0xB8 , 0x5C,
0xB9 , 0x02,
0xBA , 0x00,
0xBB , 0x01,
0xBC , 0x15,
0xC0 , 0x02,
0xC1 , 0x08,
0xC5 , 0x77,
0xC6 , 0x97,
0xC7 , 0x05,
0xCB , 0x00,
0xCC , 0x35,
0xE0 , 0xB9,
0xE1 , 0xFC,
0xE3 , 0x10,
0xE5 , 0x77,
0xE6 , 0x2C,
0xF0 , 0x50,
};
//T108寄存器Page2 寄存器初始化数据
const REGADRVAL stInitT10xP2[]={
0x20 , 0x21,
0x21 , 0x79,
0x22 , 0x2D,
0x23 , 0x02,
0x24 , 0x0C,
0x25 , 0x4B,
0x26 , 0x02,
0x27 , 0x1C,
0x28 , 0x02,
0x29 , 0x29,
0x2A , 0x00,
0x2B , 0x00,
0x2C , 0x18,
0x2D , 0x03,
0x2E , 0x00,
0x2F , 0x00,
0x30 , 0x01,
0x31 , 0xFB,
0x32 , 0x01,
0x33 , 0x37,
0x35 , 0x06,
0x50 , 0x30,
0x51 , 0x10,
0x52 , 0x10,
0xD5 , 0x02,
0xD7 , 0xE0,
0xD8 , 0x01,
0xD9 , 0x19,
0xDB , 0xEA,
0xFF , 0x00,
};
#endif
#if ((T0UCHPANEL_THOOSE==THOOSE)||(ANALG_PANEL_THOOSE==THOOSE))
void DelayLongTIME(ULONG time)
{
ULONG i,j,k=1000;
for(i=0;i<time;i++)
{ for(j=0;j<k;j++)
;
}
}
void DelayTIME(ULONG time)
{
ULONG i;
for(i=0;i<time;i++)
;
}
void I2CDelay(void)
{
ULONG i,delayteme=100;
for(i=0;i<delayteme;i++)
;
}
void StartCondition(void)
{
ui8_t cTWtrytime=0;
D_LCDDAT = 0;
D_LCDCLK = 0;
#if 0/*加快通信速度*/
SDA = 1;
SCL = 1;
SDA = 0;
#else
//while(++cTWtrytime)
//{
SDA = 1;
SCL = 1;
I2CDelay();
SDA = 0;
//D_LCDDAT = 1;
//D_LCDCLK = 1;
/*if((ISCL!=0)&&(ISDA==0))
{
D_LCDDAT = 0;
D_LCDCLK = 0;
break;
}*/
//}
#endif
}
ui8_t Send_Byte(ui8_t cData)
{
ui8_t ix, cAcknowledge=0;
D_LCDDAT = 0;
// D_LCDCLK = 0;
I2CDelay();
for (ix = 0; ix < 8; ix++) {
SCL = 0;
// I2CDelay();
if(cData&0x80)
SDA = 1;
else
SDA = 0;
cData<<=1;
I2CDelay();
SCL = 1;
I2CDelay();
#if 0/*add i2c ACK message to assure steady communication*/
D_LCDCLK = 0;
while(ISCL==0 && ++cTWtrytime)
{ };
D_LCDCLK = 1;
#endif
}
//I2CDelay();
SCL = 0;
// I2CDelay();
SDA = 1;
I2CDelay();
SCL = 1;
#if 0 /*add i2c ACK message to assure steady communication*/
D_LCDCLK = 0;
while(ISCL==0)
{ };
D_LCDCLK = 1;
#endif
D_LCDDAT= 1;
I2CDelay();
if (ISDA != 0)
cAcknowledge = 1;
D_LCDDAT= 0;
//I2CDelay();
SCL = 0;
return(cAcknowledge);
}
void StopCondition(void)
{
ui8_t cTWtrytime=0;
I2CDelay();
D_LCDDAT = 0;
//D_LCDCLK = 0;
SDA = 0;
I2CDelay();
SCL = 1;
I2CDelay();
/*D_LCDCLK = 1;
while (ISCL == 0 && ++cTWtrytime) {}
I2CDelay();
D_LCDCLK = 1;
*/
SDA = 1;
}
ui8_t Read_Byte(ui8_t cNum)
{
ui8_t ix,cTWtrytime=0;
ui8_t cRetval=0;
I2CDelay();
D_LCDDAT = 1;
//P_LCDDAT = 1;
D_LCDCLK = 0;
I2CDelay();
SCL = 0;
I2CDelay();
for (ix=0; ix<8; ix++) {
SCL = 1;
//D_LCDCLK = 1;
I2CDelay();
//while(ISCL==0&& ++cTWtrytime){}
if(ISDA==1)
cRetval=(cRetval|(1<<(7-ix)));
//cRetval = (ISDA!=0)? (cRetval|(1<<(7-ix))):cRetval ;
//D_LCDCLK = 0;
//I2CDelay();
SCL = 0;
I2CDelay();
}
//P_LCDDAT = 0;
D_LCDDAT = 0;
if(cNum==1)
SDA = 1;
else
SDA = 0;
SCL = 1;
I2CDelay();
//D_LCDCLK = 1;
//while(ISCL==0&& ++cTWtrytime){}
//D_LCDCLK = 0;
SCL = 0;
SDA = 1;
return cRetval;
}
/********************************************************************/
/* 儅僋儘掕悢愰尵 */
/********************************************************************/
ui8_t I2CReadByte(ui8_t cDevAddr, ui8_t cReg)
{
ui8_t cResult = 0;
StartCondition();
if (Send_Byte(cDevAddr))
return 0;
if (Send_Byte(cReg))
return 0;
StartCondition();
if (Send_Byte(cDevAddr|0x01))
return 0;
cResult = Read_Byte(1);
StopCondition();
return cResult;
}
/********************************************************************/
/* 掕悢愰尵 */
/********************************************************************/
/*****************************************************************************\
Function: I2CWriteByte(uChar cDevAddr, uChar cReg, uChar cData)
Description: Write a byte into special position
Parameter: cDevAddr ---the Page of T11x
0x50:Page0
0x52:Page1
0x54:Page2
cReg --- the index of register in pageX.
cData ---the value set into T11x
Return: operation result
0:write fail
1:write succes
Note: SOFTWARE control
\*****************************************************************************/
ui8_t I2CWriteByte(ui8_t cDevAddr, ui8_t cReg, ui8_t cData)
{
StartCondition();
cDevAddr &= 0xFE;
if (!Send_Byte(cDevAddr)) {
if (!Send_Byte(cReg)) {
if (!Send_Byte(cData)) {
StopCondition();
return(0);
}
}
}
StopCondition();
return(1);
}
#endif
#if (ANALG_PANEL_THOOSE==THOOSE)
void InitT10x(void)
{
ui8_t RegIndex,RegAdr;
/** PAGE 1 **/
RegIndex=0;
RegAdr=stInitT10xP0[0].ucRegAdr;
/* copy Init data to T112 */
while (RegAdr !=0xF0)
{
I2CWriteByte(0x50,RegAdr,stInitT10xP0[RegIndex].ucRegVal);
RegAdr=stInitT10xP0[++RegIndex].ucRegAdr;
}
/** PAGE 2 **/
// I2CgggDelay();
RegIndex=0;
RegAdr=stInitT10xP2[0].ucRegAdr;
while (RegAdr != 0xFF)
{
I2CWriteByte(0x50+2,RegAdr,stInitT10xP2[RegIndex].ucRegVal);
RegAdr=stInitT10xP2[++RegIndex].ucRegAdr;
}
}
#endif
#if (T0UCHPANEL_THOOSE==THOOSE)
void I2Cm_nAck (void)
{
SDA = 1;
D_LCDDAT = 0;/*pull up*/
/*I2Cm_Clock();*/
SCL = 1;
I2CDelay();
SCL = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -