Пример #1
0
void glcdBusyWait(uint8_t controller)
{
#ifdef GLCD_PORT_INTERFACE
	cli();
	// wait until LCD busy bit goes to zero
	// select the controller chip
	glcdControllerSelect(controller);
	// do a read from control register
	outb(GLCD_DATA_PORT, 0xFF);
	cbi(GLCD_CTRL_PORT, GLCD_CTRL_RS);
	outb(GLCD_DATA_DDR, 0x00);
	sbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
	sbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
	asm volatile ("nop"); asm volatile ("nop");
	while(inb(GLCD_DATA_PIN) & GLCD_STATUS_BUSY)
	{
		cbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
		asm volatile ("nop"); asm volatile ("nop");
		asm volatile ("nop"); asm volatile ("nop");
		sbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
		asm volatile ("nop"); asm volatile ("nop");
		asm volatile ("nop"); asm volatile ("nop");
	}
	cbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
	cbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
	outb(GLCD_DATA_DDR, 0xFF);
	sei();
#else
	// sbi(MCUCR, SRW);			// enable RAM waitstate
	// wait until LCD busy bit goes to zero
	while(*(volatile unsigned char *)
		(GLCD_CONTROLLER0_CTRL_ADDR + GLCD_CONTROLLER_ADDR_OFFSET*controller) & GLCD_STATUS_BUSY);
	// cbi(MCUCR, SRW);			// disable RAM waitstate
#endif
}
Пример #2
0
void glcdBusyWait(u08 controller) {
	
  // wait until LCD busy bit goes to zero
  // select the controller chip
  glcdControllerSelect(controller);
  // do a read from control register
  outb(GLCD_DATA_PORT, 0x00);  // no pullups
  outb(GLCD_DATA_DDR, 0x00);
  
  sbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
  cbi(GLCD_CTRL_PORT, GLCD_CTRL_RS);
  sbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
  NOP; NOP; NOP; NOP;
  NOP; NOP; NOP; NOP;

  while(inb(GLCD_DATA_PIN) & (GLCD_STATUS_BUSY | GLCD_STATUS_RESET));

  cbi(GLCD_CTRL_PORT, GLCD_CTRL_E);
  cbi(GLCD_CTRL_PORT, GLCD_CTRL_RW);
  outb(GLCD_DATA_DDR, 0xFF);   // output
}