mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-30 05:31:40 +01:00 
			
		
		
		
	
		
			
	
	
		
			152 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*******************************************************************************
 | ||
|  | 
 | ||
|  | Copyright (c) 2006-2007 by Tensilica Inc.  ALL RIGHTS RESERVED. | ||
|  | These coded instructions, statements, and computer programs are the | ||
|  | copyrighted works and confidential proprietary information of Tensilica Inc. | ||
|  | They may not be modified, copied, reproduced, distributed, or disclosed to | ||
|  | third parties in any manner, medium, or form, in whole or in part, without | ||
|  | the prior written consent of Tensilica Inc. | ||
|  | -------------------------------------------------------------------------------- | ||
|  | 
 | ||
|  | lcd-SPLC780D.h  Generic definitions for Sunplus SPLC780D LCD Controller | ||
|  | 
 | ||
|  | This is used by board-support-packages with one or more LCD displays that use | ||
|  | a SPLC780D controller. A BSP provides a base address for each instance of an  | ||
|  | SPLC780D LCD controller on the board. | ||
|  | 
 | ||
|  | Note that LCD display operation is almost totally independent of the LCD  | ||
|  | display, depending almost entirely on the controller. However the display | ||
|  | may limit the number of characters of the controller's RAM buffer that are | ||
|  | actually visible at one time. The length of the display's visible window | ||
|  | is not specifified in this controller-specific header, but comes to the  | ||
|  | driver from the board-specific "display.h" header. | ||
|  | 
 | ||
|  | *******************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef _LCD_SPLC780D_H_
 | ||
|  | #define _LCD_SPLC780D_H_
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* Offsets to controller registers from base. */ | ||
|  | #define SPLC780D_INST   0
 | ||
|  | #define SPLC780D_DATA   (SPLC780D_INST + SPLC780D_REGSPACING)
 | ||
|  | 
 | ||
|  | /*
 | ||
|  | Bit fields and their values in the instruction register. | ||
|  | These fields are NOT orthogonal - they overlap! | ||
|  | Thus only one field may be written at a time, determined by the  | ||
|  | most-significant 1 bit in the pattern (the field selector). | ||
|  | All less significant bits are part of the value of the selected field. | ||
|  | The fields and their values are grouped together to emphasize this format. | ||
|  | Field selector macro names end in '_' (implying something more needs | ||
|  | to be ORed) and the value macros are indented. The pattern written to a | ||
|  | bitfield is a bitwise OR of a field selector and one or more values, eg. | ||
|  |   (SPLC780D_INST_ON_ | SPLC780D_INST_ON_DISPLAY | SPLC780D_INST_ON_CURSOR) | ||
|  | A single bit field (eg. SPCL780D_INST_HOME) need not have a value. | ||
|  | 
 | ||
|  | NOTE: Controller requires a software delay after writing to the control | ||
|  | or data registers. For the data register it is 38us. For the control | ||
|  | register it is 38us for most bit fields, with the following exceptions: | ||
|  |     SPLC780D_FUNC_                               100us. | ||
|  |     SPLC780D_INST_CLEAR, SPLC780D_INST_HOME     1520us. | ||
|  | For more details and reset timing, see the SUNPLUS SPLC780D data sheet. | ||
|  | */ | ||
|  | 
 | ||
|  | #define SPLC780D_INST_CLEAR_            0x1 /* clear (blank) display) */
 | ||
|  | 
 | ||
|  | #define SPLC780D_INST_HOME_             0x2 /* home cursor and shift pos */
 | ||
|  | 
 | ||
|  | #define SPLC780D_INST_ENTRY_            0x4 /* combine *ENTRY_* flags below */
 | ||
|  | #define     SPLC780D_INST_ENTRY_SHIFT   0x1 /* display shift on entry / not */
 | ||
|  | #define     SPLC780D_INST_ENTRY_INCR    0x2 /* cursor incr / decr */
 | ||
|  | #define     SPLC780D_INST_ENTRY_DECR      0 /* cursor incr / decr */
 | ||
|  | 
 | ||
|  | #define SPLC780D_INST_ON_               0x8     /* combine *ON_* flags below */
 | ||
|  | #define     SPLC780D_INST_ON_DISPLAY    0x4 /* display on / off */
 | ||
|  | #define     SPLC780D_INST_ON_CURSOR     0x2 /* cursor  on / off */
 | ||
|  | #define     SPLC780D_INST_ON_BLINK      0x1 /* blink   on / off */
 | ||
|  | 
 | ||
|  | #define SPLC780D_INST_SHIFT_           0x10 /* combine *SHIFT_* flags below */
 | ||
|  | #define     SPLC780D_INST_SHIFT_DISP    0x8 /* shift display / move cursor */
 | ||
|  | #define     SPLC780D_INST_SHIFT_CURS      0 /* shift display / move cursor */
 | ||
|  | #define     SPLC780D_INST_SHIFT_RIGHT   0x4 /* shift right / left */
 | ||
