view src/cs/drivers/drv_app/r2d/lcds/E_Sample/lcd_if.h @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents 4e78acac3d88
children
line wrap: on
line source

/******************************************************************************
 *                   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 "main/sys_types.h"


  /****************************************************************************
   *                            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 )

  /****************************************************************************
   *                            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 ) 

  /* type definition for the callback function return parameter */

  typedef  SYS_UWORD8 E_LCD_IF_CALLBACK_RET;

  #define  C_LCD_IF_CALLBACK_OK 	( 0 )
  #define  C_LCD_IF_CALLBACK_DISABLE_IT	( 1 )

  /* Type definition for the ON / OFF levels */

  typedef  SYS_UWORD8 E_LCD_IF_RESET;

  #define  C_LCD_IF_ON 	( 0 )
  #define  C_LCD_IF_OFF	( 1 )

  /* Type definition for the ON / OFF levels */

  typedef  SYS_UWORD8 E_LCD_IF_CLOCK;

  #define  C_LCD_IF_CLOCK_ON 	( 1 )
  #define  C_LCD_IF_CLOCK_OFF	( 0 )

  /* type definition for callback function */

  typedef E_LCD_IF_CALLBACK_RET (*T_LCD_IF_CALLBACK)( void );

  /* type definition for the LCD IF API function return parameter */

  typedef  SYS_UWORD8 E_LCD_IF_RET;

  #define  C_LCD_IF_RET_OK    ( 0 )
  #define  C_LCD_IF_RET_ERR   ( 1 )

  /****************************************************************************
   *                            INTERANL MACRO DEFINITION
   ***************************************************************************/

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_WAIT_LCD_IF_RESET
   *      Loop that wait for the read status.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_WAIT_LCD_IF_RESET \
	 while( ((*(volatile SYS_UWORD16*) C_LCD_IF_CNTL_REG) & C_LCD_IF_CNTL_REG_SOFT_NRST_MASK) \
	                                                     != C_LCD_IF_CNTL_REG_SOFT_NRST_MASK )
	                                             
  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_WAIT_TX_FIFO_EMPTY
   *      Loop that wait for the TX FIFO EMPTY status set to 1.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_WAIT_TX_FIFO_EMPTY \
	 while( ((*(volatile SYS_UWORD16*) C_LCD_IF_STS_REG) & C_LCD_IF_STS_REG_FIFO_EMPTY_STATUS_MASK) \
	                                                    != C_LCD_IF_STS_REG_FIFO_EMPTY_STATUS_MASK )
	                                                     

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_WAIT_READ_STATUS
   *      Loop that wait for the Read status set to 1.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_WAIT_READ_STATUS \
	 while( ((*(volatile SYS_UWORD16*) C_LCD_IF_STS_REG) & C_LCD_IF_STS_REG_LCD_READ_EVENT_STATUS_MASK) \
	                                             != C_LCD_IF_STS_REG_LCD_READ_EVENT_STATUS_MASK )

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_ENABLE_TX_FIFO_EMPTY_IT
   *      Enables the LCD Interface Tx FIFO Empty Interrupt.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_ENABLE_TX_FIFO_EMPTY_IT \
	 ((*(volatile SYS_UWORD16*) C_LCD_IF_CNTL_REG) |= C_LCD_IF_CNTL_REG_FIFO_EMPTY_IT_EN_MASK )
	                                             

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_DISABLE_TX_FIFO_EMPTY_IT
   *      Disables the LCD Interface Tx FIFO Empty Interrupt.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_DISABLE_TX_FIFO_EMPTY_IT \
	  ((*(volatile SYS_UWORD16*) C_LCD_IF_CNTL_REG) &= ~C_LCD_IF_CNTL_REG_FIFO_EMPTY_IT_EN_MASK )

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_ENABLE_DMA
   *      Enables the LCD Interface DMA capabilities.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_ENABLE_DMA \
	  ((*(volatile SYS_UWORD16*) C_LCD_IF_CNTL_REG) |= C_LCD_IF_CNTL_REG_DMA_EN_MASK )

  /****************************************************************************
   *
   *  MACRO NAME: F_LCD_IF_DISABLE_DMA
   *      Disable the LCD Interface DMA capabilities.
   *
   *
   *  ARGUMENT LIST:
   *
   *  Argument       Description
   *  ------------   ----------------------------------------------------------
   *  None
   *
   * RETURN VALUE: None
   *
   ***************************************************************************/

   #define F_LCD_IF_DISABLE_DMA \
	  ((*(volatile SYS_UWORD16*) C_LCD_IF_CNTL_REG) &= ~C_LCD_IF_CNTL_REG_DMA_EN_MASK )
	                                             


  /****************************************************************************
   *                         INTERNAL TYPE AND STRUCTURES
   ***************************************************************************/

  /* type definition for the Data Access */

  typedef  SYS_UWORD8 E_LCD_IF_DATA_ACCESS;

  #define  C_LCD_IF_READ    ( 1 ) 
  #define  C_LCD_IF_WRITE   ( 0 ) 

  /* type definition for the current LCD driver internal state */

  typedef  SYS_UWORD8 E_LCD_IF_STATE;

  #define  C_LCD_IF_IDLE    ( 0 ) 
  #define  C_LCD_IF_IT_CUST ( 1 ) 
  #define  C_LCD_IF_IT_BUFF ( 2 )

  /* type definition Transmit sub structure */
 
  typedef struct {
        E_LCD_IF_CLOCK_DIVIDER d_clock_divider;
        T_LCD_IF_CALLBACK      p_callback;
        SYS_UWORD16            *p_buffer;
        SYS_UWORD32            d_buffer_size;
  } T_LCD_IF_TX;

  /* type definition Receive sub structure */

  typedef struct {
        E_LCD_IF_CLOCK_DIVIDER d_clock_divider;
        E_LCD_IF_DUMMY_CYCLE   d_dummy_cycles;
  } T_LCD_IF_RX;

  /* type definition LCD Interface Driver Chip select 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_TX      d_tx;
        T_LCD_IF_RX      d_rx;
        SYS_UWORD16      d_cntl_reg;
        SYS_UWORD16      d_lcd_cntl_reg;
  } T_LCD_IF_CS_INIT;

  /* type definition LCD Interface Driver Internal structure */

  #define C_LCD_IF_CS_NUMBER  (2)

  typedef struct {
       T_LCD_IF_CS_INIT d_cs_struct[C_LCD_IF_CS_NUMBER];
       E_LCD_IF_CS      d_current_cs;
       E_LCD_IF_STATE   d_interrupt_state;
  } T_LCD_IF_INTERNAL;

  /****************************************************************************
   *                         GLOBAL VARIABLES REFERENCE
   ***************************************************************************/


  /****************************************************************************
   *                            PROTOTYPE DEFINITION
   ***************************************************************************/

  /*
   *  16-BIS functions
   */

  extern void f_lcd_if_init( E_LCD_IF_CS   d_cs, T_LCD_IF_INIT *p_init );

  extern void f_lcd_if_reset( void );

  extern void f_lcd_if_reset_lcd_controller( E_LCD_IF_CS     d_cs,
                                             E_LCD_IF_RESET d_reset );

  extern void f_lcd_if_clock( E_LCD_IF_CLOCK d_clock_switch );

  extern void f_lcd_if_poll_write( E_LCD_IF_CS        d_cs,
                                   SYS_UWORD16        *p_data,
                                   SYS_UWORD32        d_size,
                                   E_LCD_IF_DATA_TYPE d_type );

  extern SYS_UWORD16 f_lcd_if_poll_read( E_LCD_IF_CS        d_cs,
                                         E_LCD_IF_DATA_TYPE d_type );

  extern E_LCD_IF_RET f_lcd_if_it_write_cust( E_LCD_IF_CS        d_cs,
                                              E_LCD_IF_DATA_TYPE d_type,
                                              T_LCD_IF_CALLBACK  pf_callback_tx );

  extern E_LCD_IF_RET f_lcd_if_it_write( E_LCD_IF_CS        d_cs,
                                         SYS_UWORD16        *p_buffer,
                                         SYS_UWORD32        d_size,
                                         E_LCD_IF_DATA_TYPE d_type,
                                         T_LCD_IF_CALLBACK  pf_callback_sts );

  extern void f_lcd_if_dma_enable( E_LCD_IF_CS        d_cs,
                                   E_LCD_IF_FRAME_SZ  d_min_frame_sz,
                                   E_LCD_IF_DATA_TYPE d_type ); 

  extern E_LCD_IF_RET f_lcd_if_dma_disable( E_LCD_IF_CS         d_cs,             
                                            T_LCD_IF_CALLBACK   pf_callback_sts );

  extern SYS_UWORD16 f_lcd_if_get_version( void );

  /*
   *  32-BIS functions
   */

  extern void f_lcd_if_it_handler( void );


  extern void f_lcd_if_initialization( void );