📄 lcd_if.h
字号:
/******************************************************************************
* WIRELESS COMMUNICATION SYSTEM DEVELOPMENT
*
* (C) 2002 Texas Instruments France. All rights reserved
*
* Author : Philippe MARTINEZ
*
*
* Important Note
* --------------
*
* This S/W is a preliminary version. It contains information on a product
* under development and is issued for evaluation purposes only. Features
* characteristics, data and other information are subject to change.
*
* The S/W is furnished under Non Disclosure Agreement and may be used or
* copied only in accordance with the terms of the agreement. It is an offence
* to copy the software in any way except as specifically set out in the
* agreement. No part of this document may be reproduced or transmitted in any
* form or by any means, electronic or mechanical, including photocopying and
* recording, for any purpose without the express written permission of Texas
* Instruments Inc.
*
******************************************************************************
*
* FILE NAME: lcd_if.h
*
*
* PURPOSE: Header file for the LCD Interface Driver.
*
*
* FILE REFERENCES:
*
* Name IO Description
* ------------- -- ---------------------------------------------
*
*
*
* EXTERNAL VARIABLES:
*
* Source:
*
* Name Type IO Description
* ------------- --------------- -- ------------------------------
*
*
*
* EXTERNAL REFERENCES:
*
* Name Description
* ------------------ -------------------------------------------------------
*
*
*
* ABNORMAL TERMINATION CONDITIONS, ERROR AND WARNING MESSAGES:
*
*
*
* ASSUMPTION, CONSTRAINTS, RESTRICTIONS:
*
*
*
* NOTES:
*
*
*
* REQUIREMENTS/FUNCTIONAL SPECIFICATION REFERENCES:
*
*
*
*
* DEVELOPMENT HISTORY:
*
* Date Name(s) Version Description
* ----------- -------------- ------- -------------------------------------
* 30-Oct-2002 Philippe MARINTEZ 0.0.1 First implementation
*
* ALGORITHM:
*
*
*****************************************************************************/
#include <stdlib.h>
#include "sys_types.h"
#include "rvm/rvm_gen.h" /* Generic RVM types and functions. */
#include "nan/board/nan_hw_functions.h"
#include "config/rv_swe.h"
#ifdef RVM_NAN_SWE
#define R2D_ISAMPLE_USE_MUXING 1
#endif
/****************************************************************************
* GENERAL CONSTANTS
***************************************************************************/
#ifndef C_MAP_LCD_IF_BASE
#define C_MAP_LCD_IF_BASE 0xFFFFA000L // LCD registers
#endif
/* driver version */
#define C_LCD_IF_DRIVER_VERSION ( 0x0001 )
/* LCD Interface Tx FIFO size */
#define C_LCD_IF_TX_FIFO_SIZE ( 128 )
/* infinite while loop constant */
#define C_LCD_IF_INFINITE_LOOP ( 1 )
/****************************************************************************
* Definition of the LCD Interface registers
***************************************************************************/
/* LCD IF CNTL_REG */
#define C_LCD_IF_CNTL_REG ( C_MAP_LCD_IF_BASE )
#define C_LCD_IF_CNTL_REG_SOFT_NRST_POS ( 0 )
#define C_LCD_IF_CNTL_REG_SOFT_NRST_MASK ( 0x0001 )
#define C_LCD_IF_CNTL_REG_SOFT_NRST_INIT ( 0x1 )
#define C_LCD_IF_CNTL_REG_CLOCK13_EN_POS ( 1 )
#define C_LCD_IF_CNTL_REG_CLOCK13_EN_MASK ( 0x0002 )
#define C_LCD_IF_CNTL_REG_CLOCK13_EN_INIT ( 0x1 )
#define C_LCD_IF_CNTL_REG_TX_CLOCK_DIV_POS ( 2 )
#define C_LCD_IF_CNTL_REG_TX_CLOCK_DIV_MASK ( 0x000C )
#define C_LCD_IF_CNTL_REG_TX_CLOCK_DIV_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_RX_CLOCK_DIV_POS ( 4 )
#define C_LCD_IF_CNTL_REG_RX_CLOCK_DIV_MASK ( 0x0030 )
#define C_LCD_IF_CNTL_REG_RX_CLOCK_DIV_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_FIFO_EMPTY_IT_EN_POS ( 6 )
#define C_LCD_IF_CNTL_REG_FIFO_EMPTY_IT_EN_MASK ( 0x0040 )
#define C_LCD_IF_CNTL_REG_FIFO_EMPTY_IT_EN_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_LCD_READ_EVENT_IT_EN_POS ( 7 )
#define C_LCD_IF_CNTL_REG_LCD_READ_EVENT_IT_EN_MASK ( 0x0080 )
#define C_LCD_IF_CNTL_REG_LCD_READ_EVENT_IT_EN_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_DMA_EN_POS ( 8 )
#define C_LCD_IF_CNTL_REG_DMA_EN_MASK ( 0x0100 )
#define C_LCD_IF_CNTL_REG_DMA_EN_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_MODE_POS ( 9 )
#define C_LCD_IF_CNTL_REG_MODE_MASK ( 0x0200 )
#define C_LCD_IF_CNTL_REG_MODE_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_FLIP_BYTES_POS ( 10 )
#define C_LCD_IF_CNTL_REG_FLIP_BYTES_MASK ( 0x0400 )
#define C_LCD_IF_CNTL_REG_FLIP_BYTES_INIT ( 0x0 )
#define C_LCD_IF_CNTL_REG_SUSPEND_EN_POS ( 11 )
#define C_LCD_IF_CNTL_REG_SUSPEND_EN_MASK ( 0x0800 )
#define C_LCD_IF_CNTL_REG_SUSPEND_EN_INIT ( 0x1 )
#define C_LCD_IF_CNTL_REG_MIN_FRAME_SIZE_POS ( 12 )
#define C_LCD_IF_CNTL_REG_MIN_FRAME_SIZE_MASK ( 0x3000 )
#define C_LCD_IF_CNTL_REG_MIN_FRAME_SIZE_INIT ( 0x3 )
#define C_LCD_IF_CNTL_REG_N_DUMMY_POS ( 14 )
#define C_LCD_IF_CNTL_REG_N_DUMMY_MASK ( 0xC000 )
#define C_LCD_IF_CNTL_REG_N_DUMMY_INIT ( 0x1 )
/* LCD IF LCD_CNTL_REG */
#define C_LCD_IF_LCD_CNTL_REG ( C_MAP_LCD_IF_BASE + 0x02 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS0_POS ( 0 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS0_MASK ( 0x0001 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS0_INIT ( 0x1 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_RS_POS ( 1 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_RS_MASK ( 0x0002 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_RS_INIT ( 0x0 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_START_READ_POS ( 2 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_START_READ_MASK ( 0x0004 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_START_READ_INIT ( 0x0 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_START_READ_EN ( 0x1 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NRESET_POS ( 3 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NRESET_MASK ( 0x0008 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NRESET_INIT ( 0x0 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS1_POS ( 4 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS1_MASK ( 0x0010 )
#define C_LCD_IF_LCD_CNTL_REG_LCD_NCS1_INIT ( 0x1 )
/* LCD IF LCD_IF_STS_REG */
#define C_LCD_IF_STS_REG ( C_MAP_LCD_IF_BASE + 0x04 )
#define C_LCD_IF_STS_REG_FIFO_EMPTY_STATUS_POS ( 0 )
#define C_LCD_IF_STS_REG_FIFO_EMPTY_STATUS_MASK ( 0x0001 )
#define C_LCD_IF_STS_REG_FIFO_FULL_STATUS_POS ( 1 )
#define C_LCD_IF_STS_REG_FIFO_FULL_STATUS_MASK ( 0x0002 )
#define C_LCD_IF_STS_REG_LCD_READ_EVENT_STATUS_POS ( 2 )
#define C_LCD_IF_STS_REG_LCD_READ_EVENT_STATUS_MASK ( 0x0004 )
/* LCD IF WR_FIFO */
#define C_LCD_IF_WR_FIFO ( C_MAP_LCD_IF_BASE + 0x06 )
#define C_LCD_IF_WR_FIFO_DATA_TX_LSB_POS ( 0 )
#define C_LCD_IF_WR_FIFO_DATA_TX_LSB_MASK ( 0x00FF )
#define C_LCD_IF_WR_FIFO_DATA_TX_MSB_POS ( 8 )
#define C_LCD_IF_WR_FIFO_DATA_TX_MSB_MASK ( 0xFF00 )
/* LCD IF RD_REG */
#define C_LCD_IF_RD_REG ( C_MAP_LCD_IF_BASE + 0x08 )
#define C_LCD_IF_RD_REG_DATA_RX_LSB_POS ( 0 )
#define C_LCD_IF_RD_REG_DATA_RX_LSB_MASK ( 0x00FF )
#define C_LCD_IF_RD_REG_DATA_RX_MSB_POS ( 8 )
#define C_LCD_IF_RD_REG_DATA_RX_MSB_MASK ( 0xFF00 )
/* LCD IF PIN_CFG_REG */
#define C_LCD_IF_PIN_CFG_REG_BASE (0xFFFF0000)
#define C_LCD_IF_PIN_CFG_DATA0 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF15A )
#define C_LCD_IF_PIN_CFG_DATA1 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF15C )
#define C_LCD_IF_PIN_CFG_DATA2 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF15E )
#define C_LCD_IF_PIN_CFG_DATA3 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF160 )
#define C_LCD_IF_PIN_CFG_DATA4 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF162 )
#define C_LCD_IF_PIN_CFG_DATA5 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF164 )
#define C_LCD_IF_PIN_CFG_DATA6 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF166 )
#define C_LCD_IF_PIN_CFG_DATA7 ( C_LCD_IF_PIN_CFG_REG_BASE + 0xF168 )
#define C_LCD_IF_PIN_CFG_POS ( 0 )
#define C_LCD_IF_PIN_CFG_MASK ( ~( (1 << 0) | ( 1 << 1) ) )
#define CONF_LCD_CAM_NAND 0xFFFEF01E
/****************************************************************************
* MACRO DEFINITION
***************************************************************************/
/****************************************************************************
*
* MACRO NAME: F_LCD_IF_WRITE_IN_FIFO
* Write d_data into WR_FIFO register.
*
*
* ARGUMENT LIST:
*
* Argument Description
* ------------ ----------------------------------------------------------
* d_data 16 boits word data (SYS_UWORD16)
*
* RETURN VALUE: None
*
***************************************************************************/
#define F_LCD_IF_WRITE_IN_FIFO( d_data ) *(volatile SYS_UWORD16* ) C_LCD_IF_WR_FIFO = d_data
/****************************************************************************
*
* MACRO NAME: F_LCD_IF_TX_FIFO_EMPTY_STATUS
* Return the LCD Interface TX FIFO Empty status.
*
*
* ARGUMENT LIST:
*
* Argument Description
* ------------ ----------------------------------------------------------
* None.
*
* RETURN VALUE: SYS_UWORD8 : Tx FIFO empty status (0 or 1)
*
***************************************************************************/
#define F_LCD_IF_TX_FIFO_EMPTY_STATUS \
( SYS_UWORD8 )((* (volatile SYS_UWORD16 *) C_LCD_IF_STS_REG) & C_LCD_IF_STS_REG_FIFO_EMPTY_STATUS_MASK)
/****************************************************************************
* TYPE AND STRUCTURE DEFINITION
***************************************************************************/
/* type definition for LCD Clock divider */
typedef SYS_UWORD8 E_LCD_IF_CLOCK_DIVIDER;
#define C_LCD_IF_DIV8 ( 0 )
#define C_LCD_IF_DIV4 ( 1 )
#define C_LCD_IF_DIV2 ( 2 )
#define C_LCD_IF_DIV1 ( 3 )
/* type definition for LCD interface mode */
typedef SYS_UWORD8 E_LCD_IF_MODE;
#define C_LCD_IF_68000_MODE ( 0 )
#define C_LCD_IF_8086_MODE ( 1 )
/* type definition for LCD Interface flip bytes */
typedef SYS_UWORD8 E_LCD_IF_FLIP;
#define C_LCD_IF_MSB_FIRST ( 0 )
#define C_LCD_IF_LSB_FIRST ( 1 )
/* type definition for Instruction Selection line level */
typedef SYS_UWORD8 E_LCD_IF_ISLL;
#define C_LCD_IF_LOW ( 0 )
#define C_LCD_IF_HIGH ( 1 )
/* type definition for Minimum frame size */
typedef SYS_UWORD8 E_LCD_IF_FRAME_SZ;
#define C_LCD_IF_16_WORDS ( 0 )
#define C_LCD_IF_32_WORDS ( 1 )
#define C_LCD_IF_64_WORDS ( 2 )
#define C_LCD_IF_128_WORDS ( 3 )
/* type definition for Read dummy cycle */
typedef SYS_UWORD8 E_LCD_IF_DUMMY_CYCLE;
#define C_LCD_IF_0_CYCLE ( 0 )
#define C_LCD_IF_1_CYCLE ( 1 )
#define C_LCD_IF_2_CYCLES ( 2 )
/* Initialization sub structure for Transmit */
typedef struct {
E_LCD_IF_CLOCK_DIVIDER d_clock_divider;
} T_LCD_IF_INIT_TX;
/* Initialization sub structure for Receive */
typedef struct {
E_LCD_IF_CLOCK_DIVIDER d_clock_divider;
E_LCD_IF_DUMMY_CYCLE d_dummy_cycles;
} T_LCD_IF_INIT_RX;
/* LCD Interface Driver Initialization structure */
typedef struct {
E_LCD_IF_MODE d_mode;
E_LCD_IF_FLIP b_flip_bytes;
E_LCD_IF_ISLL d_isll ;
T_LCD_IF_INIT_TX d_tx_init;
T_LCD_IF_INIT_RX d_rx_init;
} T_LCD_IF_INIT;
/* type definition for the LCD Chip select */
typedef SYS_UWORD8 E_LCD_IF_CS;
#define C_LCD_IF_CS0 ( 0 )
#define C_LCD_IF_CS1 ( 1 )
#define C_LCD_IF_CS_NOT_SELECTED ( 2 )
/* type definition for the LCD data type */
typedef SYS_UWORD8 E_LCD_IF_DATA_TYPE;
#define C_LCD_IF_INSTRUCTION ( 0 )
#define C_LCD_IF_DISPLAY ( 1 )
/* type definition for the current LCD driver internal state */
typedef SYS_UWORD8 E_LCD_IF_STATUS;
#define C_LCD_IF_IDLE ( 0 )
#define C_LCD_IF_RUNNING ( 1 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -