/* ----------------------------------------------------------------------------
|
* SAM Software Package License
|
* ----------------------------------------------------------------------------
|
* Copyright (c) 2011, Atmel Corporation
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* - Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the disclaimer below.
|
*
|
* Atmel's name may not be used to endorse or promote products derived from
|
* this software without specific prior written permission.
|
*
|
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* ----------------------------------------------------------------------------
|
*/
|
|
/**
|
* \file
|
*
|
* Interface of R61509V driver.
|
*
|
*/
|
|
#ifndef __LCD_R61509V_H
|
#define __LCD_R61509V_H
|
|
/*----------------------------------------------------------------------------
|
* Headers
|
*----------------------------------------------------------------------------*/
|
|
|
#include <stdint.h>
|
typedef uint16_t LcdColor_t ;
|
|
|
/*----------------------------------------------------------------------------
|
* Definitions
|
*----------------------------------------------------------------------------*/
|
|
/* LCDµÄCSÁ¬µÄPD7(NE1),ËùÒÔÎÒÃÇʹÓõÄÊÇNorflashµÄBank1,µØÖ··¶Î§Îª0X60000000~0X63FFFFFF
|
* LCDµÄRS(¼Ä´æÆ÷/Êý¾ÝÑ¡Ôñ½Å)Á¬PD11(FSMC_A16),ÕâÑùµ±A16Ϊ¸ßµçƽʱ¾ÍÊÇÊý¾Ý¼Ä´æÆ÷£¬µÍµçƽÔòΪÃüÁî¼Ä´æÆ÷
|
* ËùÒÔÊý¾Ý¼Ä´æÆ÷µÄµØÖ·Îª: 0x6000 0000 |= 1<<16 ==> 0x6001 0000(¸ÃֵΪ8λģʽϵÄ×Ö½ÚµØÖ·)
|
* ÓÉÓÚÎÒÃDzÉÓõÄÊÇ16λÊý¾ÝÏߣ¬FSMC[24:0]ÓëHADDR[25:1](AHBµØÖ·)¶ÔÆë£¬ÕâÑùHADDRÒª×óÒÆÒ»Î»²ÅÊÇFSMCµÄ·ÃÎʵØÖ·;
|
* Òò´ËΪÁ˰ÑFSMCÖеÄFSMC_A16ÖÃ1£¬Êµ¼ÊÉÏÒª¶ÔÓ¦µ½HADDRµØÖ·µÄHADDR_A17£¬¼´0x6002 0000
|
*/
|
#define Bank1_LCD_DAT ((uint32_t)0x60020000) //ÏÔÊ¾ÇøÊý¾ÝµØÖ·
|
#define Bank1_LCD_CMD ((uint32_t)0x60000000) //ÏÔÊ¾ÇøÖ¸ÁîµØÖ·
|
|
#define LCD_RST (1<<0) // PE1-LCD-RST
|
#define LCD_RST_SET(x) GPIOE->ODR=(GPIOE->ODR&~LCD_RST)|(x ? LCD_RST : 0)
|
|
#define BOARD_LCD_WIDTH 240
|
#define BOARD_LCD_HEIGHT 400
|
|
#define MODE_BGR 0
|
#define MODE_RGB 1
|
|
/* color definition */
|
#define COLOR_RED 0XF800
|
#define COLOR_GREEN 0X07E0
|
#define COLOR_BLUE 0X001F
|
#define COLOR_BRED 0XF81F
|
#define COLOR_GRED 0XFFE0
|
#define COLOR_GBLUE 0X07FF
|
#define COLOR_BLACK 0X0000
|
#define COLOR_WHITE 0XFFFF
|
#define COLOR_PURPUE 0XA294
|
|
|
/* R61509V ID code */
|
#define R61509V_DEVICE_CODE 0xB509 /* The device code ¡°B509¡±H is read out when this register is read forcibly. */
|
|
/* R61509V LCD Registers */
|
#define R61509V_R000H 0x000 /* Device Code Read */
|
#define R61509V_R001H 0x001 /* Driver Output Control 1 */
|
#define R61509V_R001H_SS ((uint16_t)0x0100)
|
#define R61509V_R001H_SM ((uint16_t)0x0400)
|
#define R61509V_R002H 0x002 /* LCD Drive Waveform Contro */
|
#define R61509V_R003H 0x003 /* Entry Mode */
|
#define R61509V_R003H_AM ((uint16_t)0x0008) /* AM Control the GRAM update direction */
|
#define R61509V_R003H_ID0 ((uint16_t)0x0010) /* I/D[1:0] Control the address counter */
|
#define R61509V_R003H_ID1 ((uint16_t)0x0020)
|
#define R61509V_R003H_ORG ((uint16_t)0x0080)
|
#define R61509V_R003H_BGR ((uint16_t)0x1000)
|
#define R61509V_R003H_DFM ((uint16_t)0x4000)
|
#define R61509V_R003H_TRI ((uint16_t)0x8000)
|
#define R61509V_R007H 0x007 /* Display Control 1 */
|
#define R61509V_R007H_BASEE ((uint16_t)0x0100)
|
#define R61509V_R007H_PTDE ((uint16_t)0x1000)
|
|
#define R61509V_R008H 0x008 /* Display Control 2 */
|
#define R61509V_R009H 0x009 /* Display Control 3 */
|
|
#define R61509V_R010H 0x010 /* Panel Interface Control 1 */
|
#define R61509V_R011H 0x011 /* Panel Interface Control 2 */
|
#define R61509V_R012H 0x012 /* Panel Interface Control 3 */
|
#define R61509V_R013H 0x013 /* Panel Interface Control 4 */
|
#define R61509V_R014H 0x014 /* Panel Interface Control 5 */
|
|
#define R61509V_R00CH 0x00C /* External Display Interface Control 1 */
|
#define R61509V_R00FH 0x00F /* External Display Interface Control 2 */
|
#define R61509V_R090H 0x090 /* Frame Marker Control */
|
|
#define R61509V_R100H 0x100 /* Power Control Control 1 */
|
#define R61509V_R101H 0x101 /* Power Control Control 2 */
|
#define R61509V_R102H 0x102 /* Power Control Control 3 */
|
#define R61509V_R102H_PON ((uint16_t)0x0010)
|
#define R61509V_R102H_PSON ((uint16_t)0x0020)
|
#define R61509V_R103H 0x103 /* Power Control Control 4 */
|
|
#define R61509V_R200H 0x200 /* Horizontal GRAM Address Set */
|
#define R61509V_R201H 0x201 /* Vertical GRAM Address Set */
|
#define R61509V_R202H 0x202 /* GRAM Data Write/Read */
|
|
#define R61509V_R210H 0x210 /* Window Horizontal Address Start Position */
|
#define R61509V_R211H 0x211 /* Window Horizontal Address End Position */
|
#define R61509V_R212H 0x212 /* Window Vertical Address Start Position */
|
#define R61509V_R213H 0x213 /* Window Vertical Address End Position */
|
|
#define R61509V_R300H 0x300 /* Gamma Control 1 */
|
#define R61509V_R301H 0x301 /* Gamma Control 2 */
|
#define R61509V_R302H 0x302 /* Gamma Control 3 */
|
#define R61509V_R303H 0x303 /* Gamma Control 4 */
|
#define R61509V_R304H 0x304 /* Gamma Control 5 */
|
#define R61509V_R305H 0x305 /* Gamma Control 6 */
|
#define R61509V_R306H 0x306 /* Gamma Control 7 */
|
#define R61509V_R307H 0x307 /* Gamma Control 8 */
|
#define R61509V_R308H 0x308 /* Gamma Control 9 */
|
#define R61509V_R309H 0x309 /* Gamma Control 10 */
|
|
#define R61509V_R280H 0x280 /* NVM Data Read / write */
|
|
#define R61509V_R400H 0x400 /* Base Image Number of Line */
|
#define R61509V_R400H_GS ((uint16_t)0x8000)
|
#define R61509V_R401H 0x401 /* Base Image Display Control */
|
#define R61509V_R404H 0x404 /* Base Image Vertical Scroll Control */
|
|
#define R61509V_R500H 0x500 /* Partial Image 1 Display Position */
|
#define R61509V_R501H 0x501 /* RAM Address 1(Start Line Address) */
|
#define R61509V_R502H 0x502 /* RAM Address 2(End Line Address) */
|
|
|
|
/*----------------------------------------------------------------------------
|
* Types
|
*----------------------------------------------------------------------------*/
|
|
typedef volatile uint16_t REG16;
|
|
/*----------------------------------------------------------------------------
|
* Marcos
|
*----------------------------------------------------------------------------*/
|
|
/** LCD index register address */
|
#define LCD_IR() (*((REG16 *)(Bank1_LCD_CMD)))
|
|
/** LCD data address */
|
#define LCD_D() (*((REG16 *)(Bank1_LCD_DAT)))
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
/*----------------------------------------------------------------------------
|
* Exported functions
|
*----------------------------------------------------------------------------*/
|
extern void LCD_WriteReg( uint16_t reg, uint16_t data );
|
extern uint16_t LCD_ReadReg( uint16_t reg );
|
extern void LCD_WriteRAM_Prepare( void );
|
extern void LCD_WriteRAM( LcdColor_t dwColor );
|
extern void LCD_ReadRAM_Prepare( void );
|
extern void LCD_WriteRAMWord( uint16_t wColor );
|
extern uint32_t LCD_ReadRAM( void );
|
extern uint32_t LCD_Initialize( void );
|
extern void LCD_On( void );
|
extern void LCD_Off( void );
|
extern void LCD_PowerDown( void );
|
extern uint32_t LCD_SetColor(uint32_t dwRgb24Bits);
|
extern void LCD_SetCursor( uint16_t x, uint16_t y );
|
extern void LCD_SetWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight );
|
extern void LCD_SetDisplayLandscape( uint32_t dwRGB );
|
extern void LCD_SetDisplayPortrait( uint16_t wRGB );
|
extern void LCD_VerticalScroll( uint16_t wY );
|
extern void LCD_SetPartialImage1( uint32_t dwDisplayPos, uint32_t dwStart, uint32_t dwEnd );
|
extern uint32_t LCD_DrawPixel( uint32_t x, uint32_t y );
|
extern void LCD_TestPattern( uint32_t dwRGB );
|
extern uint32_t LCD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
extern uint32_t LCD_DrawPicture( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, const LcdColor_t *pBuffer );
|
extern uint32_t LCD_DrawLine ( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
extern uint32_t LCD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR );
|
extern uint32_t LCD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwRadius);
|
extern uint32_t LCD_DrawRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
extern void LCD_SetBacklight (uint32_t level);
|
#ifdef __cplusplus
|
}
|
#endif
|
#endif /* #ifndef R61509V */
|