📄 hal_lcdc.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 + -