FreeCalypso > hg > tcs211-pirelli
diff chipsetsw/drivers/drv_app/r2d/lcds/E_Sample/lcd_if32.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chipsetsw/drivers/drv_app/r2d/lcds/E_Sample/lcd_if32.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,164 @@ +/****************************************************************************** + * 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_if32.c + * + * + * PURPOSE: LCD Interface driver compiled in 32-bits mode (ARM mode) + * + * + * 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 MARTINEZ 0.0.1 First implementation + * + * ALGORITHM: + * + * + *****************************************************************************/ + +#include "r2d/lcds/e_sample/lcd_if.h" + + /**************************************************************************** + * GLOBAL VARIABLES REFERENCE + ***************************************************************************/ + + /* internal structure instance */ + + extern T_LCD_IF_INTERNAL d_lcd_if_internal; + +#if (CHIPSET == 12) + + /****************************************************************************** + * + * FUNCTION NAME: f_lcd_if_it_handler + * + * LCD Interface Interrupt Handler. + * + * + * ARGUMENT LIST: + * + * Argument Type IO Description + * ------------ ------------------- -- --------------------------------- + * None + * + * RETURN VALUE: None + * + *****************************************************************************/ + + void f_lcd_if_it_handler( void ) + { + + E_LCD_IF_CALLBACK_RET d_status; + SYS_UWORD32 d_nb_words_in_loop = 0; + SYS_UWORD8 i = 0; + + + /* check the d_interrupt_state value and the buffer */ + + if( (d_lcd_if_internal.d_interrupt_state == C_LCD_IF_IT_BUFF) && + (d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.d_buffer_size != 0) ) + { + /* Copy up to C_LCD_IF_TX_FIFO_SIZE words into the TX FIFO. */ + + if( d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.d_buffer_size >= C_LCD_IF_TX_FIFO_SIZE) + { + d_nb_words_in_loop = C_LCD_IF_TX_FIFO_SIZE; + } + else + { + d_nb_words_in_loop = d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.d_buffer_size; + } // End if + + for( i=0; i<d_nb_words_in_loop ;i++ ) + { + F_LCD_IF_WRITE_IN_FIFO( d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.p_buffer[i] ); + } // End for + + /* update d_nb_words_to copy and p_buffer */ + d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.d_buffer_size -= d_nb_words_in_loop; + d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.p_buffer += d_nb_words_in_loop; + + } + else + { + /* Call the callback function */ + d_status = (*d_lcd_if_internal.d_cs_struct[d_lcd_if_internal.d_current_cs].d_tx.p_callback)(); + + /* disable the LCD Interface TX FIFO if needed */ + if( d_status == C_LCD_IF_CALLBACK_DISABLE_IT) + { + F_LCD_IF_DISABLE_TX_FIFO_EMPTY_IT; + + /* set internal state to IDLE */ + d_lcd_if_internal.d_interrupt_state = C_LCD_IF_IDLE; + } // End if + + } // End if + + } /* f_lcd_if_it_handler */ + +#endif