Ejemplo n.º 1
0
void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, const unsigned short *bitmap) {
  unsigned int   i;
  unsigned int   len = w*h;
  const unsigned short *bitmap_ptr = (const unsigned short *)bitmap;

#ifdef ILI9341
  ili9341_set_window (x, x + w-1, y, y + h - 1);
  for (i = 0; i < len; i++) {
    wr_dat(*bitmap_ptr++);
  }
#else
  wr_reg(0x50, y);                      /* Horizontal GRAM Start Address      */
  wr_reg(0x51, y+h-1);                  /* Horizontal GRAM End   Address (-1) */
  wr_reg(0x52, x);                      /* Vertical   GRAM Start Address      */
  wr_reg(0x53, x+w-1);                  /* Vertical   GRAM End   Address (-1) */

  wr_reg(0x20, y);
  wr_reg(0x21, x);

  Clr_Cs;
  wr_cmd(0x22);
  for (i = 0; i < len; i++) {
    wr_dat(*bitmap_ptr++);
  }
  Set_Cs;
#endif
}
Ejemplo n.º 2
0
/*******************************************************************************
* Draw character on given position (line, coloum                               *
*   Parameter:     x :        horizontal position                              *
*                  y :        vertical position                                *
*                  c*:        pointer to color value                           *
*   Return:                                                                    *
*******************************************************************************/
void GLCD_drawChar(unsigned int x, unsigned int y, unsigned short *c) {

#ifdef ILI9341

  unsigned int index = 0;
  int  i = 0;

  ili9341_set_window (y, y + 15, x, x + 23);  

  for(index = 0; index < 24; index++)
  {
    for(i = 0; i < 16; i++)
    {
      if((c[index] & (1 << i)) == 0x00) {
         wr_dat(BackColor);
      } else {
         wr_dat(TextColor);
      }
    }
  } 	

#else /* ILI9341 */

  unsigned int index = 0;
  int  i = 0;
  unsigned int Xaddress = 0;   

  Xaddress = x;

  wr_reg(0x21, y);
  wr_reg(0x20, Xaddress);


  for(index = 0; index < 24; index++)
  {
  	Clr_Cs;
    wr_cmd(0x22);              /* Prepare to write GRAM */

    for(i = 0; i <= 15; i++)
    {
      if((c[index] & (1 << i)) == 0x00) {
         wr_dat(BackColor);
      } else {
         wr_dat(TextColor);
      }
    }

	Set_Cs;

    Xaddress++;

	wr_reg(0x21, y);
    wr_reg(0x20, Xaddress);
  }

#endif /* ILI9341 */

}
Ejemplo n.º 3
0
void GLCD_SetCursor(unsigned short x, unsigned short y)
{

#ifdef ILI9341

    ili9341_set_window (x, x, y, y);

#else

	wr_reg(0x20,x); 
    wr_reg(0x21,y);

#endif
}
Ejemplo n.º 4
0
static void ili9341_copy(struct ili9341 *ili, unsigned int index)
{
	unsigned int ystart, yend;
	int chstart, chend;
	unsigned int x;
	unsigned int y;
	unsigned short *buffer, *oldbuffer;
	unsigned int len;
	x = ili->pages[index].x;
	y = ili->pages[index].y;
	len = ili->pages[index].len;
	ystart = y;
	yend = y+(len/(ILI9341_TFTWIDTH))+1;
	dev_dbg(ili->dev,
		"%s: page[%u]: x=%3hu y=%3hu buffer=0x%p len=%3hu\n",
		__func__, index, x, y, buffer, len);

	//Move to start of line.
	buffer = ili->pages[index].buffer-x;
	oldbuffer = ili->pages[index].oldbuffer-x;
	x = 0;

	//If we arrive here, we basically assume something is written at the lines
	//starting with y and lasting the page.
	for (y = ystart; y < yend; y++) {
		//Find start and end of changed data
		chstart = -1;
		for (x = 0; x < ILI9341_TFTWIDTH; x++) {
			if (buffer[x] != oldbuffer[x]) {
				oldbuffer[x] = buffer[x];
				if (chstart == -1)
					chstart = x;
				chend=x;
			}
		}
		if (chstart!=-1) {
			/* Something changed this line! chstart and chend 
			 * contain start and end x-coords. */
			ili9341_set_window(ili, chstart, y, chend, y);
			ili9341_spi_write_datablock(ili, &buffer[chstart], chend - chstart);
		}
		buffer += ILI9341_TFTWIDTH;
		oldbuffer += ILI9341_TFTWIDTH;
	}
}
Ejemplo n.º 5
0
void GLCD_clear (unsigned short color) {
  unsigned int   i;

#ifdef ILI9341

    ili9341_set_window(0, WIDTH, 0, HEIGHT);

    for(i = 0; i < (WIDTH*HEIGHT); i++)
    {
  	  wr_dat(color);
    }

#else
  wr_reg(0x20, 0);
  wr_reg(0x21, 0);
  Clr_Cs;
  wr_cmd(0x22);
  for(i = 0; i < (WIDTH*HEIGHT); i++)
  {
  	wr_dat(color);
  }
  Set_Cs;
#endif    
}
Ejemplo n.º 6
0
static inline int ili9341_init_chip(struct ili9341 *ili)
{
	int ret = 0;
#ifdef SCREEN_TEST
	int x,y;
#endif

	ili9341_reset(ili);

	ili9341_send_command(ili, 0xEF);
	ili9341_send_byte(ili, 0x03);
	ili9341_send_byte(ili, 0x80);
	ili9341_send_byte(ili, 0x02);
	ili9341_send_command(ili, 0xCF);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0XC1);
	ili9341_send_byte(ili, 0X30);
	ili9341_send_command(ili, 0xED);
	ili9341_send_byte(ili, 0x64);
	ili9341_send_byte(ili, 0x03);
	ili9341_send_byte(ili, 0X12);
	ili9341_send_byte(ili, 0X81);
	ili9341_send_command(ili, 0xE8);
	ili9341_send_byte(ili, 0x85);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0x78);
	ili9341_send_command(ili, 0xCB);
	ili9341_send_byte(ili, 0x39);
	ili9341_send_byte(ili, 0x2C);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0x34);
	ili9341_send_byte(ili, 0x02);
	ili9341_send_command(ili, 0xF7);
	ili9341_send_byte(ili, 0x20);
	ili9341_send_command(ili, 0xEA);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_command(ili, ILI9341_PWCTR1); //Power control
	ili9341_send_byte(ili, 0x23); //VRH[5:0]
	ili9341_send_command(ili, ILI9341_PWCTR2); //Power control
	ili9341_send_byte(ili, 0x10); //SAP[2:0];BT[3:0]
	ili9341_send_command(ili, ILI9341_VMCTR1); //VCM control
	ili9341_send_byte(ili, 0x3e); //¶Ô±È¶Èµ÷½Ú
	ili9341_send_byte(ili, 0x28);
	ili9341_send_command(ili, ILI9341_VMCTR2); //VCM control2
	ili9341_send_byte(ili, 0x86); //--
	ili9341_send_command(ili, ILI9341_MADCTL); // Memory Access Control
	ili9341_send_byte(ili, 0x48);
	ili9341_send_command(ili, ILI9341_PIXFMT);
	ili9341_send_byte(ili, 0x55);
	ili9341_send_command(ili, ILI9341_FRMCTR1);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0x18);
	ili9341_send_command(ili, ILI9341_DFUNCTR); // Display Function Control
	ili9341_send_byte(ili, 0x08);
	ili9341_send_byte(ili, 0x82);
	ili9341_send_byte(ili, 0x27);
	ili9341_send_command(ili, 0xF2); // 3Gamma Function Disable
	ili9341_send_byte(ili, 0x00);
	ili9341_send_command(ili, ILI9341_GAMMASET); //Gamma curve selected
	ili9341_send_byte(ili, 0x01);
	ili9341_send_command(ili, ILI9341_GMCTRP1); //Set Gamma
	ili9341_send_byte(ili, 0x0F);
	ili9341_send_byte(ili, 0x31);
	ili9341_send_byte(ili, 0x2B);
	ili9341_send_byte(ili, 0x0C);
	ili9341_send_byte(ili, 0x0E);
	ili9341_send_byte(ili, 0x08);
	ili9341_send_byte(ili, 0x4E);
	ili9341_send_byte(ili, 0xF1);
	ili9341_send_byte(ili, 0x37);
	ili9341_send_byte(ili, 0x07);
	ili9341_send_byte(ili, 0x10);
	ili9341_send_byte(ili, 0x03);
	ili9341_send_byte(ili, 0x0E);
	ili9341_send_byte(ili, 0x09);
	ili9341_send_byte(ili, 0x00);
	ili9341_send_command(ili, ILI9341_GMCTRN1); //Set Gamma
	ili9341_send_byte(ili, 0x00);
	ili9341_send_byte(ili, 0x0E);
	ili9341_send_byte(ili, 0x14);
	ili9341_send_byte(ili, 0x03);
	ili9341_send_byte(ili, 0x11);
	ili9341_send_byte(ili, 0x07);
	ili9341_send_byte(ili, 0x31);
	ili9341_send_byte(ili, 0xC1);
	ili9341_send_byte(ili, 0x48);
	ili9341_send_byte(ili, 0x08);
	ili9341_send_byte(ili, 0x0F);
	ili9341_send_byte(ili, 0x0C);
	ili9341_send_byte(ili, 0x31);
	ili9341_send_byte(ili, 0x36);
	ili9341_send_byte(ili, 0x0F);
	ili9341_send_command(ili, ILI9341_SLPOUT); //Exit Sleep
	mdelay(120);
	
	ili9341_set_orientation(ili, ILI9341_SWITCH_XY | ILI9341_FLIP_X);
	ili9341_send_command(ili, ILI9341_DISPON); //Display on
	
#ifdef SCREEN_TEST
	ili9341_set_window(ili, 0, 0, ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT);
	for(y=ILI9341_TFTHEIGHT; y>0; y--) {
		for(x=ILI9341_TFTWIDTH; x>0; x--) {
			ili9341_send_byte(ili, 0x55);
			ili9341_send_byte(ili, 0x55);
		}
	}
#endif
/*	if (ret != 0) {
		dev_err(ili->dev, "failed to initialise display\n");
		return ret;
	}*/

	ili->initialised = 1;
	return ret;
}