|  | #define     SPLC780D_INST_SHIFT_LEFT      0 /* shift right / left */
 | ||
|  | 
 | ||
|  | #define SPLC780D_INST_FUNC_            0x20 /* combine *FUNC_* flags below */
 | ||
|  | #define     SPLC780D_INST_FUNC_8BIT    0x10 /* data length 8 bit / 4 bit */
 | ||
|  | #define     SPLC780D_INST_FUNC_4BIT       0 /* data length 8 bit / 4 bit */
 | ||
|  | #define     SPLC780D_INST_FUNC_2LINE   0x08 /* display lines 2 / 1 */
 | ||
|  | #define     SPLC780D_INST_FUNC_1LINE      0 /* display lines 2 / 1 */
 | ||
|  | #define     SPLC780D_INST_FUNC_F5x10   0x04 /* character font 5x10 / 5x8 */
 | ||
|  | #define     SPLC780D_INST_FUNC_F5x8       0 /* character font 5x10 / 5x8 */
 | ||
|  |                                             /* font must be 5x8 for 2 lines */ | ||
|  | #define SPLC780D_INST_CGEN_            0x40 /* set char generator address */
 | ||
|  | #define     SPLC780D_INST_CGEN_ADDR    0x3F /*   to address in this field */
 | ||
|  | #define SPLC780D_INST_DRAM_            0x80 /* set display data RAM address */
 | ||
|  | #define     SPLC780D_INST_DRAM_ADDR    0x7F /*   to address in this field */
 | ||
|  | #define     SPLC780D_INST_DRAM_LINE2   0x40 /* address offset to line 2 */
 | ||
|  | /* Controller limits */ | ||
|  | #define SPLC780D_RAMLEN_1LINE          0x50 /* length of line in RAM (1 line) */
 | ||
|  | #define SPLC780D_RAMLEN_2LINE          0x28 /* length of line in RAM (2 line) */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef __ASSEMBLER__
 | ||
|  | 
 | ||
|  | /* C interface to controller registers. */ | ||
|  | struct splc780d_s { | ||
|  |     splc780d_reg_t  inst;       /* instruction register */ | ||
|  |     splc780d_reg_t  data;       /* data register */ | ||
|  | }; | ||
|  | 
 | ||
|  | typedef volatile struct splc780d_s splc780d_t; | ||
|  | 
 | ||
|  | /*
 | ||
|  | Prototypes of high level driver functions. | ||
|  | */ | ||
|  | 
 | ||
|  | /*
 | ||
|  | Initialize the display with the FUNC_, ENTRY_ and ON_ fields as specified in  | ||
|  | terms of the values above. The splc780d_init_default() macro is an example. | ||
|  | */ | ||
|  | extern void splc780d_init(splc780d_t *lcd, | ||
|  |                           unsigned func, unsigned entry, unsigned on); | ||
|  | 
 | ||
|  | /*
 | ||
|  | Initialize the display to default mode: 8-bit interface, 2 line, 5x8 font,  | ||
|  | increment cursor on entry, display on (cursor and blinking off). | ||
|  | */ | ||
|  | #define splc780d_init_default(lcd) \
 | ||
|  |     splc780d_init( lcd, \ | ||
|  |             SPLC780D_INST_FUNC_8BIT \ | ||
|  |             | SPLC780D_INST_FUNC_2LINE \ | ||
|  |             | SPLC780D_INST_FUNC_F5x8, \ | ||
|  |             SPLC780D_INST_ENTRY_INCR, \ | ||
|  |             SPLC780D_INST_ON_DISPLAY \ | ||
|  |             ) | ||
|  | 
 | ||
|  | /*
 | ||
|  | Write a single character at a given position (chars from left, starting at 0). | ||
|  | Wait long enough afterward for the controller to be ready for more input. | ||
|  | Positions beyond the end of the display are ignored. | ||
|  | */ | ||
|  | extern void splc780d_write_char(splc780d_t *lcd, unsigned pos, const char c); | ||
|  | 
 | ||
|  | /*
 | ||
|  | Write a string to the display starting at the left (position 0).  | ||
|  | Blank-pad to or truncate at the end of the display (overwrites any previous  | ||
|  | string so don't need to blank the display first). | ||
|  | Wait long enough after each char for the controller to be ready for more input. | ||
|  | */ | ||
|  | extern void splc780d_write_string(splc780d_t *lcd, const char *s); | ||
|  | 
 | ||
|  | /*
 | ||
|  | Blank (clear) the entire display. | ||
|  | Wait long enough afterward for the controller to be ready for more input. | ||
|  | */ | ||
|  | extern void splc780d_blank(splc780d_t *lcd); | ||
|  | 
 | ||
|  | #endif /* __ASSEMBLER__ */
 | ||
|  | 
 | ||
|  | #endif /* _LCD_SPLC780D_H_ */
 | ||
|  | 
 |