?? nec_fp.c
字號:
/* **************************************************************************************
* Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: $Workfile: nec_fp.c $
*
* Description:
* ============
* Nec Front Panel
*
* Log:
* ====
* $Revision: 7 $
* Last Modified by $Author: Billt $ at $Modtime: 04-03-30 11:07 $
****************************************************************************************
* Updates:
****************************************************************************************
* $Log: /I76/I76_Customer/I76_Mico/FP/nec_fp/nec_fp.c $
*
* 7 04-03-30 20:47 Billt
* set output for Dout when needed
*
* 6 03-06-17 18:26 Admin
* Merge for ExinoII project
*
* 5 03-04-21 19:11 Billt
* Added FPDATA_USE_ONE_PIN
*
* 4 1/07/03 10:34p Leslie
* Add SLOW_FP
*
* 3 12/09/02 5:58p Leslie
* Support D16311_BT224_VFD
*
* 4 23/04/02 9:26 Nirm
* - Added dependency in "Config.h".
*
* 3 9/01/02 18:35 Nirm
* Corrected Include-paths.
*
* 2 25/12/01 15:55 Atai
* Code cleaning
**************************************************************************************** */
#include "Config.h" // Global Configuration - do not remove!
#ifndef DIRECT_KEY_SCAN
#include "Include\sysdefs.h"
#include "Playcore\Timing\timing.h"
#include "Devices\FP\fp_ll.h"
#include "Devices\FP\NEC_FP\nec_fp.h"
#include "Devices\FP\NEC_FP\nec_io.h"
#include "Kernel\Ker_API.h"
static BYTE p_keycode[BYTES_USED_TO_SCANKEY];
extern BYTE g_vfd_grid_count;
/****************************************************************************/
void VFD_LL_Init(BYTE grid_count)
{
BYTE i;
for (i=0; i<BYTES_USED_TO_SCANKEY; i++)
p_keycode[i] = 0;
VFD_LL_SetGrid(grid_count);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_CLK(1);
Ker_DelayUs(1);
}
/****************************************************************************/
void VFD_LL_SetGrid(BYTE grid_count)
{
BYTE real_grid_value;
switch (grid_count)
{
#ifdef UPD_16311
case 8:
real_grid_value = G8_S20;
break;
case 9:
real_grid_value = G9_S19;
break;
case 10:
real_grid_value = G10_S18;
break;
case 11:
real_grid_value = G11_S17;
break;
case 12:
real_grid_value = G12_S16;
break;
case 13:
real_grid_value = G13_S15;
break;
case 14:
real_grid_value = G14_S14;
break;
case 15:
real_grid_value = G15_S13;
break;
case 16:
real_grid_value = G16_S12;
break;
default:
real_grid_value = G14_S14;
break;
#else
case 4:
real_grid_value = G4_S16;
break;
case 5:
real_grid_value = G5_S16;
break;
case 6:
real_grid_value = G6_S16;
break;
case 7:
real_grid_value = G7_S15;
break;
case 8:
real_grid_value = G8_S14;
break;
case 9:
real_grid_value = G9_S13;
break;
case 10:
real_grid_value = G10_S12;
break;
case 11:
real_grid_value = G11_S11;
break;
default:
real_grid_value = G11_S11;
break;
#endif //#ifdef UPD_16311
}
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( DISPLAY_MODE| real_grid_value );
Ker_DelayUs(1);
}
/****************************************************************************/
void VFD_LL_SetDim(BYTE vfd_dim_level)
{
BYTE real_dim_value;
switch (vfd_dim_level)
{
case 0:
real_dim_value = 0;
break;
case 1:
real_dim_value = GON|DIM_2_16;
break;
case 2:
real_dim_value = GON|DIM_4_16;
break;
case 3:
real_dim_value = GON|DIM_10_16;
break;
case 4:
real_dim_value = GON|DIM_11_16;
break;
case 5:
real_dim_value = GON|DIM_12_16;
break;
case 6:
real_dim_value = GON|DIM_13_16;
break;
case 7:
real_dim_value = GON|DIM_14_16;
break;
default:
real_dim_value = GON|DIM_14_16;
break;
}
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( DISPLAY_CONTROL | real_dim_value );
Ker_DelayUs(1);
}
/****************************************************************************/
#ifdef D_NEW_VFD
void VFD_LL_WriteDisplayRAM( BYTE grid, BYTE data )
{
if (0 == grid)
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | 0);
Ker_DelayUs(1);
}
VFD_LL_WriteByte( data );
Ker_DelayUs(1);
#ifdef UPD_16311
if (grid == (3*g_vfd_grid_count - 1))
#else
if (grid == (2*g_vfd_grid_count - 1))
#endif
{
Set_Fp_STB(1);
Ker_DelayUs(1);
}
}
#else
void VFD_LL_WriteDisplayRAM( BYTE grid, WORD data )
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
// add for support for upd16311
#ifdef UPD_16311
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid));
#else
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | 2*grid);
#endif // #ifdef UPD_16311
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) (data & 0x00ff) );
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
// add for support for upd16311
#ifdef UPD_16311
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid+1));
#else
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | 2*grid+1);
#endif //#ifdef UPD_16311
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) (data >> 8) );
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
}
#endif
/****************************************************************************/
/*
By Jerry CAI
Nov 30, 2002
*/
#ifdef D16311_BT224_VFD
void VFD_LL_WriteDisplayRAM_InDword( BYTE grid, DWORD data )
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3));
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) (data & 0x00ff) );
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3+1));
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ((data >> 8) & 0x00ff) );
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3+2));
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE) ((data >> 16) & 0x00ff) );
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
}
#endif
/****************************************************************************/
void VFD_LL_RefreshLED( BYTE led )
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_LIGHTS ));
Ker_DelayUs(1);
VFD_LL_WriteByte( led );
Ker_DelayUs(1);
Set_Fp_STB(1);
}
BYTE VFD_LL_ReadKeyScan( BYTE*** Key_Code )
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
/*
* Note: The wait states are necessary because
* FP needs to have some time between
* writes.
*/
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | READ_KEYSCAN ));
Set_FpDout_To_Input();
Ker_DelayUs(1);
VFD_LL_ReadByte( p_keycode );
Ker_DelayUs(1);
VFD_LL_ReadByte( p_keycode+1 );
Ker_DelayUs(1);
VFD_LL_ReadByte( p_keycode+2 );
Set_FpDout_To_Output();
Ker_DelayUs(1);
Set_Fp_STB(1);
**Key_Code = p_keycode;
return BYTES_USED_TO_SCANKEY;
}
/****************************************************************************/
void VFD_LL_ReadInputs( BYTE** inputs )
{
Ker_DelayUs(1);
Set_Fp_STB(1);
Ker_DelayUs(1);
Set_Fp_STB(0);
Ker_DelayUs(1);
VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | READ_INPUTS ) );
Set_FpDout_To_Input();
Ker_DelayUs(1);
VFD_LL_ReadByte( *inputs );
Set_FpDout_To_Output();
Ker_DelayUs(1);
Set_Fp_STB(1);
}
/****************************************************************************/
static void VFD_LL_WriteByte( BYTE byte )
{
BYTE i;
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(40);
#endif
Set_FpDout_To_Output();
Ker_DelayUs(1);
for( i=0x01; (i<=0x80 && i!=0); i<<=1 ) // Change "&" into "&&" for condition
{
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(5);
#endif
Set_Fp_CLK(0);
Set_Fp_DOUT((byte & i) ? 1:0);
Set_Fp_CLK(1);
}
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(40);
#endif
}
/****************************************************************************/
static void VFD_LL_ReadByte( BYTE *byte )
{
BYTE i;
Set_Fp_CLK(1);
*byte = 0; // Clear byte first
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(40);
#endif
for( i=0; i<7; i++ )
{
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(5);
#endif
Set_Fp_CLK(0);
*byte |= ( Get_Fp_DIN() ? 0x80:0 );
Set_Fp_CLK(1);
*byte >>= 1;
}
Set_Fp_CLK(0);
*byte |= ( Get_Fp_DIN() ? 0x80:0 );
Set_Fp_CLK(1);
//ZCO LC121702
#ifdef SLOW_FP
Ker_DelayUs(40);
#endif
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -