Example #1
0
u08 glcdDataRead(u08 dummy)
{
  register u08 data;
  register u08 controller = (GrLcdState.lcdXAddr/GLCD_CONTROLLER_XPIXELS);

  glcdBusyWait(controller);		// wait until LCD not busy

  outb(GLCD_DATA_PORT, 0x00); // no pullups
  outb(GLCD_DATA_DDR, 0x00);  // don't drive data lines
  
  GLCD_CTRL_PORT |= _BV(GLCD_CTRL_RS) | 
                    _BV(GLCD_CTRL_RW) | _BV(GLCD_CTRL_E);
  
  NOP; NOP; NOP; NOP;
  NOP; NOP; NOP; NOP;
  
  data = inb(GLCD_DATA_PIN);

  GLCD_CTRL_PORT &= ~(_BV(GLCD_CTRL_RS) | 
		      _BV(GLCD_CTRL_RW) | _BV(GLCD_CTRL_E));

  if(!dummy) {
    // increment our local address counter, not done for dummy reads
    GrLcdState.ctrlr[controller].xAddr++;
    GrLcdState.lcdXAddr++;
    if(GrLcdState.lcdXAddr >= GLCD_XPIXELS) {
      glcdSetYAddress(GrLcdState.lcdYAddr+1);
      glcdSetXAddress(0);
    }
  }
  return data;
}
Example #2
0
void glcdDataWrite(u08 data) {
  register u08 controller = (GrLcdState.lcdXAddr/GLCD_CONTROLLER_XPIXELS);
	
  glcdBusyWait(controller);		// wait until LCD not busy
  
  outb(GLCD_DATA_DDR, 0xFF);
  outb(GLCD_DATA_PORT, data);
  
  sbi(GLCD_CTRL_PORT, GLCD_CTRL_RS);
  cbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
  sbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
  
  NOP; NOP; NOP; NOP;
  NOP; NOP; NOP; NOP;
  
  cbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
  
  
  // increment our local address counter
  GrLcdState.ctrlr[controller].xAddr++;
  GrLcdState.lcdXAddr++;
  if(GrLcdState.lcdXAddr >= GLCD_XPIXELS) {
    glcdSetYAddress(GrLcdState.lcdYAddr+1);
    glcdSetXAddress(0);
  }
}
Example #3
0
void glcdDataWrite(uint8_t data)
{
	register uint8_t controller = (GrLcdState.lcdXAddr/GLCD_CONTROLLER_XPIXELS);
#ifdef GLCD_PORT_INTERFACE
	cli();
	glcdBusyWait(controller);		// wait until LCD not busy
	sbi(GLCD_CTRL_PORT, GLCD_CTRL_RS);
	cbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
	sbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
	outb(GLCD_DATA_DDR, 0xFF);
	outb(GLCD_DATA_PORT, data);
	asm volatile ("nop"); asm volatile ("nop");
	asm volatile ("nop"); asm volatile ("nop");
	asm volatile ("nop"); asm volatile ("nop");
	asm volatile ("nop"); asm volatile ("nop");
	cbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
	sei();
#else
	//sbi(MCUCR, SRW);				// enable RAM waitstate
	glcdBusyWait(controller);		// wait until LCD not busy
	*(volatile unsigned char *) (GLCD_CONTROLLER0_CTRL_ADDR + GLCD_CONTROLLER_ADDR_OFFSET*controller) = data;
	//cbi(MCUCR, SRW);				// disable RAM waitstate
#endif
	// increment our local address counter
	GrLcdState.ctrlr[controller].xAddr++;
	GrLcdState.lcdXAddr++;
	if(GrLcdState.lcdXAddr >= GLCD_XPIXELS)
	{
		GrLcdState.lcdYAddr++;
		glcdSetYAddress(GrLcdState.lcdYAddr);
		glcdSetXAddress(0);
	}
}
Example #4
0
void glcdSetAddress(u08 x, u08 yLine) {
  // set addresses
  glcdSetYAddress(yLine);
  glcdSetXAddress(x);
}
Example #5
0
void glcdSetAddress(uint8_t x, uint8_t yLine)
{
	// set addresses
	glcdSetYAddress(yLine);
	glcdSetXAddress(x);
}