/* ============================================================================ * Copyright (c) Texas Instruments Inc 2002, 2003, 2004, 2005, 2008 * * Use of this software is controlled by the terms and conditions found in the * license agreement under which this software has been supplied. * ============================================================================ */ /** @file csl_lcdcAux.h * * @brief LCDC functional layer Auxilliary header file * * Path: \(CSLPATH)\ inc */ /* ============================================================================ * Revision History * ================ * 05-Sept-2008 Added LCDC of CSL. * 06-May-2009 Removed the Raster mode support for C5505 PG1.4 * 26-May-2009 Modified based on the review comments * ============================================================================ */ #ifndef _CSL_LCDCAUX_H_ #define _CSL_LCDCAUX_H_ #ifdef __cplusplus extern "C" { #endif #include /*****************************************************************************\ CSL LCDC mandatory inline functions \*****************************************************************************/ /** @addtogroup CSL_LCDC_FUNCTION @{ */ /** =========================================================================== * @n@b CSL_lcdcEnableLiddDMA * * @b Description * @n This function enables the DMA Transfer for LIDD Controller. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance @endverbatim * * Return Value None * * Pre Condition * @n 1: LCD_open() API should be called before this. * @n 2: LCD_setup() should be called for making use of LIDD controller. * @n 4: LCD_configDMA() should be called to make sure the DMA setup. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_LcdcHandle hLcdc; CSL_lcdcEnableLiddDMA (hLcdc); @endverbatim * =========================================================================== */ static inline void CSL_lcdcEnableLiddDMA ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc ) { CSL_FINST(hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_LIDD_DMA_EN, ENABLE); } /** =========================================================================== * @n@b CSL_lcdcDisableLiddDMA * * @b Description * @n This function disables the DMA Transfer for LIDD Controller. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance @endverbatim * * Return Value None * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_LcdcHandle hLcdc; CSL_lcdcDisableLiddDMA (hLcdc); @endverbatim * =========================================================================== */ static inline void CSL_lcdcDisableLiddDMA ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc ) { CSL_FINST(hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_LIDD_DMA_EN, DISABLE); } /** =========================================================================== * @n@b CSL_lcdcLiddWriteCsAddr * * @b Description * @n This function sets the LIDD CS 0 or 1 Address Read/Write Register. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance cs0cs1 chip select 0 or 1 arg variable to hold the value @endverbatim * * Return Value None * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_lcdcLiddWriteCsAddr (hLcdc, cs0cs1, arg); @endverbatim * =========================================================================== */ static inline void CSL_lcdcLiddWriteCsAddr ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc, CSL_LcdcChipSelect cs0cs1, Uint32 arg ) { if (CSL_LCDC_LIDD_CS0 == cs0cs1 ) { CSL_FINS (hLcdc->regs->LCDLIDDCS0ADDR, LCDC_LCDLIDDCS0ADDR_ADR_INDX, arg); } else { CSL_FINS (hLcdc->regs->LCDLIDDCS1ADDR, LCDC_LCDLIDDCS1ADDR_ADR_INDX, arg); } } /** =========================================================================== * @n@b CSL_lcdcLiddWriteCsData * * @b Description * @n This function sets the LIDD CS 0 or 1 Data Read/Write Register. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance cs0cs1 chip select 0 or 1 arg variable to hold the value @endverbatim * * Return Value None * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_lcdcLiddWriteCsData (hLcdc, cs0cs1, arg); @endverbatim * =========================================================================== */ static inline void CSL_lcdcLiddWriteCsData ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc, CSL_LcdcChipSelect cs0cs1, Uint16 arg ) { if (CSL_LCDC_LIDD_CS0 == cs0cs1 ) { CSL_FINS (hLcdc->regs->LCDLIDDCS0DATA, LCDC_LCDLIDDCS0DATA_DATA, arg); } else { CSL_FINS (hLcdc->regs->LCDLIDDCS1DATA, LCDC_LCDLIDDCS1DATA_DATA, arg); } } /** =========================================================================== * @n@b CSL_lcdcGetLiddCsData * * @b Description * @n This function gets the of LIDD CS0or1 DATA Register value. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance cs0cs1 chip select 0 or 1 @endverbatim * * Return Value Uint16 * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim Uint16 status; status = CSL_lcdcGetLiddCsData (hLcdc, cs0cs1); @endverbatim * =========================================================================== */ static inline Uint16 CSL_lcdcGetLiddCsData ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc, CSL_LcdcChipSelect cs0cs1 ) { if (CSL_LCDC_LIDD_CS0 == cs0cs1 ) { return (hLcdc->regs->LCDLIDDCS0DATA); } else { return (hLcdc->regs->LCDLIDDCS1DATA); } } /** =========================================================================== * @n@b CSL_lcdcGetLiddCsAddr * * @b Description * @n This function gets the of LIDD CS0or1 Address Register value. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance cs0cs1 chip select 0 or 1 @endverbatim * * Return Value Uint16 * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim Uint16 status; status = CSL_lcdcGetLiddCsAddr (hLcdc, cs0cs1, &response); @endverbatim * =========================================================================== */ static inline Uint16 CSL_lcdcGetLiddCsAddr ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc, CSL_LcdcChipSelect cs0cs1 ) { if (CSL_LCDC_LIDD_CS0 == cs0cs1 ) { return (hLcdc->regs->LCDLIDDCS0ADDR); } else { return (hLcdc->regs->LCDLIDDCS1ADDR); } } /** =========================================================================== * @n@b CSL_lcdcGetVersion * * @b Description * @n This function gets the Version of the LCDC module. * * @b Arguments * @verbatim hLcdc Handle to LCDC instance responseMinor Placeholder to return status of minor revision. responseMajor Placeholder to return status of major revision. @endverbatim * * Return Value None * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_lcdcGetVersion (hLcdc, &responseMinor, &responseMajor); @endverbatim * =========================================================================== */ static inline void CSL_lcdcGetVersion ( /** Pointer to the object that holds reference to the * instance of LCDC requested after the call */ CSL_LcdcHandle hLcdc, /** Placeholder to return the status. @a void* casted */ void *responseMinor, void *responseMajor ) { *(Uint16*)responseMinor = CSL_LCDC_REGS->LCDREVMIN; *(Uint16*)responseMajor = CSL_LCDC_REGS->LCDREVMAJ; } /** =========================================================================== * @n@b LCD_getSetup * * @b Description * @n It gets the configuration details from the LCDC Registers. * * @b Arguments * @verbatim hLcdc Handle to the LCDC. getSetup Pointer to DMA setup structure. @endverbatim * * Return Value CSL_Status * @li CSL_SOK - Hardware setup successful * @li CSL_ESYS_BADHANDLE - Invalid handle * @li CSL_ESYS_INVPARAMS - setup Parameter is invalid. * * Pre Condition * @n None * * Post Condition * @n LCD_open() API should be called before this. * * @b Modifies * @n None * * @b Example * @verbatim CSL_LcdcHandle hLcdc; CSL_LcdcHwSetup getSetup; CSL_status status; NOTE: for setup parameter refer the function prologue of LCD_setup() function. status = LCD_getSetup(hLcdc, &getSetup); ... @endverbatim * =========================================================================== */ static inline CSL_Status LCD_getSetup ( CSL_LcdcHandle hLcdc, CSL_LcdcHwSetup* getSetup ) { Uint16 tempVar; if((hLcdc != NULL) && (getSetup != NULL)) { /* passed parameters are ok */ } else { if(hLcdc == NULL) { return CSL_ESYS_BADHANDLE; } else { return CSL_ESYS_INVPARAMS; } } /* Get configured information for LIDD controller */ (getSetup->config).fdoneIntEn = (CSL_LcdcFdoneCtl) CSL_FEXT (hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_DONE_INT_EN); (getSetup->config).modeSel = (CSL_LcdcLiddMode) CSL_FEXT (hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_LIDD_MODE_SEL); (getSetup->config).clkDiv = CSL_FEXT (hLcdc->regs->LCDCR, LCDC_LCDCR_CLKDIV); (getSetup->config).dmaCs0Cs1 = (CSL_LcdcChipSelect) CSL_FEXT (hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_DMA_CS0_CS1); tempVar = (hLcdc->regs->LCDLIDDCR) & CSL_LCD_LCDLIDDCR_POLARITY_CONTROL_MASK; tempVar = tempVar >> CSL_LCDC_LCDLIDDCR_ALEPOL_SHIFT; (getSetup->config).polControl = tempVar; (getSetup->config).dmaEnable = (CSL_LcdcDmaCtl) CSL_FEXT (hLcdc->regs->LCDLIDDCR, LCDC_LCDLIDDCR_LIDD_DMA_EN); /* Get configured LIDD chip selct configuration register Fields */ if(CSL_LCDC_LIDD_NOT_USE_CS1 == (getSetup->useCs1)) { /* Get configured LIDD CS0 configuration register fields*/ (getSetup->timingCs0).rStrobe = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG0, LCDC_LCDLIDDCS0CONFIG0_R_STROBE); (getSetup->timingCs0).rHold = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG0, LCDC_LCDLIDDCS0CONFIG0_R_HOLD); (getSetup->timingCs0).ta = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG0, LCDC_LCDLIDDCS0CONFIG0_TA); tempVar = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG1, LCDC_LCDLIDDCS0CONFIG1_R_SU1); (getSetup->timingCs0).rSu = (tempVar << 4) + CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG0, LCDC_LCDLIDDCS0CONFIG0_R_SU0); (getSetup->timingCs0).wSu = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG1, LCDC_LCDLIDDCS0CONFIG1_W_SU); (getSetup->timingCs0).wStrobe = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG1, LCDC_LCDLIDDCS0CONFIG1_W_STROBE); (getSetup->timingCs0).wHold = CSL_FEXT (hLcdc->regs->LCDLIDDCS0CONFIG1, LCDC_LCDLIDDCS0CONFIG1_W_HOLD); } else { /* Get configured LIDD CS1 configuration register Fields */ (getSetup->timingCs1).rStrobe = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG0, LCDC_LCDLIDDCS1CONFIG0_R_STROBE); (getSetup->timingCs1).rHold = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG0, LCDC_LCDLIDDCS1CONFIG0_R_HOLD); (getSetup->timingCs1).ta = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG0, LCDC_LCDLIDDCS1CONFIG0_TA); tempVar = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG1, LCDC_LCDLIDDCS1CONFIG1_R_SU1); (getSetup->timingCs1).rSu = (tempVar << 4) + CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG0, LCDC_LCDLIDDCS1CONFIG0_R_SU0); (getSetup->timingCs1).wSu = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG1, LCDC_LCDLIDDCS1CONFIG1_W_SU); (getSetup->timingCs1).wStrobe = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG1, LCDC_LCDLIDDCS1CONFIG1_W_STROBE); (getSetup->timingCs1).wHold = CSL_FEXT (hLcdc->regs->LCDLIDDCS1CONFIG1, LCDC_LCDLIDDCS1CONFIG1_W_HOLD); } return CSL_SOK; } /** =========================================================================== * @n@b LCD_getConfigDMA * * @b Description * @n It get configured value from LCD registers of DMA Purpose. * * @b Arguments * @verbatim hLcdc Handle to the LCDC. pgetConfigDma Pointer to DMA Config structure. @endverbatim * * Return Value CSL_Status * @li CSL_SOK - Hardware setup successful * @li CSL_ESYS_BADHANDLE - Invalid handle * @li CSL_ESYS_INVPARAMS - Congig Parameter is invalid. * * Pre Condition * @n LCD_open() API should be called before this. * * Post Condition * @n None * * @b Modifies * @n None * * @b Example * @verbatim CSL_LcdcHandle hLcdc; CSL_LcdcConfigDma pgetConfigDma; CSL_status status; NOTE: for setup parameter refer the function prologue of LCD_configDMA() function. status = LCD_getConfigDMA(hLcdc, &pgetConfigDma); ... @endverbatim * =========================================================================== */ static inline CSL_Status LCD_getConfigDMA ( CSL_LcdcHandle hLcdc, CSL_LcdcConfigDma* pgetConfigDma ) { Uint32 tmpAddr; Uint16 tmpAddrLSB; Uint16 tmpAddrMSB; if((hLcdc != NULL) && (pgetConfigDma != NULL)) { /* passed parameters are ok */ } else { if(hLcdc == NULL) { return CSL_ESYS_BADHANDLE; } else { return CSL_ESYS_INVPARAMS; } } pgetConfigDma->burstSize = (CSL_LcdcDmaBurst) CSL_FEXT (hLcdc->regs->LCDDMACR, LCDC_LCDDMACR_BURST_SIZE); pgetConfigDma->eofIntEn = (CSL_LcdcEofIntCtl) CSL_FEXT (hLcdc->regs->LCDDMACR, LCDC_LCDDMACR_EOF_INTEN); pgetConfigDma->bigEndian = (CSL_LcdcEndianess) CSL_FEXT (hLcdc->regs->LCDDMACR, LCDC_LCDDMACR_BIGENDIAN); pgetConfigDma->frameMode = (CSL_LcdcFrameMode) CSL_FEXT (hLcdc->regs->LCDDMACR, LCDC_LCDDMACR_FRAME_MODE); /* DMA frame buffer 0 Base Address Set */ tmpAddrLSB = hLcdc->regs->LCDDMAFB0BAR0; tmpAddrMSB = hLcdc->regs->LCDDMAFB0BAR1; tmpAddr = tmpAddrMSB; tmpAddr = tmpAddr << CSL_LCD_UINT16_NUMBER_BITS; tmpAddr |= tmpAddrLSB; tmpAddr = ((tmpAddr - CSL_LCD_SARAM_DMA_ADDR_OFFSET) >> CSL_LCD_DMA_SHIFT); pgetConfigDma->fb0Base = tmpAddr; /* DMA frame buffer 0 Ceil Address Set*/ tmpAddrLSB = hLcdc->regs->LCDDMAFB0CAR0; tmpAddrMSB = hLcdc->regs->LCDDMAFB0CAR1; tmpAddr = tmpAddrMSB; tmpAddr = tmpAddr << CSL_LCD_UINT16_NUMBER_BITS; tmpAddr |= tmpAddrLSB; tmpAddr = ((tmpAddr - CSL_LCD_SARAM_DMA_ADDR_OFFSET) >> CSL_LCD_DMA_SHIFT); pgetConfigDma->fb0Ceil = tmpAddr; /* DMA frame buffer 1 Base Address Set */ tmpAddrLSB = hLcdc->regs->LCDDMAFB1BAR0; tmpAddrMSB = hLcdc->regs->LCDDMAFB1BAR1; tmpAddr = tmpAddrMSB; tmpAddr = tmpAddr << CSL_LCD_UINT16_NUMBER_BITS; tmpAddr |= tmpAddrLSB; tmpAddr = ((tmpAddr - CSL_LCD_SARAM_DMA_ADDR_OFFSET) >> CSL_LCD_DMA_SHIFT); pgetConfigDma->fb1Base = tmpAddr; /* DMA frame buffer 1 Ceil Address Set*/ tmpAddrLSB = hLcdc->regs->LCDDMAFB1CAR0; tmpAddrMSB = hLcdc->regs->LCDDMAFB1CAR1; tmpAddr = tmpAddrMSB; tmpAddr = tmpAddr << CSL_LCD_UINT16_NUMBER_BITS; tmpAddr |= tmpAddrLSB; tmpAddr = ((tmpAddr - CSL_LCD_SARAM_DMA_ADDR_OFFSET) >> CSL_LCD_DMA_SHIFT); pgetConfigDma->fb1Ceil = tmpAddr; return CSL_SOK; } /** @} */ #endif //_CSL_LCDCAUX_H_