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

📄 hal_lcdc.c

📁 最新版IAR FOR ARM(EWARM)5.11中的代码例子
💻 C
字号:
/************************************************************************/
/*                                                                      */
/*    Copyright (C) 2006 Oki Electric Industry Co., LTD.                */
/*                                                                      */
/*    System Name    :  ML675050 series                                 */
/*    Module Name    :  ML675050 LCDC HAL program                       */
/*    File   Name    :  hal_lcdc.c                                      */
/*    Date           :  2005/12/26 initial version                      */
/*                                                                      */
/************************************************************************/

#include "common.h"
#if defined(__arm)
#include "ml675050.h"
#else
#include "ml675050sim.h"
#endif
#include "hal_common.h"
#include "hal_interrupt.h"
#include "hal_lcdc.h"


#define LCDCTMG1_VALUE  (TMG1_ADT | TMG1_LPW | TMG1_HFP | TMG1_HBP)
#define LCDCTMG2_VALUE  (TMG2_LPP | TMG2_FPW | TMG2_VFP | TMG2_VBP)
#define LCDCTMG3_VALUE  (TMG3_RCD | TMG3_LCLKON | TMG3_FPPOL | TMG3_LPPOL | TMG3_CPPOL | TMG3_DFF | TMG3_DF | TMG3_OEPOL | TMG3_CPBLK | TMG3_LPBLK)


/******************************/
/*     Private defines        */
/******************************/
/*--------- variable ---------*/
static uint16_t s_lcd_horizontality;
static uint16_t s_lcd_verticality;

/*--------- function ---------*/
static void s_lcdc_handler(void);

/******************************/
/*     Public defines         */
/******************************/
FP lcdc_handler = s_lcdc_handler;


/************************************************************************/
/*                                                                      */
/*  Function Name   : HALLcdc_Init                                      */
/*  Input           : hPixels Horizontal pixels.                        */
/*                    vPixels Vertical pixels.                          */
/*  Output          : int16_t HAL_OK(1)                                 */
/*                            HAL_PARAM_ERROR(-2)                       */
/*                                                                      */
/*  Note : Initialize lcdc.                                             */
/*                                                                      */
/************************************************************************/
int16_t HALLcdc_Init(uint16_t hPixels, uint16_t vPixels) {
    int16_t rtnVal = HAL_OK;

    s_lcd_horizontality = hPixels / 32;
    if (hPixels % 32 != 0) {
        s_lcd_horizontality += 1;
    }
    s_lcd_verticality = vPixels;

    /* Set LCDC clock (CLKCNT = 0x000F00a8) */
    OkiCLib_write32(CLKCNT, (OkiCLib_read32(CLKCNT) & 0xffffff0f) | 0x000000a0);

    /* Set register of LCDCTMG1. */
    OkiCLib_write32(LCDCTMG1, LCDCTMG1_VALUE);

    /* Set register of LCDCTMG2. */
    OkiCLib_write32(LCDCTMG2, LCDCTMG2_VALUE);

    /* Set register of LCDCTMG3. */
    OkiCLib_write32(LCDCTMG3, LCDCTMG3_VALUE);

    /* Set control register. */
    OkiCLib_write32(LCDCCTRL, 0x0);

    /* Set mask register. */
    OkiCLib_write32(LCDCMASK, 0x0);

    return rtnVal;
}

/************************************************************************/
/*                                                                      */
/*  Function Name   : HALLcdc_WriteVram                                 */
/*  Input           : pVram Option of VRAM.                             */
/*  Output          : int16_t HAL_OK(1)                                 */
/*                            HAL_PARAM_ERROR(-2)                       */
/*                                                                      */
/*  Note : Write data to VRAM.                                          */
/*                                                                      */
/************************************************************************/
int16_t HALLcdc_WriteVram(ML675050_VramParam *pVram) {
    int16_t rtnVal = HAL_OK;
    volatile uint32_t addr = VRAM_ADDR_START;
    uint16_t i, j;
    extern const uint32_t lcd_round[240][10];
    extern const uint32_t lcd_quadrangle[240][10];
    extern const uint32_t lcd_triangle[240][10];
    extern const uint32_t lcd_max[240][10];

    OkiCLib_set32bit(LCDCCTRL, LCDCCTRL_LCDEN);

    /* Standard mode. */
    if (pVram->display_mode == 0) {
        /* Clear LCD. */
        if (pVram->data == 0) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, 0x0);
                    addr += 4;
                }
            }
        }
        /* round */
        else if (pVram->data == 1) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_round[i][j]);
                    addr += 4;
                }
            }
        }
        /* quadrangle */
        else if (pVram->data == 2) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_quadrangle[i][j]);
                    addr += 4;
                }
            }
        }
        /* triangle */
        else if (pVram->data == 3) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_triangle[i][j]);
                    addr += 4;
                }
            }
        }
    }
    /* Reserve mode. */
    else if (pVram->display_mode == 1) {
        /* Reserve round */
        if (pVram->data == 1) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_max[i][j] & (~lcd_round[i][j]));
                    addr += 4;
                }
            }
        }
        /* Reserve quadrangle */
        else if (pVram->data == 2) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_max[i][j] & (~lcd_quadrangle[i][j]));
                    addr += 4;
                }
            }
        }
        /* Reserve triangle */
        else if (pVram->data == 3) {
            for (i = 0; i < s_lcd_verticality; i++) {
                for (j = 0; j < s_lcd_horizontality; j++) {
                    OkiCLib_write32(addr, lcd_max[i][j] & (~lcd_triangle[i][j]));
                    addr += 4;
                }
            }
        }
    }
    else {
        return HAL_PARAM_ERROR;
    }

    return rtnVal;
}

/************************************************************************/
/*                                                                      */
/*  Function Name   : s_lcdc_handler                                    */
/*  Input           : void                                              */
/*  Output          : void                                              */
/*                                                                      */
/*  Note : LCDC handler.                                                */
/*                                                                      */
/************************************************************************/
static void s_lcdc_handler(void) {
}

⌨️ 快捷键说明

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