⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lh7a404_clcdc_driver.c.bak

📁 sharp触摸屏测试代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
 * Notes: None
 *
 **********************************************************************/
STATUS lcd_close(INT_32 devid)
{
    CLCDC_CFG_T *lcdcfgptr = (CLCDC_CFG_T *) devid;
    STATUS status = _ERROR;

    if (lcdcfgptr->init == TRUE)
    {
        /* 'Uninitialize' device */
        lcdcfgptr->init = FALSE;
        status = _NO_ERROR;

       /* Disable LCD */
        lcdcfg.regptr->lcdctrl &= ~CLCDC_LCDCTRL_ENABLE;
    }

    return status;
}

/***********************************************************************
 *
 * Function: lcd_ioctl
 *
 * Purpose: LCD configuration block
 *
 * Processing:
 *     This function is a large case block. Based on the passed function
 *     and option values, set or get the appropriate real time clock
 *     parameter.
 *
 * Parameters:
 *     devid: Pointer to LCD config structure
 *     cmd:   ioctl command
 *     arg:   ioctl argument
 *
 * Outputs: None
 *
 * Returns: The status of the ioctl operation
 *
 * Notes: None
 *
 **********************************************************************/
STATUS lcd_ioctl(INT_32 devid,
                 INT_32 cmd,
                 INT_32 arg)
{
    CLCDC_REGS_T *lcdregs;
    UNS_32 tmp, tmp1;
    CLCDC_CFG_T *lcdcfgptr = (CLCDC_CFG_T *) devid;
    STATUS status = _ERROR;

    if (lcdcfgptr->init == TRUE)
    {
        status = _NO_ERROR;
        lcdregs = lcdcfgptr->regptr;

        switch (cmd)
        {
            case LCD_CONFIG:
                /* Configure the LCD controller with a predefined LCD
                   configuration structure */
                if (arg != 0)
                {
                    lcdcfgptr->dptr = (LCD_PARAM_T *) arg;
                    lcd_initialize(lcdcfgptr);
                }
                else
                {
                    /* Not a valid address of structure */
                    status = _ERROR;
                }
                break;

            case LCD_ENABLE:
                /* Enable or disable LCD controller */
                if (arg == 1)
                {
                    /* Enable */
                    lcdregs->lcdctrl |= CLCDC_LCDCTRL_ENABLE;
                }
                else
                {
                    /* Disable */
                    lcdregs->lcdctrl *= ~CLCDC_LCDCTRL_ENABLE;
                }
                break;

            case LCD_PWENABLE:
                /* Enable or disable LCD power */
                if (arg == 1)
                {
                    /* Enable */
                    lcdregs->lcdctrl |= (CLCDC_LCDCTRL_ENABLE |
                        CLCDC_LCDCTRL_PWR);
                }
                else
                {
                    /* Disable */
                    lcdregs->lcdctrl &= ~(CLCDC_LCDCTRL_ENABLE |
                        CLCDC_LCDCTRL_PWR);
                }
                break;

            case LCD_SET_UP_FB:
                /* Set upper frame buffer address */
                lcdregs->lcdupbase = (UNS_32) arg;
                break;

            case LCD_SET_LW_FB:
                /* Set lower frame buffer address */
                lcdregs->lcdlpbase = (UNS_32) arg;
                break;

            case LCD_SET_OV_FB:
                /* Set overflow frame buffer address */
                lcdregs->lcdlpoverflow = (UNS_32) arg;
                break;

            case LCD_ENABLE_INTS:
                /* Enable LCD interrupts */
                tmp = lcdregs->lcdintrenable;
                tmp = tmp | ((UNS_32) arg & (CLCDC_LCDSTATUS_FUFUP |
                    CLCDC_LCDSTATUS_FUFLP |CLCDC_LCDSTATUS_LNBU |
                    CLCDC_LCDSTATUS_VCOMP | CLCDC_LCDSTATUS_MBERROR));
                lcdregs->lcdintrenable = tmp;
                break;

            case LCD_DISABLE_INTS:
                /* Disable LCD interrupts */
                tmp = lcdregs->lcdintrenable;
                tmp = tmp & ~((UNS_32) arg & (CLCDC_LCDSTATUS_FUFUP |
                    CLCDC_LCDSTATUS_FUFLP |CLCDC_LCDSTATUS_LNBU |
                    CLCDC_LCDSTATUS_VCOMP | CLCDC_LCDSTATUS_MBERROR));
                lcdregs->lcdintrenable = tmp;
                break;

            case LCD_PICK_INT:
                /* Select the interrupt condition that generates the
                   CLCDC_LCDSTATUS_VCOMP interrupt */
                if ((arg >= VSYNC_START) && (arg <= FRONT_PORCH_START))
                {
                    /* Temporarily disable CLCDC_LCDSTATUS_VCOMP
                       interrupt */
                    tmp = lcdregs->lcdintrenable;
                    lcdregs->lcdintrenable &= ~CLCDC_LCDSTATUS_VCOMP;

                    /* Mask off VCOMP selection bits in control word */
                    tmp1 = lcdregs->lcdctrl & ~CLCDC_LCDCTRL_VCOMP_IC;

                    /* 'OR' in selected interrupt */
                    tmp1 |= lcd_vcmp_sel[arg];
                    lcdregs->lcdctrl = tmp1;

                    /* Restore the LCD CLCDC_LCDSTATUS_VCOMP
                       interrupt */
                    lcdregs->lcdintrenable = tmp;
                }
                else
                {
                    /* Invalid argument */
                    status = _ERROR;
                }
                break;

            case LCD_CLEAR_INT:
                /* Clear the latched LCD interrupt condition */
                lcdregs->lcdstatus = 0xFF;
                break;

            case LCD_DMA_ON_4MT:
                /* Set DMA requests to start when 4 or 8 entries are
                   free in the CLCDC FIFOs */
                if (arg == 0)
                {
                    /* Use 8 entries */
                    lcdregs->lcdctrl &= ~CLCDC_LCDCTRL_WATERMARK;
                }
                else
                {
                    /* Use 4 entries */
                    lcdregs->lcdctrl |= CLCDC_LCDCTRL_WATERMARK;
                }
                break;

            case LCD_SWAP_RGB:
                /* Swaps the red and green colors in a 16-bit color
                   value */
                if (arg == 1)
                {
                    /* Swap RGB colors (555 mode only) */
                    lcdregs->lcdctrl &= ~CLCDC_LCDCTRL_RGB;
                }
                else
                {
                    /* Do not swap RGB colors (555 mode only) */
                    lcdregs->lcdctrl |= CLCDC_LCDCTRL_RGB;
                }
                break;

            case LCD_SET_BPP:
                /* Set bits per pixel */
                tmp = lcdregs->lcdctrl & ~CLCDC_LCDCTRL_BPP_MASK;
                switch (arg)
                {
                    case 1:
                        tmp |= CLCDC_LCDCTRL_BPP1;
                        break;

                    case 2:
                        tmp |= CLCDC_LCDCTRL_BPP2;
                        break;

                    case 4:
                        tmp |= CLCDC_LCDCTRL_BPP4;
                        break;

                    case 8:
                        tmp |= CLCDC_LCDCTRL_BPP8;
                        break;

                    case 16:
                    default:
                        tmp |= CLCDC_LCDCTRL_BPP16;
                        break;
                }
                lcdregs->lcdctrl = tmp;
                break;

            case LCD_SET_CLOCK:
                /* Sets or updates the LCD pixel clock */
                if (arg > 0)
                {
                    lcd_update_clock(lcdcfgptr, (UNS_32) arg);
                }
                break;

            case LCD_GET_STATUS:
                /* Return an LCD status */
                switch (arg)
                {
                    case LCD_ENABLE_ST:
                        /* Return LCD enabled status */
                        if ((lcdregs->lcdctrl &
                            CLCDC_LCDCTRL_ENABLE) != 0)
                        {
                            status = 1;
                        }
                        else
                        {
                            status = 0;
                        }
                        break;

                    case LCD_PWENABLE_ST:
                        /* Return LCD power enabled status */
                        if ((lcdregs->lcdctrl & CLCDC_LCDCTRL_PWR) != 0)
                        {
                            status = 1;
                        }
                        else
                        {
                            status = 0;
                        }
                        break;

                    case LCD_UP_FB:
                        /* Return upper frame buffer address */
                        status = (INT_32) lcdregs->lcdupbase;
                        break;

                    case LCD_LW_FB:
                        /* Return lower frame buffer address */
                        status = (INT_32) lcdregs->lcdlpbase;
                        break;

                    case LCD_OVR_FB:
                        /* Return overflow frame buffer address */
                        status = (INT_32) lcdregs->lcdlpoverflow;
                        break;

                    case LCD_PANEL_TYPE:
                        /* Return the LCD panel type */
                        status =
                            (INT_32) lcdcfgptr->dptr->lcd_panel_type;
                        break;

                    case LCD_CLOCK:
                        /* Returns the pixel clock in Hz */
                        /* This function is not yet implemented */
                        break;

                    case LCD_XSIZE:
                        /* Returns the display horizontal size in
                            pixels */
                        status =
                            (INT_32) lcdcfgptr->dptr->pixels_per_line;
                        break;

                    case LCD_YSIZE:
                        /* Returns the display vertical size in
                            pixels */
                        status =
                            (INT_32) lcdcfgptr->dptr->lines_per_panel;
                        break;

                    case LCD_COLOR_DEPTH:
                        /* Returns the display color depth */
                        switch (lcdregs->lcdctrl &
                            CLCDC_LCDCTRL_BPP_MASK)
                        {
                            case CLCDC_LCDCTRL_BPP1:
                                status = 1;
                                break;

                            case CLCDC_LCDCTRL_BPP2:
                                status = 2;
                                break;

                            case CLCDC_LCDCTRL_BPP4:
                                status = 4;
                                break;

                            case CLCDC_LCDCTRL_BPP8:
                                status = 8;
                                break;

                            case CLCDC_LCDCTRL_BPP16:
                                status = 16;
                                break;

                            default:
                                status = SMA_BAD_PARAMS;
                        }
                        break;

                    default:
                        /* Unsupported parameter */
                        status = SMA_BAD_PARAMS;
                }
                break;

            default:
                /* Unsupported parameter */
                status = SMA_BAD_PARAMS;
        }
    }

    return status;
}

/***********************************************************************
 *
 * Function: lcd_read
 *
 * Purpose: LCD read function (stub only)
 *
 * Processing:
 *     Return 0 to the caller.
 *
 * Parameters:
 *     devid:     Pointer to LCD config structure
 *     buffer:    Pointer to data buffer to copy to
 *     max_bytes: Number of bytes to read
 *
 * Outputs: None
 *
 * Returns: Number of bytes actually read (always 0)
 *
 * Notes: None
 *
 **********************************************************************/
INT_32 lcd_read(INT_32 devid,
                void *buffer,
                INT_32 max_bytes)
{
    return 0;
}

/***********************************************************************
 *
 * Function: lcd_write
 *
 * Purpose: LCD write function (stub only)
 *
 * Processing:
 *     Return 0 to the caller.
 *
 * Parameters:
 *     devid:   Pointer to LCD config structure
 *     buffer:  Pointer to data buffer to copy from
 *     n_bytes: Number of bytes to write
 *
 * Outputs: None
 *
 * Returns: Number of bytes actually written (always 0)
 *
 * Notes: None
 *
 **********************************************************************/
INT_32 lcd_write(INT_32 devid,
                 void *buffer,
                 INT_32 n_bytes)
{
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -