SMARTEST lib for MPS2

Dependents:   MSP2_LCD_HOLA

Committer:
FelipeVR
Date:
Thu Aug 23 13:39:38 2018 +0000
Revision:
0:f1a413971403
SMARTEST LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FelipeVR 0:f1a413971403 1 /*-----------------------------------------------------------------------------
FelipeVR 0:f1a413971403 2 * Name: GLCD_SPI_MPS2.c
FelipeVR 0:f1a413971403 3 * Purpose: MPS2 low level Graphic LCD (320x240 pixels) with SPI interface
FelipeVR 0:f1a413971403 4 *-----------------------------------------------------------------------------
FelipeVR 0:f1a413971403 5 * This file is part of the uVision/ARM development tools.
FelipeVR 0:f1a413971403 6 * This software may only be used under the terms of a valid, current,
FelipeVR 0:f1a413971403 7 * end user licence from KEIL for a compatible version of KEIL software
FelipeVR 0:f1a413971403 8 * development tools. Nothing else gives you the right to use this software.
FelipeVR 0:f1a413971403 9 *
FelipeVR 0:f1a413971403 10 * This software is supplied "AS IS" without warranties of any kind.
FelipeVR 0:f1a413971403 11 *
FelipeVR 0:f1a413971403 12 * Copyright (c) 2013 KEIL - An ARM Company. All rights reserved.
FelipeVR 0:f1a413971403 13 *----------------------------------------------------------------------------*/
FelipeVR 0:f1a413971403 14
FelipeVR 0:f1a413971403 15
FelipeVR 0:f1a413971403 16 #include "SMM_MPS2.h"
FelipeVR 0:f1a413971403 17 #include "GLCD_SPI_MPS2.h"
FelipeVR 0:f1a413971403 18
FelipeVR 0:f1a413971403 19 #include "Font_6x8_h.h"
FelipeVR 0:f1a413971403 20 #include "Font_16x24_h.h"
FelipeVR 0:f1a413971403 21
FelipeVR 0:f1a413971403 22
FelipeVR 0:f1a413971403 23 /************************** Orientation configuration ************************/
FelipeVR 0:f1a413971403 24
FelipeVR 0:f1a413971403 25 #ifndef LANDSCAPE
FelipeVR 0:f1a413971403 26 #define LANDSCAPE 1 /* 1 for landscape, 0 for portrait */
FelipeVR 0:f1a413971403 27 #endif
FelipeVR 0:f1a413971403 28 #ifndef ROTATE180
FelipeVR 0:f1a413971403 29 #define ROTATE180 1 /* 1 to rotate the screen for 180 deg */
FelipeVR 0:f1a413971403 30 #endif
FelipeVR 0:f1a413971403 31
FelipeVR 0:f1a413971403 32 /*------------------------- Speed dependant settings -------------------------*/
FelipeVR 0:f1a413971403 33
FelipeVR 0:f1a413971403 34 /* If processor works on high frequency delay has to be increased, it can be
FelipeVR 0:f1a413971403 35 increased by factor 2^N by this constant */
FelipeVR 0:f1a413971403 36 #define DELAY_2N 8
FelipeVR 0:f1a413971403 37
FelipeVR 0:f1a413971403 38 /*---------------------- Graphic LCD size definitions ------------------------*/
FelipeVR 0:f1a413971403 39
FelipeVR 0:f1a413971403 40 #if (LANDSCAPE == 1)
FelipeVR 0:f1a413971403 41 #define WIDTH 320 /* Screen Width (in pixels) */
FelipeVR 0:f1a413971403 42 #define HEIGHT 240 /* Screen Hight (in pixels) */
FelipeVR 0:f1a413971403 43 #else
FelipeVR 0:f1a413971403 44 #define WIDTH 240 /* Screen Width (in pixels) */
FelipeVR 0:f1a413971403 45 #define HEIGHT 320 /* Screen Hight (in pixels) */
FelipeVR 0:f1a413971403 46 #endif
FelipeVR 0:f1a413971403 47 #define BPP 16 /* Bits per pixel */
FelipeVR 0:f1a413971403 48 #define BYPP ((BPP+7)/8) /* Bytes per pixel */
FelipeVR 0:f1a413971403 49
FelipeVR 0:f1a413971403 50 /*--------------- Graphic LCD interface hardware definitions -----------------*/
FelipeVR 0:f1a413971403 51
FelipeVR 0:f1a413971403 52 /* Pin CS setting to 0 or 1 */
FelipeVR 0:f1a413971403 53 #define LCD_CS(x) ((x) ? (MPS2_FPGAIO->MISC |= CLCD_CS_Msk) : (MPS2_FPGAIO->MISC &= ~CLCD_CS_Msk))
FelipeVR 0:f1a413971403 54
FelipeVR 0:f1a413971403 55 #define SPI_START (0x70) /* Start byte for SPI transfer */
FelipeVR 0:f1a413971403 56 #define SPI_RD (0x01) /* WR bit 1 within start */
FelipeVR 0:f1a413971403 57 #define SPI_WR (0x00) /* WR bit 0 within start */
FelipeVR 0:f1a413971403 58 #define SPI_DATA (0x02) /* RS bit 1 within start byte */
FelipeVR 0:f1a413971403 59 #define SPI_INDEX (0x00) /* RS bit 0 within start byte */
FelipeVR 0:f1a413971403 60
FelipeVR 0:f1a413971403 61 #define BG_COLOR 0 /* Background color */
FelipeVR 0:f1a413971403 62 #define TXT_COLOR 1 /* Text color */
FelipeVR 0:f1a413971403 63
FelipeVR 0:f1a413971403 64
FelipeVR 0:f1a413971403 65 /************************ Global variables ************************************/
FelipeVR 0:f1a413971403 66
FelipeVR 0:f1a413971403 67 /******************************************************************************
FelipeVR 0:f1a413971403 68 * Text and background color *
FelipeVR 0:f1a413971403 69 *******************************************************************************/
FelipeVR 0:f1a413971403 70 static volatile unsigned short Color[2] = {White, Black};
FelipeVR 0:f1a413971403 71
FelipeVR 0:f1a413971403 72 /************************ Local auxiliary functions ***************************/
FelipeVR 0:f1a413971403 73
FelipeVR 0:f1a413971403 74 /*******************************************************************************
FelipeVR 0:f1a413971403 75 * Delay in while loop cycles *
FelipeVR 0:f1a413971403 76 * Parameter: cnt: number of while cycles to delay *
FelipeVR 0:f1a413971403 77 * Return: *
FelipeVR 0:f1a413971403 78 *******************************************************************************/
FelipeVR 0:f1a413971403 79
FelipeVR 0:f1a413971403 80 static void delay (int cnt) {
FelipeVR 0:f1a413971403 81 cnt <<= DELAY_2N;
FelipeVR 0:f1a413971403 82 while (cnt--);
FelipeVR 0:f1a413971403 83 }
FelipeVR 0:f1a413971403 84
FelipeVR 0:f1a413971403 85
FelipeVR 0:f1a413971403 86 /*******************************************************************************
FelipeVR 0:f1a413971403 87 * Transfer 1 byte over the serial communication *
FelipeVR 0:f1a413971403 88 * Parameter: byte: byte to be sent *
FelipeVR 0:f1a413971403 89 * Return: byte read while sending *
FelipeVR 0:f1a413971403 90 *******************************************************************************/
FelipeVR 0:f1a413971403 91
FelipeVR 0:f1a413971403 92 static __inline unsigned char spi_tran (unsigned char byte) {
FelipeVR 0:f1a413971403 93
FelipeVR 0:f1a413971403 94 MPS2_SSP0->DR = byte;
FelipeVR 0:f1a413971403 95 while (MPS2_SSP0->SR & SSP_SR_BSY_Msk); /* Wait for send to finish */
FelipeVR 0:f1a413971403 96 return (MPS2_SSP0->DR);
FelipeVR 0:f1a413971403 97 }
FelipeVR 0:f1a413971403 98
FelipeVR 0:f1a413971403 99
FelipeVR 0:f1a413971403 100 /*******************************************************************************
FelipeVR 0:f1a413971403 101 * Write a command the LCD controller *
FelipeVR 0:f1a413971403 102 * Parameter: cmd: command to be written *
FelipeVR 0:f1a413971403 103 * Return: *
FelipeVR 0:f1a413971403 104 *******************************************************************************/
FelipeVR 0:f1a413971403 105
FelipeVR 0:f1a413971403 106 static __inline void wr_cmd (unsigned char cmd) {
FelipeVR 0:f1a413971403 107 LCD_CS(0);
FelipeVR 0:f1a413971403 108 spi_tran(SPI_START | SPI_WR | SPI_INDEX); /* Write : RS = 0, RW = 0 */
FelipeVR 0:f1a413971403 109 spi_tran(0);
FelipeVR 0:f1a413971403 110 spi_tran(cmd);
FelipeVR 0:f1a413971403 111 LCD_CS(1);
FelipeVR 0:f1a413971403 112 }
FelipeVR 0:f1a413971403 113
FelipeVR 0:f1a413971403 114
FelipeVR 0:f1a413971403 115 /*******************************************************************************
FelipeVR 0:f1a413971403 116 * Write data to the LCD controller *
FelipeVR 0:f1a413971403 117 * Parameter: dat: data to be written *
FelipeVR 0:f1a413971403 118 * Return: *
FelipeVR 0:f1a413971403 119 *******************************************************************************/
FelipeVR 0:f1a413971403 120
FelipeVR 0:f1a413971403 121 static __inline void wr_dat (unsigned short dat) {
FelipeVR 0:f1a413971403 122 LCD_CS(0);
FelipeVR 0:f1a413971403 123 spi_tran(SPI_START | SPI_WR | SPI_DATA); /* Write : RS = 1, RW = 0 */
FelipeVR 0:f1a413971403 124 spi_tran((dat >> 8)); /* Write D8..D15 */
FelipeVR 0:f1a413971403 125 spi_tran((dat & 0xFF)); /* Write D0..D7 */
FelipeVR 0:f1a413971403 126 LCD_CS(1);
FelipeVR 0:f1a413971403 127 }
FelipeVR 0:f1a413971403 128
FelipeVR 0:f1a413971403 129
FelipeVR 0:f1a413971403 130 /*******************************************************************************
FelipeVR 0:f1a413971403 131 * Start of data writing to the LCD controller *
FelipeVR 0:f1a413971403 132 * Parameter: *
FelipeVR 0:f1a413971403 133 * Return: *
FelipeVR 0:f1a413971403 134 *******************************************************************************/
FelipeVR 0:f1a413971403 135
FelipeVR 0:f1a413971403 136 static __inline void wr_dat_start (void) {
FelipeVR 0:f1a413971403 137 LCD_CS(0);
FelipeVR 0:f1a413971403 138 spi_tran(SPI_START | SPI_WR | SPI_DATA); /* Write : RS = 1, RW = 0 */
FelipeVR 0:f1a413971403 139 }
FelipeVR 0:f1a413971403 140
FelipeVR 0:f1a413971403 141
FelipeVR 0:f1a413971403 142 /*******************************************************************************
FelipeVR 0:f1a413971403 143 * Stop of data writing to the LCD controller *
FelipeVR 0:f1a413971403 144 * Parameter: *
FelipeVR 0:f1a413971403 145 * Return: *
FelipeVR 0:f1a413971403 146 *******************************************************************************/
FelipeVR 0:f1a413971403 147
FelipeVR 0:f1a413971403 148 static __inline void wr_dat_stop (void) {
FelipeVR 0:f1a413971403 149
FelipeVR 0:f1a413971403 150 LCD_CS(1);
FelipeVR 0:f1a413971403 151 }
FelipeVR 0:f1a413971403 152
FelipeVR 0:f1a413971403 153
FelipeVR 0:f1a413971403 154 /*******************************************************************************
FelipeVR 0:f1a413971403 155 * Data writing to the LCD controller *
FelipeVR 0:f1a413971403 156 * Parameter: dat: data to be written *
FelipeVR 0:f1a413971403 157 * Return: *
FelipeVR 0:f1a413971403 158 *******************************************************************************/
FelipeVR 0:f1a413971403 159
FelipeVR 0:f1a413971403 160 static __inline void wr_dat_only (unsigned short dat) {
FelipeVR 0:f1a413971403 161
FelipeVR 0:f1a413971403 162 spi_tran((dat >> 8)); /* Write D8..D15 */
FelipeVR 0:f1a413971403 163 spi_tran((dat & 0xFF)); /* Write D0..D7 */
FelipeVR 0:f1a413971403 164 }
FelipeVR 0:f1a413971403 165
FelipeVR 0:f1a413971403 166
FelipeVR 0:f1a413971403 167 /*******************************************************************************
FelipeVR 0:f1a413971403 168 * Write a value to the to LCD register *
FelipeVR 0:f1a413971403 169 * Parameter: reg: register to be written *
FelipeVR 0:f1a413971403 170 * val: value to write to the register *
FelipeVR 0:f1a413971403 171 *******************************************************************************/
FelipeVR 0:f1a413971403 172
FelipeVR 0:f1a413971403 173 static __inline void wr_reg (unsigned char reg, unsigned short val) {
FelipeVR 0:f1a413971403 174
FelipeVR 0:f1a413971403 175 wr_cmd(reg);
FelipeVR 0:f1a413971403 176 wr_dat(val);
FelipeVR 0:f1a413971403 177 }
FelipeVR 0:f1a413971403 178
FelipeVR 0:f1a413971403 179
FelipeVR 0:f1a413971403 180 /************************ Exported functions **********************************/
FelipeVR 0:f1a413971403 181
FelipeVR 0:f1a413971403 182
FelipeVR 0:f1a413971403 183
FelipeVR 0:f1a413971403 184 /*******************************************************************************
FelipeVR 0:f1a413971403 185 * Initialize the Himax LCD with HX8347-D LCD Controller *
FelipeVR 0:f1a413971403 186 * Parameter: *
FelipeVR 0:f1a413971403 187 * Return: *
FelipeVR 0:f1a413971403 188 *******************************************************************************/
FelipeVR 0:f1a413971403 189
FelipeVR 0:f1a413971403 190 void GLCD_Initialize (void) {
FelipeVR 0:f1a413971403 191
FelipeVR 0:f1a413971403 192 /* Configure SSP used for LCD */
FelipeVR 0:f1a413971403 193 MPS2_SSP0->CR1 = 0; /* Synchronous serial port disable */
FelipeVR 0:f1a413971403 194 MPS2_SSP0->DMACR = 0; /* Disable FIFO DMA */
FelipeVR 0:f1a413971403 195 MPS2_SSP0->IMSC = 0; /* Mask all FIFO/IRQ interrupts */
FelipeVR 0:f1a413971403 196 MPS2_SSP0->ICR = ((1ul << 0) | /* Clear SSPRORINTR interrupt */
FelipeVR 0:f1a413971403 197 (1ul << 1) ); /* Clear SSPRTINTR interrupt */
FelipeVR 0:f1a413971403 198 MPS2_SSP0->CR0 = ((7ul << 0) | /* 8 bit data size */
FelipeVR 0:f1a413971403 199 (0ul << 4) | /* Motorola frame format */
FelipeVR 0:f1a413971403 200 (0ul << 6) | /* CPOL = 0 */
FelipeVR 0:f1a413971403 201 (0ul << 7) | /* CPHA = 0 */
FelipeVR 0:f1a413971403 202 (1ul << 8) ); /* Set serial clock rate */
FelipeVR 0:f1a413971403 203 MPS2_SSP0->CPSR = (2ul << 0); /* set SSP clk to 6MHz (6.6MHz max) */
FelipeVR 0:f1a413971403 204 MPS2_SSP0->CR1 = ((1ul << 1) | /* Synchronous serial port enable */
FelipeVR 0:f1a413971403 205 (0ul << 2) ); /* Device configured as master */
FelipeVR 0:f1a413971403 206
FelipeVR 0:f1a413971403 207 /* CLCD screen setup (Default CLCD screen interface state) */
FelipeVR 0:f1a413971403 208 MPS2_FPGAIO->MISC |= (CLCD_CS_Msk | /* deassert nCS0 */
FelipeVR 0:f1a413971403 209 CLCD_RESET_Msk); /* deassert Reset */
FelipeVR 0:f1a413971403 210 MPS2_FPGAIO->MISC &= ~(CLCD_RS_Msk | /* deassert RS */
FelipeVR 0:f1a413971403 211 CLCD_RD_Msk | /* deassert RD */
FelipeVR 0:f1a413971403 212 CLCD_BL_Msk ); /* switch off backlight */
FelipeVR 0:f1a413971403 213
FelipeVR 0:f1a413971403 214 // Reset CLCD screen
FelipeVR 0:f1a413971403 215 MPS2_FPGAIO->MISC &= ~CLCD_RESET_Msk; /* assert Reset */
FelipeVR 0:f1a413971403 216 delay(1);
FelipeVR 0:f1a413971403 217 MPS2_FPGAIO->MISC |= CLCD_RESET_Msk; /* deassert Reset */
FelipeVR 0:f1a413971403 218 delay(10);
FelipeVR 0:f1a413971403 219
FelipeVR 0:f1a413971403 220 // if (driverCode == 0x47) { /* LCD with HX8347-D LCD Controller */
FelipeVR 0:f1a413971403 221 // Himax = 1; /* Set Himax LCD controller flag */
FelipeVR 0:f1a413971403 222 /* Driving ability settings ----------------------------------------------*/
FelipeVR 0:f1a413971403 223 wr_reg(0xEA, 0x00); /* Power control internal used (1) */
FelipeVR 0:f1a413971403 224 wr_reg(0xEB, 0x20); /* Power control internal used (2) */
FelipeVR 0:f1a413971403 225 wr_reg(0xEC, 0x0C); /* Source control internal used (1) */
FelipeVR 0:f1a413971403 226 wr_reg(0xED, 0xC7); /* Source control internal used (2) */
FelipeVR 0:f1a413971403 227 wr_reg(0xE8, 0x38); /* Source output period Normal mode */
FelipeVR 0:f1a413971403 228 wr_reg(0xE9, 0x10); /* Source output period Idle mode */
FelipeVR 0:f1a413971403 229 wr_reg(0xF1, 0x01); /* RGB 18-bit interface ;0x0110 */
FelipeVR 0:f1a413971403 230 wr_reg(0xF2, 0x10);
FelipeVR 0:f1a413971403 231
FelipeVR 0:f1a413971403 232 /* Adjust the Gamma Curve ------------------------------------------------*/
FelipeVR 0:f1a413971403 233 wr_reg(0x40, 0x01);
FelipeVR 0:f1a413971403 234 wr_reg(0x41, 0x00);
FelipeVR 0:f1a413971403 235 wr_reg(0x42, 0x00);
FelipeVR 0:f1a413971403 236 wr_reg(0x43, 0x10);
FelipeVR 0:f1a413971403 237 wr_reg(0x44, 0x0E);
FelipeVR 0:f1a413971403 238 wr_reg(0x45, 0x24);
FelipeVR 0:f1a413971403 239 wr_reg(0x46, 0x04);
FelipeVR 0:f1a413971403 240 wr_reg(0x47, 0x50);
FelipeVR 0:f1a413971403 241 wr_reg(0x48, 0x02);
FelipeVR 0:f1a413971403 242 wr_reg(0x49, 0x13);
FelipeVR 0:f1a413971403 243 wr_reg(0x4A, 0x19);
FelipeVR 0:f1a413971403 244 wr_reg(0x4B, 0x19);
FelipeVR 0:f1a413971403 245 wr_reg(0x4C, 0x16);
FelipeVR 0:f1a413971403 246
FelipeVR 0:f1a413971403 247 wr_reg(0x50, 0x1B);
FelipeVR 0:f1a413971403 248 wr_reg(0x51, 0x31);
FelipeVR 0:f1a413971403 249 wr_reg(0x52, 0x2F);
FelipeVR 0:f1a413971403 250 wr_reg(0x53, 0x3F);
FelipeVR 0:f1a413971403 251 wr_reg(0x54, 0x3F);
FelipeVR 0:f1a413971403 252 wr_reg(0x55, 0x3E);
FelipeVR 0:f1a413971403 253 wr_reg(0x56, 0x2F);
FelipeVR 0:f1a413971403 254 wr_reg(0x57, 0x7B);
FelipeVR 0:f1a413971403 255 wr_reg(0x58, 0x09);
FelipeVR 0:f1a413971403 256 wr_reg(0x59, 0x06);
FelipeVR 0:f1a413971403 257 wr_reg(0x5A, 0x06);
FelipeVR 0:f1a413971403 258 wr_reg(0x5B, 0x0C);
FelipeVR 0:f1a413971403 259 wr_reg(0x5C, 0x1D);
FelipeVR 0:f1a413971403 260 wr_reg(0x5D, 0xCC);
FelipeVR 0:f1a413971403 261
FelipeVR 0:f1a413971403 262 /* Power voltage setting -------------------------------------------------*/
FelipeVR 0:f1a413971403 263 wr_reg(0x1B, 0x1B);
FelipeVR 0:f1a413971403 264 wr_reg(0x1A, 0x01);
FelipeVR 0:f1a413971403 265 wr_reg(0x24, 0x2F);
FelipeVR 0:f1a413971403 266 wr_reg(0x25, 0x57);
FelipeVR 0:f1a413971403 267 wr_reg(0x23, 0x88);
FelipeVR 0:f1a413971403 268
FelipeVR 0:f1a413971403 269 /* Power on setting ------------------------------------------------------*/
FelipeVR 0:f1a413971403 270 wr_reg(0x18, 0x36); /* Internal oscillator frequency adj */
FelipeVR 0:f1a413971403 271 wr_reg(0x19, 0x01); /* Enable internal oscillator */
FelipeVR 0:f1a413971403 272 wr_reg(0x01, 0x00); /* Normal mode, no scrool */
FelipeVR 0:f1a413971403 273 wr_reg(0x1F, 0x88); /* Power control 6 - DDVDH Off */
FelipeVR 0:f1a413971403 274 delay(20);
FelipeVR 0:f1a413971403 275 wr_reg(0x1F, 0x82); /* Power control 6 - Step-up: 3 x VCI */
FelipeVR 0:f1a413971403 276 delay(5);
FelipeVR 0:f1a413971403 277 wr_reg(0x1F, 0x92); /* Power control 6 - Step-up: On */
FelipeVR 0:f1a413971403 278 delay(5);
FelipeVR 0:f1a413971403 279 wr_reg(0x1F, 0xD2); /* Power control 6 - VCOML active */
FelipeVR 0:f1a413971403 280 delay(5);
FelipeVR 0:f1a413971403 281
FelipeVR 0:f1a413971403 282 /* Color selection -------------------------------------------------------*/
FelipeVR 0:f1a413971403 283 wr_reg(0x17, 0x55); /* RGB, System interface: 16 Bit/Pixel*/
FelipeVR 0:f1a413971403 284 wr_reg(0x00, 0x00); /* Scrolling off, no standby */
FelipeVR 0:f1a413971403 285
FelipeVR 0:f1a413971403 286 /* Interface config ------------------------------------------------------*/
FelipeVR 0:f1a413971403 287 wr_reg(0x2F, 0x11); /* LCD Drive: 1-line inversion */
FelipeVR 0:f1a413971403 288 wr_reg(0x31, 0x00);
FelipeVR 0:f1a413971403 289 wr_reg(0x32, 0x00); /* DPL=0, HSPL=0, VSPL=0, EPL=0 */
FelipeVR 0:f1a413971403 290
FelipeVR 0:f1a413971403 291 /* Display on setting ----------------------------------------------------*/
FelipeVR 0:f1a413971403 292 wr_reg(0x28, 0x38); /* PT(0,0) active, VGL/VGL */
FelipeVR 0:f1a413971403 293 delay(20);
FelipeVR 0:f1a413971403 294 wr_reg(0x28, 0x3C); /* Display active, VGL/VGL */
FelipeVR 0:f1a413971403 295
FelipeVR 0:f1a413971403 296 #if (LANDSCAPE == 1)
FelipeVR 0:f1a413971403 297 #if (ROTATE180 == 0)
FelipeVR 0:f1a413971403 298 wr_reg (0x16, 0xA8);
FelipeVR 0:f1a413971403 299 #else
FelipeVR 0:f1a413971403 300 wr_reg (0x16, 0x68);
FelipeVR 0:f1a413971403 301 #endif
FelipeVR 0:f1a413971403 302 #else
FelipeVR 0:f1a413971403 303 #if (ROTATE180 == 0)
FelipeVR 0:f1a413971403 304 wr_reg (0x16, 0x08);
FelipeVR 0:f1a413971403 305 #else
FelipeVR 0:f1a413971403 306 wr_reg (0x16, 0xC8);
FelipeVR 0:f1a413971403 307 #endif
FelipeVR 0:f1a413971403 308 #endif
FelipeVR 0:f1a413971403 309
FelipeVR 0:f1a413971403 310 /* Display scrolling settings --------------------------------------------*/
FelipeVR 0:f1a413971403 311 wr_reg(0x0E, 0x00); /* TFA MSB */
FelipeVR 0:f1a413971403 312 wr_reg(0x0F, 0x00); /* TFA LSB */
FelipeVR 0:f1a413971403 313 wr_reg(0x10, 320 >> 8); /* VSA MSB */
FelipeVR 0:f1a413971403 314 wr_reg(0x11, 320 & 0xFF); /* VSA LSB */
FelipeVR 0:f1a413971403 315 wr_reg(0x12, 0x00); /* BFA MSB */
FelipeVR 0:f1a413971403 316 wr_reg(0x13, 0x00); /* BFA LSB */
FelipeVR 0:f1a413971403 317 // }
FelipeVR 0:f1a413971403 318
FelipeVR 0:f1a413971403 319 MPS2_FPGAIO->MISC |= (CLCD_BL_Msk); /* turn on backlight */
FelipeVR 0:f1a413971403 320 }
FelipeVR 0:f1a413971403 321
FelipeVR 0:f1a413971403 322
FelipeVR 0:f1a413971403 323 /*******************************************************************************
FelipeVR 0:f1a413971403 324 * Set draw window region *
FelipeVR 0:f1a413971403 325 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 326 * y: vertical position *
FelipeVR 0:f1a413971403 327 * w: window width in pixel *
FelipeVR 0:f1a413971403 328 * h: window height in pixels *
FelipeVR 0:f1a413971403 329 * Return: *
FelipeVR 0:f1a413971403 330 *******************************************************************************/
FelipeVR 0:f1a413971403 331
FelipeVR 0:f1a413971403 332 void GLCD_SetWindow (unsigned int x, unsigned int y, unsigned int w, unsigned int h) {
FelipeVR 0:f1a413971403 333 unsigned int xe, ye;
FelipeVR 0:f1a413971403 334
FelipeVR 0:f1a413971403 335 xe = x+w-1;
FelipeVR 0:f1a413971403 336 ye = y+h-1;
FelipeVR 0:f1a413971403 337
FelipeVR 0:f1a413971403 338 wr_reg(0x02, x >> 8); /* Column address start MSB */
FelipeVR 0:f1a413971403 339 wr_reg(0x03, x & 0xFF); /* Column address start LSB */
FelipeVR 0:f1a413971403 340 wr_reg(0x04, xe >> 8); /* Column address end MSB */
FelipeVR 0:f1a413971403 341 wr_reg(0x05, xe & 0xFF); /* Column address end LSB */
FelipeVR 0:f1a413971403 342
FelipeVR 0:f1a413971403 343 wr_reg(0x06, y >> 8); /* Row address start MSB */
FelipeVR 0:f1a413971403 344 wr_reg(0x07, y & 0xFF); /* Row address start LSB */
FelipeVR 0:f1a413971403 345 wr_reg(0x08, ye >> 8); /* Row address end MSB */
FelipeVR 0:f1a413971403 346 wr_reg(0x09, ye & 0xFF); /* Row address end LSB */
FelipeVR 0:f1a413971403 347 }
FelipeVR 0:f1a413971403 348
FelipeVR 0:f1a413971403 349
FelipeVR 0:f1a413971403 350 /*******************************************************************************
FelipeVR 0:f1a413971403 351 * Set draw window region *
FelipeVR 0:f1a413971403 352 * Parameter: xs: start horizontal position *
FelipeVR 0:f1a413971403 353 * xe: end horizontal position *
FelipeVR 0:f1a413971403 354 * ys: start vertical position *
FelipeVR 0:f1a413971403 355 * ye: end vertical position *
FelipeVR 0:f1a413971403 356 * Return: *
FelipeVR 0:f1a413971403 357 *******************************************************************************/
FelipeVR 0:f1a413971403 358
FelipeVR 0:f1a413971403 359 void GLCD_SetWindowSize (unsigned int xs, unsigned int xe, unsigned int ys, unsigned int ye) {
FelipeVR 0:f1a413971403 360
FelipeVR 0:f1a413971403 361 wr_reg(0x02, xs >> 8); /* Column address start MSB */
FelipeVR 0:f1a413971403 362 wr_reg(0x03, xs & 0xFF); /* Column address start LSB */
FelipeVR 0:f1a413971403 363 wr_reg(0x04, xe >> 8); /* Column address end MSB */
FelipeVR 0:f1a413971403 364 wr_reg(0x05, xe & 0xFF); /* Column address end LSB */
FelipeVR 0:f1a413971403 365
FelipeVR 0:f1a413971403 366 wr_reg(0x06, ys >> 8); /* Row address start MSB */
FelipeVR 0:f1a413971403 367 wr_reg(0x07, ys & 0xFF); /* Row address start LSB */
FelipeVR 0:f1a413971403 368 wr_reg(0x08, ye >> 8); /* Row address end MSB */
FelipeVR 0:f1a413971403 369 wr_reg(0x09, ye & 0xFF); /* Row address end LSB */
FelipeVR 0:f1a413971403 370 }
FelipeVR 0:f1a413971403 371
FelipeVR 0:f1a413971403 372
FelipeVR 0:f1a413971403 373 /*******************************************************************************
FelipeVR 0:f1a413971403 374 * Set draw window region to whole screen *
FelipeVR 0:f1a413971403 375 * Parameter: *
FelipeVR 0:f1a413971403 376 * Return: *
FelipeVR 0:f1a413971403 377 *******************************************************************************/
FelipeVR 0:f1a413971403 378
FelipeVR 0:f1a413971403 379 void GLCD_WindowMax (void) {
FelipeVR 0:f1a413971403 380 GLCD_SetWindow (0, 0, WIDTH, HEIGHT);
FelipeVR 0:f1a413971403 381 }
FelipeVR 0:f1a413971403 382
FelipeVR 0:f1a413971403 383
FelipeVR 0:f1a413971403 384 /*******************************************************************************
FelipeVR 0:f1a413971403 385 * Draw a pixel in foreground color *
FelipeVR 0:f1a413971403 386 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 387 * y: vertical position *
FelipeVR 0:f1a413971403 388 * Return: *
FelipeVR 0:f1a413971403 389 *******************************************************************************/
FelipeVR 0:f1a413971403 390
FelipeVR 0:f1a413971403 391 void GLCD_PutPixel (unsigned int x, unsigned int y) {
FelipeVR 0:f1a413971403 392
FelipeVR 0:f1a413971403 393 wr_reg(0x02, x >> 8); /* Column address start MSB */
FelipeVR 0:f1a413971403 394 wr_reg(0x03, x & 0xFF); /* Column address start LSB */
FelipeVR 0:f1a413971403 395 wr_reg(0x04, x >> 8); /* Column address end MSB */
FelipeVR 0:f1a413971403 396 wr_reg(0x05, x & 0xFF); /* Column address end LSB */
FelipeVR 0:f1a413971403 397
FelipeVR 0:f1a413971403 398 wr_reg(0x06, y >> 8); /* Row address start MSB */
FelipeVR 0:f1a413971403 399 wr_reg(0x07, y & 0xFF); /* Row address start LSB */
FelipeVR 0:f1a413971403 400 wr_reg(0x08, y >> 8); /* Row address end MSB */
FelipeVR 0:f1a413971403 401 wr_reg(0x09, y & 0xFF); /* Row address end LSB */
FelipeVR 0:f1a413971403 402
FelipeVR 0:f1a413971403 403 wr_cmd(0x22);
FelipeVR 0:f1a413971403 404 wr_dat(Color[TXT_COLOR]);
FelipeVR 0:f1a413971403 405 }
FelipeVR 0:f1a413971403 406
FelipeVR 0:f1a413971403 407
FelipeVR 0:f1a413971403 408 /*******************************************************************************
FelipeVR 0:f1a413971403 409 * Draw a pixel in supplied color *
FelipeVR 0:f1a413971403 410 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 411 * y: vertical position *
FelipeVR 0:f1a413971403 412 * color: color of pixel *
FelipeVR 0:f1a413971403 413 * Return: *
FelipeVR 0:f1a413971403 414 *******************************************************************************/
FelipeVR 0:f1a413971403 415
FelipeVR 0:f1a413971403 416 void GLCD_PutPixelColor (unsigned int x, unsigned int y, unsigned short color) {
FelipeVR 0:f1a413971403 417
FelipeVR 0:f1a413971403 418 wr_reg(0x02, x >> 8); /* Column address start MSB */
FelipeVR 0:f1a413971403 419 wr_reg(0x03, x & 0xFF); /* Column address start LSB */
FelipeVR 0:f1a413971403 420 wr_reg(0x04, x >> 8); /* Column address end MSB */
FelipeVR 0:f1a413971403 421 wr_reg(0x05, x & 0xFF); /* Column address end LSB */
FelipeVR 0:f1a413971403 422
FelipeVR 0:f1a413971403 423 wr_reg(0x06, y >> 8); /* Row address start MSB */
FelipeVR 0:f1a413971403 424 wr_reg(0x07, y & 0xFF); /* Row address start LSB */
FelipeVR 0:f1a413971403 425 wr_reg(0x08, y >> 8); /* Row address end MSB */
FelipeVR 0:f1a413971403 426 wr_reg(0x09, y & 0xFF); /* Row address end LSB */
FelipeVR 0:f1a413971403 427
FelipeVR 0:f1a413971403 428 wr_cmd(0x22);
FelipeVR 0:f1a413971403 429 wr_dat(color);
FelipeVR 0:f1a413971403 430 }
FelipeVR 0:f1a413971403 431
FelipeVR 0:f1a413971403 432
FelipeVR 0:f1a413971403 433 /*******************************************************************************
FelipeVR 0:f1a413971403 434 * Set foreground color *
FelipeVR 0:f1a413971403 435 * Parameter: color: foreground color *
FelipeVR 0:f1a413971403 436 * Return: *
FelipeVR 0:f1a413971403 437 *******************************************************************************/
FelipeVR 0:f1a413971403 438
FelipeVR 0:f1a413971403 439 void GLCD_SetTextColor (unsigned short color) {
FelipeVR 0:f1a413971403 440 Color[TXT_COLOR] = color;
FelipeVR 0:f1a413971403 441 }
FelipeVR 0:f1a413971403 442
FelipeVR 0:f1a413971403 443
FelipeVR 0:f1a413971403 444 /*******************************************************************************
FelipeVR 0:f1a413971403 445 * Set background color *
FelipeVR 0:f1a413971403 446 * Parameter: color: background color *
FelipeVR 0:f1a413971403 447 * Return: *
FelipeVR 0:f1a413971403 448 *******************************************************************************/
FelipeVR 0:f1a413971403 449
FelipeVR 0:f1a413971403 450 void GLCD_SetBackColor (unsigned short color) {
FelipeVR 0:f1a413971403 451 Color[BG_COLOR] = color;
FelipeVR 0:f1a413971403 452 }
FelipeVR 0:f1a413971403 453
FelipeVR 0:f1a413971403 454
FelipeVR 0:f1a413971403 455 /*******************************************************************************
FelipeVR 0:f1a413971403 456 * Clear display *
FelipeVR 0:f1a413971403 457 * Parameter: color: display clearing color *
FelipeVR 0:f1a413971403 458 * Return: *
FelipeVR 0:f1a413971403 459 *******************************************************************************/
FelipeVR 0:f1a413971403 460
FelipeVR 0:f1a413971403 461 void GLCD_Clear (unsigned short color) {
FelipeVR 0:f1a413971403 462 unsigned int i;
FelipeVR 0:f1a413971403 463
FelipeVR 0:f1a413971403 464 GLCD_WindowMax();
FelipeVR 0:f1a413971403 465 wr_cmd(0x22);
FelipeVR 0:f1a413971403 466 wr_dat_start();
FelipeVR 0:f1a413971403 467
FelipeVR 0:f1a413971403 468 for(i = 0; i < (WIDTH*HEIGHT); i++)
FelipeVR 0:f1a413971403 469 wr_dat_only(color);
FelipeVR 0:f1a413971403 470 wr_dat_stop();
FelipeVR 0:f1a413971403 471 }
FelipeVR 0:f1a413971403 472
FelipeVR 0:f1a413971403 473
FelipeVR 0:f1a413971403 474 /*******************************************************************************
FelipeVR 0:f1a413971403 475 * Draw character on given position *
FelipeVR 0:f1a413971403 476 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 477 * y: vertical position *
FelipeVR 0:f1a413971403 478 * cw: character width in pixel *
FelipeVR 0:f1a413971403 479 * ch: character height in pixels *
FelipeVR 0:f1a413971403 480 * c: pointer to character bitmap *
FelipeVR 0:f1a413971403 481 * Return: *
FelipeVR 0:f1a413971403 482 *******************************************************************************/
FelipeVR 0:f1a413971403 483
FelipeVR 0:f1a413971403 484 void GLCD_DrawChar (unsigned int x, unsigned int y, unsigned int cw, unsigned int ch, unsigned char *c) {
FelipeVR 0:f1a413971403 485 unsigned int i, j, k, pixs;
FelipeVR 0:f1a413971403 486
FelipeVR 0:f1a413971403 487 GLCD_SetWindow(x, y, cw, ch);
FelipeVR 0:f1a413971403 488
FelipeVR 0:f1a413971403 489 wr_cmd(0x22);
FelipeVR 0:f1a413971403 490 wr_dat_start();
FelipeVR 0:f1a413971403 491
FelipeVR 0:f1a413971403 492 k = (cw + 7)/8;
FelipeVR 0:f1a413971403 493
FelipeVR 0:f1a413971403 494 if (k == 1) {
FelipeVR 0:f1a413971403 495 for (j = 0; j < ch; j++) {
FelipeVR 0:f1a413971403 496 pixs = *(unsigned char *)c;
FelipeVR 0:f1a413971403 497 c += 1;
FelipeVR 0:f1a413971403 498
FelipeVR 0:f1a413971403 499 for (i = 0; i < cw; i++) {
FelipeVR 0:f1a413971403 500 wr_dat_only (Color[(pixs >> i) & 1]);
FelipeVR 0:f1a413971403 501 }
FelipeVR 0:f1a413971403 502 }
FelipeVR 0:f1a413971403 503 }
FelipeVR 0:f1a413971403 504 else if (k == 2) {
FelipeVR 0:f1a413971403 505 for (j = 0; j < ch; j++) {
FelipeVR 0:f1a413971403 506 pixs = *(unsigned short *)c;
FelipeVR 0:f1a413971403 507 c += 2;
FelipeVR 0:f1a413971403 508
FelipeVR 0:f1a413971403 509 for (i = 0; i < cw; i++) {
FelipeVR 0:f1a413971403 510 wr_dat_only (Color[(pixs >> i) & 1]);
FelipeVR 0:f1a413971403 511 }
FelipeVR 0:f1a413971403 512 }
FelipeVR 0:f1a413971403 513 }
FelipeVR 0:f1a413971403 514 wr_dat_stop();
FelipeVR 0:f1a413971403 515 }
FelipeVR 0:f1a413971403 516
FelipeVR 0:f1a413971403 517
FelipeVR 0:f1a413971403 518 /*******************************************************************************
FelipeVR 0:f1a413971403 519 * Disply character on given line *
FelipeVR 0:f1a413971403 520 * Parameter: ln: line number *
FelipeVR 0:f1a413971403 521 * col: column number *
FelipeVR 0:f1a413971403 522 * fi: font index (0 = 6x8, 1 = 16x24) *
FelipeVR 0:f1a413971403 523 * c: ascii character *
FelipeVR 0:f1a413971403 524 * Return: *
FelipeVR 0:f1a413971403 525 *******************************************************************************/
FelipeVR 0:f1a413971403 526
FelipeVR 0:f1a413971403 527 void GLCD_DisplayChar (unsigned int ln, unsigned int col, unsigned char fi, unsigned char c) {
FelipeVR 0:f1a413971403 528 c -= 32;
FelipeVR 0:f1a413971403 529 switch (fi) {
FelipeVR 0:f1a413971403 530 case 0: /* Font 6 x 8 */
FelipeVR 0:f1a413971403 531 GLCD_DrawChar(col * 6, ln * 8, 6, 8, (unsigned char *)&Font_6x8_h [c * 8]);
FelipeVR 0:f1a413971403 532 break;
FelipeVR 0:f1a413971403 533 case 1: /* Font 16 x 24 */
FelipeVR 0:f1a413971403 534 GLCD_DrawChar(col * 16, ln * 24, 16, 24, (unsigned char *)&Font_16x24_h[c * 24]);
FelipeVR 0:f1a413971403 535 break;
FelipeVR 0:f1a413971403 536 }
FelipeVR 0:f1a413971403 537 }
FelipeVR 0:f1a413971403 538
FelipeVR 0:f1a413971403 539
FelipeVR 0:f1a413971403 540 /*******************************************************************************
FelipeVR 0:f1a413971403 541 * Disply string on given line *
FelipeVR 0:f1a413971403 542 * Parameter: ln: line number *
FelipeVR 0:f1a413971403 543 * col: column number *
FelipeVR 0:f1a413971403 544 * fi: font index (0 = 6x8, 1 = 16x24) *
FelipeVR 0:f1a413971403 545 * s: pointer to string *
FelipeVR 0:f1a413971403 546 * Return: *
FelipeVR 0:f1a413971403 547 *******************************************************************************/
FelipeVR 0:f1a413971403 548
FelipeVR 0:f1a413971403 549 void GLCD_DisplayString (unsigned int ln, unsigned int col, unsigned char fi, char *s) {
FelipeVR 0:f1a413971403 550 while (*s) {
FelipeVR 0:f1a413971403 551 GLCD_DisplayChar(ln, col++, fi, *s++);
FelipeVR 0:f1a413971403 552 }
FelipeVR 0:f1a413971403 553 }
FelipeVR 0:f1a413971403 554
FelipeVR 0:f1a413971403 555
FelipeVR 0:f1a413971403 556 /*******************************************************************************
FelipeVR 0:f1a413971403 557 * Clear given line *
FelipeVR 0:f1a413971403 558 * Parameter: ln: line number *
FelipeVR 0:f1a413971403 559 * fi: font index (0 = 6x8, 1 = 16x24) *
FelipeVR 0:f1a413971403 560 * Return: *
FelipeVR 0:f1a413971403 561 *******************************************************************************/
FelipeVR 0:f1a413971403 562
FelipeVR 0:f1a413971403 563 void GLCD_ClearLn (unsigned int ln, unsigned char fi) {
FelipeVR 0:f1a413971403 564 unsigned char i;
FelipeVR 0:f1a413971403 565 char buf[60];
FelipeVR 0:f1a413971403 566
FelipeVR 0:f1a413971403 567 GLCD_WindowMax();
FelipeVR 0:f1a413971403 568 switch (fi) {
FelipeVR 0:f1a413971403 569 case 0: /* Font 6 x 8 */
FelipeVR 0:f1a413971403 570 for (i = 0; i < (WIDTH+5)/6; i++)
FelipeVR 0:f1a413971403 571 buf[i] = ' ';
FelipeVR 0:f1a413971403 572 buf[i+1] = 0;
FelipeVR 0:f1a413971403 573 break;
FelipeVR 0:f1a413971403 574 case 1: /* Font 16 x 24 */
FelipeVR 0:f1a413971403 575 for (i = 0; i < (WIDTH+15)/16; i++)
FelipeVR 0:f1a413971403 576 buf[i] = ' ';
FelipeVR 0:f1a413971403 577 buf[i+1] = 0;
FelipeVR 0:f1a413971403 578 break;
FelipeVR 0:f1a413971403 579 }
FelipeVR 0:f1a413971403 580 GLCD_DisplayString (ln, 0, fi, buf);
FelipeVR 0:f1a413971403 581 }
FelipeVR 0:f1a413971403 582
FelipeVR 0:f1a413971403 583 /*******************************************************************************
FelipeVR 0:f1a413971403 584 * Draw bargraph *
FelipeVR 0:f1a413971403 585 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 586 * y: vertical position *
FelipeVR 0:f1a413971403 587 * w: maximum width of bargraph (in pixels) *
FelipeVR 0:f1a413971403 588 * h: bargraph height *
FelipeVR 0:f1a413971403 589 * val: value of active bargraph (in 1/1024) *
FelipeVR 0:f1a413971403 590 * Return: *
FelipeVR 0:f1a413971403 591 *******************************************************************************/
FelipeVR 0:f1a413971403 592
FelipeVR 0:f1a413971403 593 void GLCD_Bargraph (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int val) {
FelipeVR 0:f1a413971403 594 int i,j;
FelipeVR 0:f1a413971403 595
FelipeVR 0:f1a413971403 596 val = (val * w) >> 10; /* Scale value */
FelipeVR 0:f1a413971403 597 GLCD_SetWindow(x, y, w, h);
FelipeVR 0:f1a413971403 598 wr_cmd(0x22);
FelipeVR 0:f1a413971403 599 wr_dat_start();
FelipeVR 0:f1a413971403 600 for (i = 0; i < h; i++) {
FelipeVR 0:f1a413971403 601 for (j = 0; j <= w-1; j++) {
FelipeVR 0:f1a413971403 602 if(j >= val) {
FelipeVR 0:f1a413971403 603 wr_dat_only(Color[BG_COLOR]);
FelipeVR 0:f1a413971403 604 } else {
FelipeVR 0:f1a413971403 605 wr_dat_only(Color[TXT_COLOR]);
FelipeVR 0:f1a413971403 606 }
FelipeVR 0:f1a413971403 607 }
FelipeVR 0:f1a413971403 608 }
FelipeVR 0:f1a413971403 609 wr_dat_stop();
FelipeVR 0:f1a413971403 610 }
FelipeVR 0:f1a413971403 611
FelipeVR 0:f1a413971403 612
FelipeVR 0:f1a413971403 613 /*******************************************************************************
FelipeVR 0:f1a413971403 614 * Display graphical bitmap image at position x horizontally and y vertically *
FelipeVR 0:f1a413971403 615 * (This function is optimized for 16 bits per pixel format, it has to be *
FelipeVR 0:f1a413971403 616 * adapted for any other bits per pixel format) *
FelipeVR 0:f1a413971403 617 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 618 * y: vertical position *
FelipeVR 0:f1a413971403 619 * w: width of bitmap *
FelipeVR 0:f1a413971403 620 * h: height of bitmap *
FelipeVR 0:f1a413971403 621 * bitmap: address at which the bitmap data resides *
FelipeVR 0:f1a413971403 622 * Return: *
FelipeVR 0:f1a413971403 623 *******************************************************************************/
FelipeVR 0:f1a413971403 624
FelipeVR 0:f1a413971403 625 void GLCD_Bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned short *bitmap) {
FelipeVR 0:f1a413971403 626 int i;
FelipeVR 0:f1a413971403 627 // int j;
FelipeVR 0:f1a413971403 628 unsigned short *bitmap_ptr = bitmap;
FelipeVR 0:f1a413971403 629
FelipeVR 0:f1a413971403 630 GLCD_SetWindow (x, y, w, h);
FelipeVR 0:f1a413971403 631
FelipeVR 0:f1a413971403 632 wr_cmd(0x22);
FelipeVR 0:f1a413971403 633 wr_dat_start();
FelipeVR 0:f1a413971403 634 // for (i = (h-1)*w; i > -1; i -= w) {
FelipeVR 0:f1a413971403 635 // for (j = 0; j < w; j++) {
FelipeVR 0:f1a413971403 636 // wr_dat_only (bitmap_ptr[i+j]);
FelipeVR 0:f1a413971403 637 // }
FelipeVR 0:f1a413971403 638 // }
FelipeVR 0:f1a413971403 639
FelipeVR 0:f1a413971403 640 for (i = 0; i < (w*h); i++) {
FelipeVR 0:f1a413971403 641 wr_dat_only (bitmap_ptr[i]);
FelipeVR 0:f1a413971403 642 }
FelipeVR 0:f1a413971403 643 wr_dat_stop();
FelipeVR 0:f1a413971403 644 }
FelipeVR 0:f1a413971403 645
FelipeVR 0:f1a413971403 646
FelipeVR 0:f1a413971403 647 /*******************************************************************************
FelipeVR 0:f1a413971403 648 * Display graphical bitmap image at position x horizontally and y vertically *
FelipeVR 0:f1a413971403 649 * (This function is optimized for 16 bits per pixel format, it has to be *
FelipeVR 0:f1a413971403 650 * adapted for any other bits per pixel format) *
FelipeVR 0:f1a413971403 651 * Parameter: xs: horizontal start position *
FelipeVR 0:f1a413971403 652 * xe: horizontal end position *
FelipeVR 0:f1a413971403 653 * ys: vertical start position *
FelipeVR 0:f1a413971403 654 * ye: vertical end position *
FelipeVR 0:f1a413971403 655 * bitmap: address at which the bitmap data resides *
FelipeVR 0:f1a413971403 656 * Return: *
FelipeVR 0:f1a413971403 657 *******************************************************************************/
FelipeVR 0:f1a413971403 658
FelipeVR 0:f1a413971403 659 void GLCD_BitmapSize (unsigned int xs, unsigned int xe, unsigned int ys, unsigned int ye, unsigned short *bitmap) {
FelipeVR 0:f1a413971403 660 int i;
FelipeVR 0:f1a413971403 661 unsigned short *bitmap_ptr = bitmap;
FelipeVR 0:f1a413971403 662
FelipeVR 0:f1a413971403 663 GLCD_SetWindowSize (xs, xe, ys, ye);
FelipeVR 0:f1a413971403 664
FelipeVR 0:f1a413971403 665 wr_cmd(0x22);
FelipeVR 0:f1a413971403 666 wr_dat_start();
FelipeVR 0:f1a413971403 667
FelipeVR 0:f1a413971403 668 for (i = 0; i < ((xe-xs+1)*(ye-ys)); i++) {
FelipeVR 0:f1a413971403 669 wr_dat_only (bitmap_ptr[i]);
FelipeVR 0:f1a413971403 670 }
FelipeVR 0:f1a413971403 671 wr_dat_stop();
FelipeVR 0:f1a413971403 672 }
FelipeVR 0:f1a413971403 673
FelipeVR 0:f1a413971403 674
FelipeVR 0:f1a413971403 675 /*******************************************************************************
FelipeVR 0:f1a413971403 676 * Scroll content of the whole display for dy pixels vertically *
FelipeVR 0:f1a413971403 677 * Parameter: dy: number of pixels for vertical scroll *
FelipeVR 0:f1a413971403 678 * Return: *
FelipeVR 0:f1a413971403 679 *******************************************************************************/
FelipeVR 0:f1a413971403 680
FelipeVR 0:f1a413971403 681 void GLCD_ScrollVertical (unsigned int dy) {
FelipeVR 0:f1a413971403 682 #if (LANDSCAPE == 0)
FelipeVR 0:f1a413971403 683 static unsigned int y = 0;
FelipeVR 0:f1a413971403 684
FelipeVR 0:f1a413971403 685 y = y + dy;
FelipeVR 0:f1a413971403 686 while (y >= HEIGHT)
FelipeVR 0:f1a413971403 687 y -= HEIGHT;
FelipeVR 0:f1a413971403 688
FelipeVR 0:f1a413971403 689 // if (Himax) {
FelipeVR 0:f1a413971403 690 wr_reg(0x01, 0x08);
FelipeVR 0:f1a413971403 691 wr_reg(0x14, y>>8); /* VSP MSB */
FelipeVR 0:f1a413971403 692 wr_reg(0x15, y&0xFF); /* VSP LSB */
FelipeVR 0:f1a413971403 693 // }
FelipeVR 0:f1a413971403 694 // else {
FelipeVR 0:f1a413971403 695 // wr_reg(0x6A, y);
FelipeVR 0:f1a413971403 696 // wr_reg(0x61, 3);
FelipeVR 0:f1a413971403 697 // }
FelipeVR 0:f1a413971403 698 #endif
FelipeVR 0:f1a413971403 699 }
FelipeVR 0:f1a413971403 700
FelipeVR 0:f1a413971403 701
FelipeVR 0:f1a413971403 702 /*******************************************************************************
FelipeVR 0:f1a413971403 703 * Write a command to the LCD controller *
FelipeVR 0:f1a413971403 704 * Parameter: cmd: command to write to the LCD *
FelipeVR 0:f1a413971403 705 * Return: *
FelipeVR 0:f1a413971403 706 *******************************************************************************/
FelipeVR 0:f1a413971403 707 void GLCD_WrCmd (unsigned char cmd) {
FelipeVR 0:f1a413971403 708 wr_cmd (cmd);
FelipeVR 0:f1a413971403 709 }
FelipeVR 0:f1a413971403 710
FelipeVR 0:f1a413971403 711
FelipeVR 0:f1a413971403 712 /*******************************************************************************
FelipeVR 0:f1a413971403 713 * Write a value into LCD controller register *
FelipeVR 0:f1a413971403 714 * Parameter: reg: lcd register address *
FelipeVR 0:f1a413971403 715 * val: value to write into reg *
FelipeVR 0:f1a413971403 716 * Return: *
FelipeVR 0:f1a413971403 717 *******************************************************************************/
FelipeVR 0:f1a413971403 718 void GLCD_WrReg (unsigned char reg, unsigned short val) {
FelipeVR 0:f1a413971403 719 wr_reg (reg, val);
FelipeVR 0:f1a413971403 720 }
FelipeVR 0:f1a413971403 721
FelipeVR 0:f1a413971403 722
FelipeVR 0:f1a413971403 723 /*******************************************************************************
FelipeVR 0:f1a413971403 724 * Start GLCD sequence *
FelipeVR 0:f1a413971403 725 * Parameter: *
FelipeVR 0:f1a413971403 726 * Return: *
FelipeVR 0:f1a413971403 727 *******************************************************************************/
FelipeVR 0:f1a413971403 728 void GLCD_Start (void) {
FelipeVR 0:f1a413971403 729 wr_cmd(0x22);
FelipeVR 0:f1a413971403 730 wr_dat_start();
FelipeVR 0:f1a413971403 731 }
FelipeVR 0:f1a413971403 732
FelipeVR 0:f1a413971403 733
FelipeVR 0:f1a413971403 734 /*******************************************************************************
FelipeVR 0:f1a413971403 735 * Write GLCD data *
FelipeVR 0:f1a413971403 736 * Parameter: 16 bits video data *
FelipeVR 0:f1a413971403 737 * Return: *
FelipeVR 0:f1a413971403 738 *******************************************************************************/
FelipeVR 0:f1a413971403 739 void GLCD_Write (unsigned short data) {
FelipeVR 0:f1a413971403 740 wr_dat_only (data);
FelipeVR 0:f1a413971403 741 }
FelipeVR 0:f1a413971403 742
FelipeVR 0:f1a413971403 743
FelipeVR 0:f1a413971403 744 /*******************************************************************************
FelipeVR 0:f1a413971403 745 * End GLCD sequence *
FelipeVR 0:f1a413971403 746 * Parameter: *
FelipeVR 0:f1a413971403 747 * Return: *
FelipeVR 0:f1a413971403 748 *******************************************************************************/
FelipeVR 0:f1a413971403 749 void GLCD_End (void) {
FelipeVR 0:f1a413971403 750 wr_dat_stop();
FelipeVR 0:f1a413971403 751 }
FelipeVR 0:f1a413971403 752
FelipeVR 0:f1a413971403 753
FelipeVR 0:f1a413971403 754 /*******************************************************************************
FelipeVR 0:f1a413971403 755 * Write a boarder to the LCD screen in foreground color *
FelipeVR 0:f1a413971403 756 * Parameter: *
FelipeVR 0:f1a413971403 757 * Return: *
FelipeVR 0:f1a413971403 758 *******************************************************************************/
FelipeVR 0:f1a413971403 759 void GLCD_Boarder (void) {
FelipeVR 0:f1a413971403 760 int i;
FelipeVR 0:f1a413971403 761 for (i = 0; i < WIDTH; i++)
FelipeVR 0:f1a413971403 762 {
FelipeVR 0:f1a413971403 763 GLCD_PutPixel (i, 0);
FelipeVR 0:f1a413971403 764 GLCD_PutPixel (i, HEIGHT - 1);
FelipeVR 0:f1a413971403 765
FelipeVR 0:f1a413971403 766 if (i < HEIGHT)
FelipeVR 0:f1a413971403 767 {
FelipeVR 0:f1a413971403 768 GLCD_PutPixel (0, i);
FelipeVR 0:f1a413971403 769 GLCD_PutPixel (WIDTH - 1, i);
FelipeVR 0:f1a413971403 770 }
FelipeVR 0:f1a413971403 771 }
FelipeVR 0:f1a413971403 772 }
FelipeVR 0:f1a413971403 773
FelipeVR 0:f1a413971403 774
FelipeVR 0:f1a413971403 775 /*******************************************************************************
FelipeVR 0:f1a413971403 776 * Draw box filled with color *
FelipeVR 0:f1a413971403 777 * Parameter: x: horizontal position *
FelipeVR 0:f1a413971403 778 * y: vertical position *
FelipeVR 0:f1a413971403 779 * w: window width in pixels *
FelipeVR 0:f1a413971403 780 * h: window height in pixels *
FelipeVR 0:f1a413971403 781 * color: box color *
FelipeVR 0:f1a413971403 782 * Return: *
FelipeVR 0:f1a413971403 783 *******************************************************************************/
FelipeVR 0:f1a413971403 784 void GLCD_Box (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned short color) {
FelipeVR 0:f1a413971403 785 unsigned int i;
FelipeVR 0:f1a413971403 786
FelipeVR 0:f1a413971403 787 GLCD_SetWindow (x, y, w, h);
FelipeVR 0:f1a413971403 788
FelipeVR 0:f1a413971403 789 wr_cmd(0x22);
FelipeVR 0:f1a413971403 790 wr_dat_start();
FelipeVR 0:f1a413971403 791 for(i = 0; i < (w*h); i++){
FelipeVR 0:f1a413971403 792 wr_dat_only (color);
FelipeVR 0:f1a413971403 793 }
FelipeVR 0:f1a413971403 794 wr_dat_stop();
FelipeVR 0:f1a413971403 795 }
FelipeVR 0:f1a413971403 796
FelipeVR 0:f1a413971403 797
FelipeVR 0:f1a413971403 798 /*******************************************************************************
FelipeVR 0:f1a413971403 799 * Draw box filled with color *
FelipeVR 0:f1a413971403 800 * Parameter: xs: horizontal start position *
FelipeVR 0:f1a413971403 801 * xe: horizontal end position *
FelipeVR 0:f1a413971403 802 * ys: vertical start position *
FelipeVR 0:f1a413971403 803 * ye: vertical end position *
FelipeVR 0:f1a413971403 804 * color: box color *
FelipeVR 0:f1a413971403 805 * Return: *
FelipeVR 0:f1a413971403 806 *******************************************************************************/
FelipeVR 0:f1a413971403 807 void GLCD_BoxSize (unsigned int xs, unsigned int xe, unsigned int ys, unsigned int ye, unsigned short color) {
FelipeVR 0:f1a413971403 808 int i;
FelipeVR 0:f1a413971403 809
FelipeVR 0:f1a413971403 810 GLCD_SetWindowSize (xs, xe, ys, ye);
FelipeVR 0:f1a413971403 811
FelipeVR 0:f1a413971403 812 wr_cmd(0x22);
FelipeVR 0:f1a413971403 813 wr_dat_start();
FelipeVR 0:f1a413971403 814
FelipeVR 0:f1a413971403 815 for (i = 0; i < ((xe-xs+1)*(ye-ys)); i++) {
FelipeVR 0:f1a413971403 816 wr_dat_only (color);
FelipeVR 0:f1a413971403 817 }
FelipeVR 0:f1a413971403 818 wr_dat_stop();
FelipeVR 0:f1a413971403 819 }
FelipeVR 0:f1a413971403 820 /******************************************************************************/