📄 lcd13xx.c
字号:
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD13XX.C
Purpose : Driver for LCDs using a single Seiko Epson SED13XX controllers
This version supports a single LCD controller
in (almost) any hardware configuration. The following
derivatives are currently supported:
SED1352
SED1354
SED1356 (With/Without BitBlt engine support)
SED1374
SED1375
SED13806
Other Epson LCD controllers are very similar and could
be covered by this driver as well, but have not been
tested.
----------------------------------------------------------------------
Version-Date---Author-Explanation
----------------------------------------------------------------------
3.00s 020724 JE a) LCD_L0_Init changed
3.00r 020708 JE a) Changed to work with 2bpp DDP bitmaps
3.00q 020705 JE a) Changed to work with 4bpp DDP bitmaps
3.00p 020705 JE a) Optimizations changed: LCD_L0_DrawVLine
3.00o 020703 JE a) Optimizations changed: LCD_L0_DrawVLine
3.00n 020624 JE a) Optimizations added for 4bpp, 16bit bus, LCD_SWAPXY:
LCD_L0_DrawVLine, DrawBitLine1BPP_Swap, DrawBitLine4BPP_Swap
3.00m 020506 JE a) LCD_FillRectBB changed to work with large
rectangles (width > 1024, heigth > 1024)
3.00l 020327 JE a) DrawBitLine1BPP for 16bit bus, 4bpp:
Compiler problem solved
3.00k 020319 JE a) DrawBitLine1BPP for 16bit bus, 4bpp optimized
3.00j 020222 JE a) Optimized version DrawBitLine16BPP added
b) Macro mapping LCD_SWAP_BYTE_ORDER changed
3.00i 020222 JE a) DrawBitLine1BPP_Swap, 16bit bus, 4bpp changed
b) LCD_L0_DrawVLine, 16bit bus, 4bpp changed
3.00h 020221 JE a) LCD_USE_32BIT_PNT added to support 32Bit offsets
b) XY2OFF changed to work with 32Bit offsets
c) BITBLT_SET_DESTINATION changed to work with 32Bit offsets
3.00g 020221 JE a) LCD_MSB_SHIFT & LCD_LSB_SHIFT removed
3.00f 020221 JE a) Remaining LCD_READ_MEM removed
b) WRITE_MEM changed for swapped mode
3.00e 020218 JE a) Use of READ_MEM, WRITE_MEM instead of
LCD_READ_MEM, LCD_WRITE_MEM
3.00d9 020129 JE a) DrawBitLine4BPP: Non optimized version used if
defined LCD_LUT_SEG
b) LCD_L0_DrawVLine, LCD_L0_FillRect:
BitBLT-versions not used if
defined LCD_LUT_SEG or LCD_LUT_COM
c) LCD_DrawBitmap1BPPBB: Not called if
defined LCD_LUT_SEG or LCD_LUT_COM
d) BitBLT support not used if
defined LCD_LUT_SEG or LCD_LUT_COM
3.00d8 020129 JE a) Bugfix: LCD_LUT_COM with 'space' now works
3.00d7 020124 JE a) DrawBitLine1BPP, 16bit bus, 1bpp optimized
3.00df 020123 JE a) LCD_L0_DrawHLine, 16bit bus, 1bpp,
LCD_SWAP_BYTE_ORDER added
3.00de 020123 JE a) LCD_L0_DrawHLine, 16bit bus, 1bpp optimized
3.00d4 020104 JE a) DrawBitLine8BPP, 16Bit bus, 4bpp optimized
3.00d3 011204 JE a) BitBLT support changed
3.00d2 011129 RS a) 4bpp opt. enabled also with LCD_LUT_COM
3.00d1 011115 JE a) Some casts inserted to avoid warnings
3.00d 011109 JE a) BitBLT support changed
3.00c9 011107 JE a) LCD_L0_DrawHLine 16bpp, 16bit changed
b) BPP mapping 15->16bpp removed to keep sure
LCD_NUMCOLORS works right
3.00c8 011016 JE a) Optimized DrawBitLine4BPP for 16 bit bus, 4 bpp mode
now supports LCD_SWAP_BYTE_ORDER
3.00c7 011016 RS a) DrawBitLine4BPP for 16 bit bus, 4 bpp mode changed
3.00c6 011016 JE a) Optimized version DrawBitLine4BPP for
16 bit bus, 4 bpp mode added
3.00c5 010926 JE a) Dummy read from BITBLT memory area inserted
to shutdown BITBLT-engine after operation
is finished
3.00c4 010925 JE a) #define SETNEXTPIXEL(c) SETNEXTPIXEL(c) deleted
b) LCD_L0_DrawVLine for 8bit BYW mode changed
c) GetPixelIndex changed
3.00c3 010925 JE a) Bugfixes: 8bit bus, LCD_MIRROR_Y, LCD_L0_Init
3.00c2 010925 JE a) Bugfixes: 16bit bus, LCD_MIRROR_Y
3.00c1 010914 RS a) LCDInt.h always included
3.00c 010905 RS a) DrawBitLine16BPP taken out via preprocessor
for non 16 bpp modes
3.00b3 010824 JE a) DrawBitLine16BPP ok
3.00b2 010824 JE a) DrawBitLine16BPP (no opt) added, not tested
3.00b1 010820 JE a) Bugfixes for LCD_MIRROR_Y, 16 bit bus, 4 bpp
3.00b 010820 RS a) Changes for 16bpp mode and non-EPSON controllers
3.00a4 010723 JE a) Optimization added for LCD_L0_DrawVLine for
16 bit bus, 4 bpp, SWAP_XY, MIRROR_Y
3.00a3 010718 JE a) Bugfix in LCD_L0_GetPixelIndex, LCD_SWAP_XY,
LCD_MIRROR_X and LCD_MIRROR_Y was not
supported
b) Bugfix: DrawBitLine8BPP, DrawBitLine4BPP:
LCD_SWAP_XY was not supported
3.00a2 010718 JE a) Bugfix in LCD_L0_GetPixelIndex, optimized
version for LCD_BUSWIDTH == 8
3.00a1 010515 RS a) SUperfluos compiler warnings eliminated
3.00a 010509 RS a) LUT init for 1374 fixed
3.00 010430 RS a) Optimizaion for 4bpp bitmaps in regular 8bpp
mode
2.02 010402 RS a) LCD_GetDevCaps removed from driver
(now LCD.c)
2.00f 001030 RS a) Optimization for 8bpp bitmaps without palette
in 16bit bus mode now also used if
COM LUT is being used -> mayor acceleration
if this configuration is used (VDO/BMW)
2.00e 001019 RS a) Optimization for 8bpp bitmaps without palette
in 16bit bus mode now also used if
COM LUT is being used -> mayor acceleration
if this configuration is used (VDO/BMW)
2.00d 001017 RS a) Video memory init removed from this driver
(normally done by LCD_Init in LCD.c)
2.00c 001013 RS a) 8bbp dd-bitmaps in 16bit bus, 4bpp configuration
accelerated (for use with memory devices)
2.00b 000925 RS a) Source cleaned up (no effect on code)
2.00a 000911 RS a) LCD_DATAADR introduced
2.00 000525 RS a) New interface supported.
b) Support for LCD_LUT_COM added
1.40a 000524 RS/JE a) 1 BPP bitmap draw fix: Misbehaved if
Backgroundcolor == Color
1.40 000516 RS a) LCD_GetColorIndex implemented
b) Support for simulation added
1.30l 000505 RS/JE a) 8 bit DDB fix
1.30k 000428 JE a) Optimized version of DrawBitLine8BPP (16 bit)
now draws transparent bitmaps
1.30j 000426 RS a) Support for V1.30 interface
1) LCD_SetColorIndex, LCD_SetBkColorIndex
added
2) LCD_InitLUT,LCD_SetColor, LCD_SetBkColor
removed (now in LCD_COLOR)
b) Cleanup
1.30i 000416 RS a) Small cleanups
1.30h 000411 RS a) Optimized DrawHLine 8bpp, 8 bit bus
1.30g 000411 JE a) Now all textmodes supported in
DrawBitLine1BPP for 1bpp mode
1.30f 000411 JE a) Support for 1bpp mode added to LCD_L0_GetPixelIndex
b) Clipping in DrawBitLine1BPP for 1bpp mode changed
1.30e 000408 RS a) 1BPP mode, 8bit bus accelerated
1.30d 000408 RS a) LCD_SetNormalDispMode, LCD_SetReverseDispMode
eliminated
1.30c 000406 JE a) Code generation: 133x controller excluded
1.30b 000404 RS a) LCD_DrawHLine accelerated for 1BPP/8bitbus
1.30a 000403 RS a) Support for 1bpp mode added with 16 bit bus
1.30 000402 RS a) Interface changed: LCD_GetDevCaps
1.14j 000401 RS a) Offset type changed to unsigned
1.14i 000327 RS a) LCD_SetPaletteEntry renamed LCD_L0_SetLUTEntry
LCD_InitPalette renamed LCD_InitLUT
1.14h 000324 JE a) DrawBitLine8BPP_DDP & DrawBitLine8BPP merged
1.14g 000323 RS a) offets types changed from int to
unsigned int in order for 16-bit CPUs
to cope with bigger vmem areas
b) COLOR2INDEX macro created (simplifying
driver source)
c) LCD_SetBkColorIndex, LCD_SetColorIndex
created
1.14f 000322 RS a) 1BPP mde supported
1.14e 000321 RS a) 4BPP mode, 8 bit bus accelerated
1.14d 000320 RS a) Support for 1375 palette init added
1.14c 000306 JE a) Support for SED13806 added
1.14b 991213 JE a) LCD_DrawBitMap changed: If LCD_MIRROR_X==1 the
standard routine DrawBitLine1BPP has to be used
1.14a 991211 RS a) 8-bit mode Swapped, y-mirror accelerated
(using SETNEXTPIXEL)
1.14 991206 RS a) SWAP_XY modes supported, 8-bit bus modes
accelerated
1.12b 991201 RS a) XY2OFF macro clean up: parameterorder changed
1.12a 991129 RS a) Additional defaults for config switches defined
in order to keep config files simple
1.12 991128 RS a) PIXELCOLOR definition moved to top in order to
avoid compiler warnings
b) Optimizations for 8 bit modes added
1.10.25 991113 RS a) Comments brushed up
b) Cleanup in LCD_DrawBitmap1BPPBB
c) LCD_DrawBitLine1BPPBB eliminated, as its
functionality has been completely replaced
by LCD_DrawBitmap1BPPBB
d) Default for LCD_OPTIMIZE set to (1) for all
configurations
e) LCD_DrawBitmap1BPPBB would not necessarily
work correctly if the drawing area had been
reduced because of clipping to less than one
line. Fixed.
1.10.24 991022 JE a) Support for LCD_COMTRANS & LCD_SEGTRANS completed
b) LUT init for SED1356 changed, reverse mode supported
1.10.23 991021 RS a) Illegal optimization were used with LCD_COMTRANS
Fixed.
1.10.22 991021 JE a) BitBLT support for SED1356 accellerated,
drawing 1 bitmap instead of bitlines
b) LCD_TYPE_COMTRANS & LCD_TYPE_SEGTRANS (re)implemented
c) LCD_ENABLE_REG_ACCESS implemented to accellerate
BitBLT routines with register access
1.10.21 991020 JE a) BitBLT support for SED1356 finished and cleand up
1.10.20 991019 JE/RS a) LCD_SetPalette (re)implemented for 1354 controllers
1.10.19 991019 JE a) SetBkColor/SetColor fix
b) LCD_DrawPixelAA added
1.10.18 991015 JE a) BitBLT Support added for 8bpp and 15bpp color mode
1.10.17 991012 JE a) LCD_DrawBitLine8BPP changed
1.10.16 991012 JE a) LCD_DrawHLine changed
b) Color translation in 8bpp mode supported
1.10.15 991011 RS a) LCD_DrawBitLine8BPP optimized for 16 bit bus, 8bpp
b) LCD_DrawHLine optimized for 16 bit bus, 8bpp
c) Color translation changed, PhysColors only used
when LCD_FIXEDPALETTE == 0
1.10.14 991011 JE a) Optimizations in LCD_DrawHLine changed in 8 & 15b pp mode
1.10.13 991009 RS a) LCD_DrawHLine cleaned up for easier readability
b) Support for 8 bit bus added
c) XY2OFF macro cleaned up, accelerated
d) Palettes reversed for all gray modes as default
(since most displays require current (or set bi ts)
in order to make a pixel dark
e) DrawBitLine2BPP: Bug with transparent bitmaps
fixed: The left 1-4 pixel were not drawn or not
drawn correctly
1.10.12 991008 JE a) LCD_DrawHLine changed
b) renamed LCD_USE_OPT -> LCD_OPTIMIZE
c) LCD_LSB_SHIFT introduced in order to support
both big and little endian systems.
d) Result of XY2OFF changed from byte to word
1.10.11 991007 JE a) Configuration switch LCD_USE_OPT included
b) X-clipping in DrawBitLine1BPP & DrawBitLine2BPP changed
c) LCD_DrawVLine changed, the last pixel of a line was not drawn
1.10.10 991007 JE a) Support for clipping and XOR modes for 4bpp and 8bpp included
b) LCD_DrawVLine optimized
c) X-clipping in DrawBitLine8BPP changed
1.10.09 991005 JE a) Support 4bpp and 8bpp included
b) Optimization for LCD_DrawHLine 8bpp and 4bpp
c) New LCD_SHIFT_DATA to shift data bits
d) Offset calculation in dependence of LCD_BUSWIDTH included
1.10.08 990928 RS a) Optimization for LCD_DrawHLine
b) Various compile warnings eliminated
c) LCD_Color2Color15 renamed LCD_Color2Index15
1.10.07 990927 RS a) Defaults for config switches added
b) LCD_SWAPXY --> LCD_SWAP_XY for compatibility
c) LCD_SetPalette eliminated
1.10.06 990924 JE/RS a) BYTESPERLINE changed to work for a normal
system (BMW might require Config change)
1.10.05 990831 RS a) Full support for transparent 16 color
bitmaps (bugfix)
1.10.04 Font support for true color
1.10.03
1.10.02 990713 RS LCD_MEMSIZE calculation changed
1.10.01 990713 RS Fix for Memsize in colormode
1.10 990711 RS Support for Segment/Com Lookup tables added
1.00 990118 RS First release.
---------------------------LIST OF CONFIG SWITCHES--------------------
The following is a list of additional configuration switches for this
driver. These switches might not be listed in the manual, because
the manual mainly covers the general config switches which are
supported by all drivers.
----------------------------------------------------------------------
define ----------------------Explanation------------------------------
LCD_SWAP_BYTE_ORDER Activate if high low bytes are swapped
Default: 0
LCD_WRITE_MEM32(Off,Data32) This macro accelerates display access
if defined by allowing the CPU to write
32 bits at a time to the controller.
(For 32 bits CPUs only and only if the
BUS interface unit can automatically
convert this to 2 16 bit accesses
LCD_OPTIMIZE Controls the use of optimized routines.
If 1, several (speed) optimizations are used.
Default: ON (1)
LCD_USE_BITBLT This switch controls the use of optimized routines
with SED1356 bitblt engine.
If 1, the optimized routines with bitblt access are used.
The default value depends of LCD_BITSPERPIXEL: (4 ) -> 0, (8,15) -> 1
LCD_ENABLE_REG_ACCESS()
LCD_ENABLE_MEM_ACCESS() In most systems (and with most LCD-controllers)
registers / memory can be accessed at
different addresses. However, in some
systems, it could be necessary to exec
code in order to be able to access the
registers or memory. This code should
then be placed in these macros (rather
than the actual access macros, which
would be slowed down)
LCD_DATAADR define adress if video memory can be treated
like regular memory
(will speed up driver)
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
none
----------------------------------------------------------------------
Open issues
----------------------------------------------------------------------
None
---------------------------END-OF-HEADER------------------------------
*/
#include <stddef.h> /* needed for definition of NULL */
#include "LCD_Private.h" /* private modul definitions & config */
#include "GUI_Private.h"
#include "GUIDebug.h"
#include "LCD_0.h" /* Defines for first display */
#if (LCD_CONTROLLER/100 == 13) && (LCD_CONTROLLER/10 != 133) \
&& (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
/*
*********************************************************
* *
* Compiler specific settings *
* *
*********************************************************
*/
#ifdef WIN32 /* Avoid warnings in MS-compiler */
#pragma warning(disable : 4244) // warning C4244: '=' : conversion from 'long ' to 'unsigned char ', possible loss of data
#pragma warning(disable : 4761) // warning C4761: integral size mismatch in argument; conversion supplied
#endif
/*
*********************************************************
*
* Controller renumbering
*
*********************************************************
EPSON decided to rename all of their controllers. In order to
be able to work with old and new numbers, we simply map the old ones
to the new ones.
*/
#if LCD_CONTROLLER == 1386
#undef LCD_CONTROLLER
#define LCD_CONTROLLER 13806
#endif
/*
*********************************************************
* *
* Defaults for configuration *
* *
*********************************************************
*/
/* Switch for support of multiple pages.
Only available with certain LCD-controllers */
#ifndef LCD_SUPPORT_PAGING
#define LCD_SUPPORT_PAGING (0)
#endif
#ifndef LCD_SCHEDULE_CNT
#define LCD_SCHEDULE_CNT (0)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -