URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_MPU_LPC1768_GCC_RedSuite/] [src/] [LCD/] [lcd_driver.c] - Rev 582
Compare with Previous | Blame | View Log
//***************************************************************************** // +--+ // | ++----+ // +-++ | // | | // +-+--+ | // | +--+--+ // +----+ Copyright (c) 2009 Code Red Technologies Ltd. // // lcd_driver.c contains the lowest level access routines for the Sitronix // ST7637 LCD Controller/driver used on the RDB1768 development board. // // // Software License Agreement // // The software is owned by Code Red Technologies and/or its suppliers, and is // protected under applicable copyright laws. All rights are reserved. Any // use in violation of the foregoing restrictions may subject the user to criminal // sanctions under applicable laws, as well as to civil liability for the breach // of the terms and conditions of this license. // // THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED // OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. // USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT // TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH // CODE RED TECHNOLOGIES LTD. #include "NXP/LPC17xx/LPC17xx.h" #include "lcd_driver.h" #include "lcd_commands.h" // Bits within GPIO port 2 used for LCD driver #define LCD_CSB_PIN (1<<13) #define LCD_A0_PIN (1<<8) #define LCD_WR_PIN (1<<11) #define LCD_RD_PIN (1<<12) #define LCD_DATA_PIN 0xff // Bit within GPIO port 3 used for LCD driver #define LCD_RESB_PIN (1<<25) // Bits to configure as outputs for driving LCD #define LCD_PORT2_DIRECTIONS (LCD_CSB_PIN | LCD_A0_PIN | LCD_WR_PIN | LCD_RD_PIN | LCD_DATA_PIN) #define LCD_PORT3_DIRECTIONS (LCD_RESB_PIN) // Define names for GPIO port 2 and 3 registers to better indicate in code // the operation being carried out on the LCD driver hardware. #define LCD_DATA_CLR FIO2CLR #define LCD_DATA_SET FIO2SET #define LCD_CSB_CLR FIO2CLR #define LCD_CSB_SET FIO2SET #define LCD_RESB_CLR FIO3CLR #define LCD_RESB_SET FIO3SET #define LCD_A0_CLR FIO2CLR #define LCD_A0_SET FIO2SET #define LCD_WR_CLR FIO2CLR #define LCD_WR_SET FIO2SET #define LCD_RD_CLR FIO2CLR #define LCD_RD_SET FIO2SET // Routine to write data to LCD driver. Normally called in combination // with LCDdriver_WriteCom() routine void LCDdriver_WriteData(unsigned char LCD_Data) { LCD_DATA_CLR = LCD_DATA_PIN; LCD_DATA_SET = LCD_Data; LCD_CSB_CLR = LCD_CSB_PIN; LCD_WR_CLR = LCD_WR_PIN; LCD_WR_SET = LCD_WR_PIN; LCD_CSB_SET = LCD_CSB_PIN; } // Routine to configure set LCD driver to accept particular command. // A call to this routine will normally be followed by a call // to LCDdriver_WriteData() to transfer appropriate parameters to driver. void LCDdriver_WriteCom(unsigned char LCD_Command) { LCD_DATA_CLR = LCD_DATA_PIN; LCD_DATA_SET = LCD_Command; LCD_A0_CLR = LCD_A0_PIN; LCD_CSB_CLR = LCD_CSB_PIN; LCD_WR_CLR = LCD_WR_PIN; LCD_WR_SET = LCD_WR_PIN; LCD_CSB_SET = LCD_CSB_PIN; LCD_A0_SET = LCD_A0_PIN; } // Function to add short delays in writing things to the LCD. void ms_delay(int n) { volatile int d; for (d=0; d<n*3000; d++){} } // Initialize GPIO connection to the LCD driver void LCDdriver_ConfigGPIOtoLCD(void) { // set direction to outputs FIO2DIR |= LCD_PORT2_DIRECTIONS; FIO3DIR |= LCD_PORT3_DIRECTIONS; // Set GPIO outputs connected to LCD to default values LCD_CSB_SET = LCD_CSB_PIN; LCD_A0_SET = LCD_A0_PIN; LCD_WR_SET = LCD_WR_PIN; LCD_RD_SET = LCD_RD_PIN; LCD_RESB_SET = LCD_RESB_PIN; LCD_DATA_CLR = 0xff; // data bus to zero } // Initialisation routine to set up LCD void LCDdriver_initialisation(void) { int i; // temp loop variable LCDdriver_ConfigGPIOtoLCD(); // Initialize the GPIO for the display LCDdriver_WriteCom(DD_SWRESET); // SW reset ms_delay(120); // Small delay LCDdriver_WriteCom(DD_AUTOLOADSET); // disable auto loading of mask rom data LCDdriver_WriteData(0xBF); LCDdriver_WriteCom(DD_EPCTIN); // OTP control mode=read LCDdriver_WriteData(0x00); ms_delay(10); // Small delay LCDdriver_WriteCom(DD_EPREAD); // Start the OTP read. ms_delay(20); // Small delay LCDdriver_WriteCom(DD_EPCTOUT); // Cancel the OTP read (20ms should have been enough) LCDdriver_WriteCom(DD_DISPOFF); // display off LCDdriver_WriteCom(DD_SLPOUT); // Exit sleep mode. ms_delay(50); // Small delay LCDdriver_WriteCom(DD_VopSet); // set LCD operating voltage to 14V. LCDdriver_WriteData(0x04); LCDdriver_WriteData(0x01); LCDdriver_WriteCom(DD_BiasSel); // Select an LCD bias voltage ratio of 1/12. LCDdriver_WriteData(0x00); LCDdriver_WriteCom(DD_BstMbpXSel); // x8 booster circuit on LCDdriver_WriteData(0x07); LCDdriver_WriteCom(DD_ColScanDir); // Invert the column scan direction for the panel. LCDdriver_WriteData(0xC0); LCDdriver_WriteCom(DD_COLORMOD); // 16bpp, 5-6-5 data input mode. LCDdriver_WriteData(0x05); LCDdriver_WriteCom(DD_MADCTR); // mem scan direction LCDdriver_WriteData(0x00); LCDdriver_WriteCom(DD_DISPON); // display on // Now Clear the Screen LCDdriver_WriteCom(DD_CASET); LCDdriver_WriteData(0x00); LCDdriver_WriteData(0x7F); LCDdriver_WriteCom(DD_RASET); LCDdriver_WriteData(0x01); LCDdriver_WriteData(0x80); LCDdriver_WriteCom(DD_RAMWR); for(i = 0; i < (128 * 128); i++) { LCDdriver_WriteData(0x00); LCDdriver_WriteData(0x00); } LCDdriver_WriteCom(DD_NORON); // normal operation mode }