Beispiel #1
0
void main(void) {
    int count;
    int size;
    unsigned int adcValue = 0;
    unsigned int adcValueOld = 0;
    char buffer[16];

    ConfigureOscillator();
    InitApp();

    lcd_init();
    lcd_enable();
    lcd_cursor_off();
    lcd_test();
    lcd_pos(2, 1);
    while (1) {
        ConvertADC();
        while (BusyADC());
        adcValue = ReadADC();
        if (adcValue != adcValueOld) {
            lcd_clear();
            //Linha 1
            lcd_pos(1, 1);
            memset(&buffer[0], 0, sizeof (buffer));
            sprintf(&buffer[0], "Step:%.4u %3.1f%%", adcValue, ((float) adcValue / 1023) * 100);
            size = (strlen(buffer) > sizeof(buffer)) ? sizeof(buffer) : strlen(buffer);
            lcd_write_buffer(buffer, size);
            for(count = 0; count < size; count++){
                while(BusyUSART());
                putcUSART((char)buffer[count]);
            }
            //Linha 2
            lcd_pos(2, 1);
            memset(&buffer[0], 0, sizeof (buffer));
            sprintf(&buffer[0], "Volts:%1.7fV", (float)adcValue * ((float)5 /1023));
            size = (strlen(buffer) > sizeof(buffer)) ? sizeof(buffer) : strlen(buffer);
            lcd_write_buffer(buffer, size);
            //Variável de controle
            adcValueOld = adcValue;
            for(count = 0; count < size; count++){
                while(BusyUSART());
                putcUSART((char)buffer[count]);
            }
        }
        for (count = 0; count < 40; count++) {
            __delay_ms(10);
        }
    }
}
Beispiel #2
0
void main(void)
{
    ConfigureOscillator();
    InitApp();

    lcd_init();
    lcd_enable();
    lcd_cursor_off();
    lcd_test();
    lcd_pos(2,1);
    while(1)
    {
        
    }
}
void _backlight_on(void)
{
    if (backlight_is_on == 1) {
        /* Update pwm ratio in case user changed the brightness */
        _pwm_on();
        return;
    }

#ifdef HAVE_LCD_ENABLE
    lcd_enable(true); /* power on lcd + visible display */
#endif
    _ll_backlight_on();
    _pwm_on();
    backlight_is_on = 1;
}
Beispiel #4
0
void lcd_init(void)
{
    LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten

    // muss 3mal hintereinander gesendet werden zur Initialisierung

    _delay_ms(15);
    LCD_PORT &= 0xF0;
    LCD_PORT |= 0x03;
    LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
    lcd_enable();

    _delay_ms(5);
    lcd_enable();

    _delay_ms(1);
    lcd_enable();
    _delay_ms(1);

    // 4 Bit Modus aktivieren
    LCD_PORT &= 0xF0;
    LCD_PORT |= 0x02;
    lcd_enable();
    _delay_ms(1);

    // 4Bit / 2 Zeilen / 5x7
    lcd_command(0x28);

    // Display ein / Cursor aus / kein Blinken
    lcd_command(0x0C);

    // inkrement / kein Scrollen
    lcd_command(0x06);

    lcd_clear();
}
Beispiel #5
0
/*!
    \brief      LCD Configuration
    \param[in]  none
    \param[out] none
    \retval     none
*/
static void lcd_config(void)
{
    /* configure the LCD control line */
    lcd_ctrl_line_config();
    lcd_disable();
    lcd_enable();
    
    /* configure the GPIO of TLI */
    tli_gpio_config();
    /* configure the LCD_SPI */
    lcd_spi_config(); 

    /* power on the LCD */
    //lcd_power_on();
	lcd_power_on3();  //New Version 3.5" TFT RGB Hardware needs use this initilize funtion  ---By xufei 2016.10.21
}
void lcd_invert(uint32_t on)
{
  lcd_enable();

  if(on == 0)
  {
     lcd_wrcmd8(LCD_CMD_INV_OFF);
  }
  else
  {
     lcd_wrcmd8(LCD_CMD_INV_ON);
  }

  lcd_disable();

  return;
}
Beispiel #7
0
void lcd_sendTo(uint8_t data){
	uint8_t i;
	LCD_PORT |= (1<< LCD_SHIFT_STR);
	LCD_PORT &= ~(1<<LCD_SHIFT_OE);
	for(i=0;i<8;i++){
		LCD_PORT &= ~(1<<LCD_SHIFT_CLOCK);
		if(data & (1<<i)){
			LCD_PORT |= (1<< LCD_SHIFT_DATA);
		}else{
			LCD_PORT &= ~(1<< LCD_SHIFT_DATA);
		}
		LCD_PORT |= (1<< LCD_SHIFT_CLOCK);
	}
	LCD_PORT &= ~(1<< LCD_SHIFT_STR);
	LCD_PORT |= (1<< LCD_SHIFT_OE);
	lcd_enable();
}
Beispiel #8
0
// Initialize LCD in 4-bit mode.
void
lcd_reset(
	void
)
{
	// Output pins low and as output (except last pin).
	// If R/W is configured, this sets R/W to 0, i.e. write mode.
	lcd_enable(0);
	xtl_lcd_hd44780_set_rw(0);
	xtl_lcd_hd44780_set_rs(0);


	// Wait at least 15ms for the LCD to initialise.
	lcd_delay_ms(15);

	// Reset as per p. 211 of HD44780 user guide.
	// Function set (8-bit data, two line mode, 5x7 dots).
	lcd_data_write(0x30);
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(10);  // Need at least 4.1ms according to the guide.
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(2);  // Need at least 100us according to the guide.
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(2);  // Don't use BF here either.


	// Function set (8-bit data, two line mode, 5x7 dots).
	xtl_lcd_hd44780_send_cmd(0x38);
	lcd_delay_ms(6);

	// Display off
	xtl_lcd_hd44780_send_cmd(DISP_OFF);
	lcd_delay_ms(5);

	// Display clear
	xtl_lcd_hd44780_send_cmd(CLR_DISP);
	lcd_delay_ms(10);

	// Entry mode, increasing cursor position.
	xtl_lcd_hd44780_send_cmd(ENTRY_INC);

	// Display on.
	xtl_lcd_hd44780_wait_ready();
	xtl_lcd_hd44780_send_cmd(DISP_ON);
}
Beispiel #9
0
/** Initialize the display */
void lcd_init()
{
	// configure pins as output
	as_output(LCD_E);
	as_output(LCD_RW);
	as_output(LCD_RS);
	_lcd_mode = 1;  // force data pins to output
	_lcd_mode_w();

	// Magic sequence to invoke Cthulhu (or enter 4-bit mode)
	_delay_ms(16);
	_lcd_write_nibble(0b0011);
	_lcd_clk();
	_delay_ms(5);
	_lcd_clk();
	_delay_ms(5);
	_lcd_clk();
	_delay_ms(5);
	_lcd_write_nibble(0b0010);
	_lcd_clk();
	_delay_us(100);

	// Configure the display
	lcd_command(LCD_IFACE_4BIT_2LINE);
	lcd_command(LCD_DISABLE);
	lcd_command(LCD_CLEAR);
	lcd_command(LCD_MODE_INC);

	// mark as enabled
	lcd_enable();

	_lcd_singleton.tx = &lcd_write;
	_lcd_singleton.rx = &lcd_read;

	// Stream
	lcd = &_lcd_singleton;

	_pos.x = 0;
	_pos.y = 0;
	_addrtype = TEXT;
}
static void display_image(enum image_t image, uint16_t soc)
{
	uint16_t *image_start;
	uint16_t *image_end;

	if (soc < SOC_THRESH_DISPLAY_MIN) {
		lcd_disable();
		lcd_is_on = 0;
		return;
	}

	switch(image) {
	case IMAGE_CHARGE_NEEDED:
		image_start = (uint16_t *) _binary_connect_charge_rle_start;
		image_end = (uint16_t *) _binary_connect_charge_rle_end;
		break;
	case IMAGE_CHARGING:
		image_start = (uint16_t *) _binary_lowbatt_charge_rle_start;
		image_end = (uint16_t *) _binary_lowbatt_charge_rle_end;
		break;
	case IMAGE_BOOT:
	default:
		image_start = (uint16_t *) _binary_o_nookcolor_logo_large_rle_start;
		image_end = (uint16_t *) _binary_o_nookcolor_logo_large_rle_end;
		break;
	}

	if (!lcd_is_on) {
		spi_init();
		lcd_enable();
		lcd_is_on = 1;
	}

	if (image == IMAGE_BOOT) {
		lcd_bl_set_brightness(255);
	}

	lcd_display_image(image_start, image_end);
}
Beispiel #11
0
void lcd_power(uint32_t on)
{
  lcd_enable();

  if(on == 0)
  {
    lcd_wrcmd8(LCD_CMD_DISPLAY_OFF);
    delay_ms(20);
    lcd_wrcmd8(LCD_CMD_SLEEPIN);
    delay_ms(120);
  }
  else
  {
    lcd_wrcmd8(LCD_CMD_SLEEPOUT);
    delay_ms(120);
    lcd_wrcmd8(LCD_CMD_DISPLAY_ON);
    delay_ms(20);
  }

  lcd_disable();

  return;
}
static int s6e3hf2_displayon(struct dsim_device *dsim)
{
	lcd_init(dsim->id, &dsim->lcd_info);
	lcd_enable(dsim->id);
	return 1;
}
Beispiel #13
0
void backlight_hw_off(void)
{
    and_l(~0x00020000, &GPIO1_OUT);
    lcd_enable(false);
}
Beispiel #14
0
static void lcd_resume(struct disp_process_dev *pdev)
{
	PM_DBGOUT("%s\n", __func__);
	lcd_enable(pdev, 1);
}
Beispiel #15
0
void lcd_init()
{
    const uint8_t MEM_BGR = 3;
    const uint8_t MEM_X = 6;
    const uint8_t MEM_Y = 7;

    uint8_t init_sequence[] = {
        VCMD_COMMAND | 1, LCD_CMD_RESET,
        VCMD_SLEEP   |20,
        VCMD_COMMAND | 1, LCD_CMD_DISPLAY_OFF,
        VCMD_SLEEP   |20,
        VCMD_COMMAND | 1, LCD_CMD_POWER_CTRLB,
        VCMD_DATA    | 3, 0x00, 0x83, 0x30, //0x83 0x81 0xAA
        VCMD_COMMAND | 1, LCD_CMD_POWERON_SEQ_CTRL,
        VCMD_DATA    | 4, 0x64, 0x03, 0x12, 0x81, //0x64 0x67
        VCMD_COMMAND | 1, LCD_CMD_DRV_TIMING_CTRLA,
        VCMD_DATA    | 3, 0x85, 0x01, 0x79, //0x79 0x78
        VCMD_COMMAND | 1, LCD_CMD_POWER_CTRLA,
        VCMD_DATA    | 5, 0x39, 0X2C, 0x00, 0x34, 0x02,
        VCMD_COMMAND | 1, LCD_CMD_PUMP_RATIO_CTRL,
        VCMD_DATA    | 1, 0x20,
        VCMD_COMMAND | 1, LCD_CMD_DRV_TIMING_CTRLB,
        VCMD_DATA    | 2, 0x00, 0x00,
        VCMD_COMMAND | 1, LCD_CMD_POWER_CTRL1,
        VCMD_DATA    | 1, 0x26, //0x26 0x25
        VCMD_COMMAND | 1, LCD_CMD_POWER_CTRL2,
        VCMD_DATA    | 1, 0x11,
        VCMD_COMMAND | 1, LCD_CMD_VCOM_CTRL1,
        VCMD_DATA    | 2, 0x35, 0x3E,
        VCMD_COMMAND | 1, LCD_CMD_VCOM_CTRL2,
        VCMD_DATA    | 1, 0xBE, //0xBE 0x94
        VCMD_COMMAND | 1, LCD_CMD_FRAME_CTRL,
        VCMD_DATA    | 2, 0x00, 0x1B, //0x1B 0x70
        VCMD_COMMAND | 1, LCD_CMD_ENABLE_3G,
        VCMD_DATA    | 1, 0x08, //0x08 0x00
        VCMD_COMMAND | 1, LCD_CMD_GAMMA,
        VCMD_DATA    | 1, 0x01, //G2.2
        VCMD_COMMAND | 1, LCD_CMD_POS_GAMMA,
        VCMD_DATA    |15, 0x1F, 0x1A, 0x18, 0x0A, 0x0F, 0x06, 0x45, 0x87, 0x32, 0x0A, 0x07, 0x02, 0x07, 0x05, 0x00,
        VCMD_COMMAND | 1, LCD_CMD_NEG_GAMMA,
        VCMD_DATA    |15, 0x00, 0x25, 0x27, 0x05, 0x10, 0x09, 0x3A, 0x78, 0x4D, 0x05, 0x18, 0x0D, 0x38, 0x3A, 0x1F,
        VCMD_COMMAND | 1, LCD_CMD_DISPLAY_CTRL,
        VCMD_DATA    | 4, 0x0A, 0x82, 0x27, 0x00,
        VCMD_COMMAND | 1, LCD_CMD_ENTRY_MODE,
        VCMD_DATA    | 1, 0x07,
        VCMD_COMMAND | 1, LCD_CMD_PIXEL_FORMAT,
        VCMD_DATA    | 1, 0x55, //16bit
        VCMD_COMMAND | 1, LCD_CMD_MEMACCESS_CTRL,
        VCMD_DATA    | 1, (1<<MEM_BGR) | (1<<MEM_X) | (1<<MEM_Y),
        VCMD_COMMAND | 1, LCD_CMD_COLUMN,
        VCMD_DATA    | 2, 0x00, 0x00,
        VCMD_DATA    | 2, ((LCD_HEIGHT-1)>>8)&0xFF, (LCD_HEIGHT-1)&0xFF,
        VCMD_COMMAND | 1, LCD_CMD_PAGE,
        VCMD_DATA    | 2, 0x00, 0x00,
        VCMD_DATA    | 2, ((LCD_WIDTH-1)>>8)&0xFF, (LCD_WIDTH-1)&0xFF,
        VCMD_COMMAND | 1, LCD_CMD_SLEEPOUT,
        VCMD_SLEEP   |60,
        VCMD_SLEEP   |60,
        VCMD_COMMAND | 1, LCD_CMD_DISPLAY_ON,
        VCMD_SLEEP   |20,
    };

    DISABLE_IRQ();

    // initialize pins
    IOCON_PIO2_0  &= ~IOCON_PIO2_0_FUNC_MASK;
    IOCON_PIO2_1  &= ~IOCON_PIO2_1_FUNC_MASK;
    IOCON_PIO2_2  &= ~IOCON_PIO2_2_FUNC_MASK;
    IOCON_PIO2_3  &= ~IOCON_PIO2_3_FUNC_MASK;
    IOCON_PIO2_4  &= ~IOCON_PIO2_4_FUNC_MASK;
    IOCON_PIO2_5  &= ~IOCON_PIO2_5_FUNC_MASK;
    IOCON_PIO2_6  &= ~IOCON_PIO2_6_FUNC_MASK;
    IOCON_PIO2_7  &= ~IOCON_PIO2_7_FUNC_MASK;
    IOCON_PIO2_8  &= ~IOCON_PIO2_8_FUNC_MASK;
    IOCON_PIO2_9  &= ~IOCON_PIO2_9_FUNC_MASK;
    IOCON_PIO2_10 &= ~IOCON_PIO2_10_FUNC_MASK;
    IOCON_PIO2_11 &= ~IOCON_PIO2_11_FUNC_MASK;

    IOCON_PIO3_5  &= ~IOCON_PIO3_5_FUNC_MASK;

    // set all 12 pins to output mode
    GPIO_GPIO2DIR |= 0xFFF;
    // set all pins high
    LCD_GPIO |= 0xFFF;

    // set pin 5 of gpio 3 to output mode
    GPIO_GPIO3DIR |= LCD_RD_MASK;
    GPIO_GPIO3DATA |= LCD_RD_MASK;

    ENABLE_IRQ();

    // trigger hard-reset
    LCD_MASKED_GPIO(LCD_RST_MASK, 0);
    delay_ms(20);
    LCD_MASKED_GPIO(LCD_RST_MASK, LCD_RST_MASK);
    delay_ms(120);

    lcd_enable();
    delay_ms(1);

    for (unsigned int i = 0; i < sizeof(init_sequence);) {
        uint8_t instruction = init_sequence[i++];
        switch (instruction & 0xC0) {
        case VCMD_COMMAND:
        {
            //~ printf("cmd 0x%02x", instruction & 0x3f);
            for (int j = (instruction & 0x3f); j > 0; j--) {
                uint8_t data = init_sequence[i++];
                //~ printf(" 0x%02x", data);
                lcd_wrcmd8(data);
            }
            //~ printf("\n");
            break;
        }
        case VCMD_DATA:
        {
            //~ printf("data 0x%02x\n", instruction & 0x3f);
            for (int j = (instruction & 0x3f); j > 0; j--) {
                uint8_t data = init_sequence[i++];
                //~ printf(" 0x%02x", data);
                lcd_wrdata8(data);
            }
            //~ printf("\n");
            break;
        }
        case VCMD_SLEEP:
        {
            //~ printf("sleep %d\n", instruction & 0x3f);
            delay_ms(instruction & 0x3f);
            break;
        }
        default:
            // cannot happen :)
            continue;
        };
    }

    lcd_drawstart();
    for (int i = (LCD_WIDTH*LCD_HEIGHT/8); i > 0; i--) {
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
        lcd_draw(0);
    }
    lcd_drawstop();

    lcd_disable();
}
Beispiel #16
0
void lcd_init(char cursor_onoff, char cursor_blinking) {
#if (LCD_USED_CONTROLLER==LCD_CONTROLLER_KS0066) || (LCD_USED_CONTROLLER==LCD_CONTROLLER_HD44780)
    #warning "                 LCD library uses KS0066 or HD44780 controller"
    LCDPORTS_OUT();
    LCD_RS_DDR |= (1<<LCD_RS);
#if LCD_RW_CONNECTED!=0
    LCD_RW_DDR |= (1<<LCD_RW);
#endif
    LCD_EN_DDR |= (1<<LCD_EN);
    _delay_ms(40);

    // muss 3mal hintereinander gesendet werden zur Initialisierung

    RW0();        // set RW=0
    RS0();        // RS auf 0 setzen
    EN0();        // RS auf 0 setzen
    _delay_ms(40);

    if (LCD_DATASTART==0) {
        LCD_PORT &= 0xF0;
        LCD_PORT |= 0x03;               // setzen
    } else {
        LCD_PORT &= 0x0F;
        LCD_PORT |= (0x03<<4);               // setzen
    }

    LCD_RS_PORT &= ~(1<<LCD_RS);      // RS auf 0
    lcd_enable();

    _delay_ms(1);
    lcd_enable();

    _delay_ms(5);
    lcd_enable();
    _delay_ms(5);

    // 4 Bit Modus aktivieren
    if (LCD_DATASTART==0) {
        LCD_PORT &= 0xF0;
        LCD_PORT |= 0x02;               // setzen
    } else {
        LCD_PORT &= 0x0F;
        LCD_PORT |= (0x02<<4);               // setzen
    }
    lcd_enable();
    _delay_ms(5);

    // 4Bit / 2 Zeilen / 5x7
    lcd_command(0x28);

    // Display ein / Cursor aus / kein Blinken
    lcd_command(0x0C);

    // inkrement / kein Scrollen
    lcd_command(0x06);

    lcd_clear();
#elif (LCD_USED_CONTROLLER==LCD_CONTROLLER_ST7036)
    #warning "                 LCD library uses ST7036 controller"
    // set 4 data ports as outputs and all control signals as outputs
    LCDPORTS_OUT();
    LCD_RS_DDR |= (1<<LCD_RS);
    LCD_RW_DDR |= (1<<LCD_RW);
    LCD_EN_DDR |= (1<<LCD_EN);
    _delay_ms(20);

    RW0();
    RS0();
    EN0();
    _delay_ms(100);

    #if (LCD_INTERFACE == LCD_INTERFACE_4BIT)
        #warning "                 4 Bit Interface"
            // init 4-bit by sending 0b0011XXXX three times to the display
            lcd_data_out(0x03);
            _delay_ms(10);
            //lcd_enable();
            lcd_data_out(0x03);
            _delay_ms(10);
            lcd_data_out(0x03);
            _delay_ms(10);

            lcd_data_out(0x02); // function set 0b0010XXXX
            _delay_ms(10);
    #elif (LCD_INTERFACE == LCD_INTERFACE_8BIT || LCD_INTERFACE == LCD_INTERFACE_8BIT_SHIFTREG)
        #warning "                 8 Bit Interface"
            lcd_data_out(0x39);
            _delay_us(LCD_SHORTDELAY);
            lcd_data_out(0x39);
            _delay_us(LCD_SHORTDELAY);
    #endif
    uint8_t c=0x31;
    #if (LCD_VOLTAGE == LCD_VOLTAGE_5V)
        #warning "                 5V supply voltage"
        #if (LCD_LINECOUNT>1)
        c=c + 0x08;
        #endif
        lcd_command(c);    // function set        0b0011<N><DH><IS2><IS1>
                           //                     0b0011 N  0   0    1    =0x31 & (N*0x08)
        lcd_command(0x1D); // intern. osc freq.   0b0001<BS><F2><F1><F0>
                           //                     0b0001 1   1   0   1    =0x1D
        lcd_command(0x50); // power/ICON/contrast 0b0101<Ion><Bon><C5><C4>
                           //                     0b0101 0    0    0   0    =0x50
        lcd_command(0x6C); // follower control    0b0110<Fon><Rab2><Rab1><Rab0>
                           //                     0b0110  1    1     0     0    =0x6C
        lcd_command(0x7C); // contrast set        0b0111<C3><C2><C1><C0>
                           //                     0b0111 1   1   0   0    =0x7C
    #elif (LCD_VOLTAGE == LCD_VOLTAGE_3V)
        #warning "                 3V supply voltage"
        #if (LCD_LINECOUNT>1)
        c=c + 0x08;
        #endif
        lcd_command(c);    // function set        0b0011<N><DH><IS2><IS1>
                           //                     0b0011 N  0   0    1    =0x31 & (N*0x08)
        lcd_command(0x15); // intern. osc freq.   0b0001<BS><F2><F1><F0>
                           //                     0b0001 0   1   0   1    =0x15
        lcd_command(0x55); // power/ICON/contrast 0b0101<Ion><Bon><C5><C4>
                           //                     0b0101 0    1    0   1    =0x55
        lcd_command(0x6E); // follower control    0b0110<Fon><Rab2><Rab1><Rab0>
                           //                     0b0110  1    1     1     0    =0x6E
        lcd_command(0x72); // contrast set        0b0111<C3><C2><C1><C0>
                           //                     0b0111 0   0   1   0    =0x72
    #endif

    lcd_command(c & 0b11111100); // switch back to instruction table 0  0b0011<N>000  =0x38


#endif
    lcd_setcursor(1, cursor_onoff, cursor_blinking);
    lcd_setcontrast(LCD_DEFAULTCONTRAST);
    lcd_clear();
    lcd_home();
}
Beispiel #17
0
static int  lcd_suspend(struct disp_process_dev *pdev)
{
	PM_DBGOUT("%s\n", __func__);
	return lcd_enable(pdev, 0);
}
Beispiel #18
0
////////////////////////////////////////////////////////////////////////////////
// Initialisierung: muss ganz am Anfang des Programms aufgerufen werden.
void lcd_init( void )
{
    // verwendete Pins auf Ausgang schalten
    uint8_t pins = (0x0F << LCD_DB) |           // 4 Datenleitungen
                   (1<<LCD_RS) |                // R/S Leitung
                   (1<<LCD_EN);                 // Enable Leitung
    LCD_DDR |= pins;
 
    // initial alle Ausgänge auf Null
    LCD_PORT &= ~pins;
	
	//Initialisiere LCD Backlight Pin
	LCD_BL_DDR |= (1<<LCD_BL);
	LCD_BL_PORT |= (1<<LCD_BL);
 
    // warten auf die Bereitschaft des LCD
    _delay_ms( LCD_BOOTUP_MS );
    
    // Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung
    lcd_out( LCD_SOFT_RESET );
    _delay_ms( LCD_SOFT_RESET_MS1 );
 
    lcd_enable();
    _delay_ms( LCD_SOFT_RESET_MS2 );
 
    lcd_enable();
    _delay_ms( LCD_SOFT_RESET_MS3 );
 
    // 4-bit Modus aktivieren 
    lcd_out( LCD_SET_FUNCTION |
             LCD_FUNCTION_4BIT );
    _delay_ms( LCD_SET_4BITMODE_MS );
 
    // 4-bit Modus / 2 Zeilen / 5x7
    lcd_command( LCD_SET_FUNCTION |
                 LCD_FUNCTION_4BIT |
                 LCD_FUNCTION_2LINE |
                 LCD_FUNCTION_5X7 );
 
    // Display ein / Cursor aus / Blinken aus
    lcd_command( LCD_SET_DISPLAY |
                 LCD_DISPLAY_ON |
                 LCD_CURSOR_OFF |
                 LCD_BLINKING_OFF); 
 
    // Cursor inkrement / kein Scrollen
    lcd_command( LCD_SET_ENTRY |
                 LCD_ENTRY_INCREASE |
                 LCD_ENTRY_NOSHIFT );
		//Gradzeichen
		uint8_t chrdata0[8] = {
        0b00000100,
        0b00001010,
        0b00000100,     //   X X
        0b00000000,     //  XXXXX
        0b00000000,     //   XXX
        0b00000000,     //    X
        0b00000000,
        0b00000000
        };
		//µ
	    uint8_t chrdata1[8] = {
        0b00000000,
        0b00001001,
        0b00001001,     //   X X
        0b00001001,     //  XXXXX
        0b00001111,     //   XXX
        0b00001000,     //    X
        0b00010000,
        0b00000000
        };
		//Rechtecksignal
	    uint8_t chrdata2[8] = {
        0b00000000,
        0b00011101,
        0b00010101,     //   X X
        0b00010101,     //  XXXXX
        0b00010101,     //   XXX
        0b00010101,     //    X
        0b00010111,
        0b00000000
        };
    lcd_generatechar(LCD_GC_CHAR0, chrdata0);
	lcd_generatechar(LCD_GC_CHAR1, chrdata1);
	lcd_generatechar(LCD_GC_CHAR2, chrdata2);
    lcd_clear();
}
Beispiel #19
0
void cmd_lcd_drawimage(uint_least16_t fgcolor, uint_least16_t bgcolor)
{
  uint_least8_t b, c, e, n;
  uint_least16_t a, x0, y0, x1, y1, w, h;
  uint_least32_t i, ms;

  x0 = if_read(); //x0
  y0 = if_read(); //y0
  w  = if_read(); //w
  h  = if_read(); //h
  x1 = x0+w-1;
  y1 = y0+h-1;
  c  = if_read8(); //color mode + encoding
  e  = c & COLOR_RLE;
  c  = c & ~COLOR_RLE;

  lcd_enable();
  lcd_setarea(x0, y0, x1, y1);
  lcd_drawstart();

  switch(c)
  {
    case COLOR_BW: //black/white
      fgcolor = RGB(0,0,0);
      bgcolor = RGB(255,255,255);
      break;
    case COLOR_WB: //white/black
      fgcolor = RGB(255,255,255);
      bgcolor = RGB(0,0,0);
      break;
    case COLOR_FG: //fg/bg
      fgcolor = fgcolor;
      bgcolor = bgcolor;
      break;
    case COLOR_BG: //bg/fg
      fgcolor ^= bgcolor;
      bgcolor ^= fgcolor;
      fgcolor ^= bgcolor;
      break;
  }

  ms = get_ms();
  if(e == 0) //no encoding
  {
    switch(c)
    {
      case COLOR_BW: //black/white
      case COLOR_WB: //white/black
      case COLOR_FG: //fg/bg
      case COLOR_BG: //bg/fg
        for(i=w*h; i!=0;)
        {
          if(if_available())
          {
            a = if_read8();
            for(b=0x80; (b!=0) && (i!=0); b>>=1)
            {
              if(a & b) { lcd_draw(fgcolor); }
              else      { lcd_draw(bgcolor); }
              i--;
            }
          }
          else if((get_ms()-ms) > 2000) //2s
          {
            break;
          }
        }
        break;
      case COLOR_RGB323:
      case COLOR_RGB332:
      case COLOR_RGB233:
      case COLOR_GRAY:
        for(i=w*h; i!=0;)
        {
          if(if_available())
          {
            a = if_read8();
                 if(c == COLOR_RGB323){ a = RGB323toRGB565(a); }
            else if(c == COLOR_RGB332){ a = RGB332toRGB565(a); }
            else if(c == COLOR_RGB233){ a = RGB233toRGB565(a); }
            else                      { a = GRAYtoRGB565(a);   }
            lcd_draw(a);
            i--;
          }
          else if((get_ms()-ms) > 2000) //2s
          {
            break;
          }
        }
        break;
      default:
      case COLOR_RGB565:
        for(i=w*h; i!=0;)
        {
          if(if_available())
          {
            a = if_read16();
            lcd_draw(a);
            i--;
          }
          else if((get_ms()-ms) > 2000) //2s
          {
            break;
          }
        }
        break;
      case COLOR_RGB888:
        for(i=w*h; i!=0;)
        {
          if(if_available())
          {
            a  = (if_read8()&0xF8)<<8; //R (5 bits)
            a |= (if_read8()&0xFC)<<3; //G (6 bits)
            a |= (if_read8()&0xF8)>>3; //B (5 bits)
            lcd_draw(a);
            i--;
          }
          else if((get_ms()-ms) > 2000) //2s
          {
            break;
          }
        }
        break;
    }
Beispiel #20
0
/**********************************************************************************************************
** Function name:           lcd_ctrl_init
** Descriptions:            initial lcd controller's register. Called by common/lcd.c lcd_init
** input parameters:        NONE
** output parameters:       NONE
** Returned value:          NONE
** Created by:              WangDongfang
** Created Date:            2011-04-14
**---------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**---------------------------------------------------------------------------------------------------------
**********************************************************************************************************/
void lcd_init()
{
    /*
     *  配置端口为LCD控制器
     */
    rMIFPCON           &= ~(1   << 3);                                  /*  bypass 模式禁能             */
    rSPCON              = (rSPCON & ~(3UL)) | 1UL;                      /*  选择LCD控制器为RGB模式      */

    rGPICON             = 0xaaaaaaaa;                                   /*  使能引脚功能是LCD控制器     */
    rGPIPUD             = 0;                                            /*  禁止引脚上拉功能            */
    rGPJCON             = 0xaaaaaa;                                     /*  设置GPJ引脚功能为LCD控制器  */
    rGPJPUD             = 0;                                            /*  禁止引脚上拉功能            */




    rVIDCON0            = (0    << 29)                                  /*  0   -   渐进模式------------*/
                                                                        /*  1   -   交错模式            */

                        | (0    << 26)                                  /*  00  -   RGB 模式------------*/
                                                                        /*  01  -   TV模式              */
                                                                        /*  02  -   LDI0 180 IF         */
                                                                        /*  03  -   LDI1 180 IF         */

                        | (0    << 23)                                  /*  XXX -   LDI1 180 IF数据方式-*/

                        | (0    << 20)                                  /*  XXX -   LDI1 180 IF数据方式-*/

                        | (0    << 17)                                  /*  00  -   RGB并行 RGB---------*/
                                                                        /*  01  -   RGB并行 BGR         */
                                                                        /*  10  -   串行RGB R-G-B       */
                                                                        /*  10  -   串行RGB B-G-R       */

                        | (0    << 16)                                  /*  0   -   CLKVAL_F一直有效----*/
                                                                        /*  1-  -   帧开始时一帧只有一次*/

                        | (CLK_VAL << 6)                                /*  0-255   LCD时钟分频器-------*/
                                                                        /*          VCLK = clk/本数据+1)*/
                                                                        /*          VCLK最大不能超过66M */

                        | (0    << 5)                                   /*  0   -   常规模式/由ENVID控制*/
                                                                        /*  1   -   自由运行            */

                        | (1    << 4)                                   /*  0   -   直接使用选择时钟----*/
                                                                        /*  1   -   使用分频后的时钟    */

                        | (0    << 2)                                   /*  00  -   clk 时钟源 =HCLK--  */
                                                                        /*  01  -   clk 时钟源 =视频时钟*/
                                                                        /*  10  -   RESV                */
                                                                        /*  11  -   clk 时钟源=27M EXCLK*/

                        | (0    << 1)                                   /*  0   -   不输出视频信号------*/
                                                                        /*  1   -   输出视频信号        */

                        | (0    << 0);                                  /*  0   -   帧尾视频信号被使能--*/
                                                                        /*  1   -   帧尾视频信号被禁止  */


    rVIDCON1            = (0      << 7)                                 /*  0   -   VCLK下降沿有效------*/
                                                                        /*  1   -   VCLK上升沿有效      */

                        | (HS_POL << 6)                                 /*  0   -   Hsync正常有效-------*/
                                                                        /*  1   -   Hsync反向           */

                        | (VS_POL << 5)                                 /*  0   -   Vsync正常有效-------*/
                                                                        /*  1   -   Vsync反向           */

                        | (0      << 4)                                 /*  0   -   VDEN正常有效--------*/
                                                                        /*  1   -   VDEN反向有效        */

                        | (0    << 0);                                  /*  保留                        */


    rVIDCON2            = (0    << 23)                                  /*  0   -   ITU601无输出--------*/
                                                                        /*  1   -   ITU601被使能        */

                        | (0    << 14)                                  /*  0   -   YUV数据格式硬件选择-*/
                                                                        /*  1   -   YUV数据格式软件选择 */

                        | (0    << 12)                                  /*  00  -   YUV输出RGB格式------*/
                                                                        /*  01  -   YUV 422输出格式     */
                                                                        /*  1x  -   YUV 444输出格式     */

                        | (0    << 8)                                   /*  0   -   Y-cb-cr数据格式-----*/
                                                                        /*  1   -   cb-cr-Y数据格式     */

                        | (0    << 7)                                   /*  0   -   cb-cr数据格式-------*/
                                                                        /*  1   -   cr-cb数据格式       */

                        | (0    << 0);                                  /*  保留                        */


    /*
     *      |VFPD  |VSPW |VBPD |-------------有效行-----------------------------|
     *      |VFPDE |     |VBPDE|                                                |
     *   帧起始    |     |     |                                            帧结束
     *      V      V     V     V                                                V
     *      |------|     |------------------------------------------------------|
     *      |      |     |     ^                                                ^
     *      |      ------      |                                                |
     *      |                  -------------------------------------------------|
     *      |                  ^                                                ^
     *      |                line0                                            line?
     */
    rVIDTCON0           = (0            << 24)                          /*  VBPDE-----------------------*/
                                                                        /*  0-255  帧起始经过同步脉冲后 */
                                                                        /*  有多少无效行,(只针对YUV端口)*/

                        | (VBP   << 16)                                 /*  VBPD------------------------*/
                                                                        /*  0-255  帧起始经过同步脉冲后 */
                                                                        /*  有多少无效行                */

                        | (VFP   << 8)                                  /*  VFPD------------------------*/
                                                                        /*  0-255   -  帧结束后,在同步脉*/
                                                                        /*  冲前有多少个无效行          */

                        | (VSW   << 0);                                 /*  VSPW------------------------*/
                                                                        /*  0-255 帧同步脉冲有多少无效行*/


    /*
     *      |HFPD  |HSPW |HBPD |-------------有效像素---------------------------|
     *   行起始    |     |     |                                            行结束
     *      V      V     V     V                                                V
     *      |------|     |------------------------------------------------------|
     *      |      |     |     ^                                                ^
     *      |      ------      |                                                |
     *      |                  -------------------------------------------------|
     *      |                  ^                                                ^
     *      |                pixel0                                            pixel?
     */
    rVIDTCON1           = (0    << 24)                                  /*  VFPDE-----------------------*/
                                                                        /*  0-255 帧在经过同步脉冲前,有 */
                                                                        /*  多少无效行,(只针对YUV端口)  */

                        | (HBP   << 16)                                 /*  HBPD------------------------*/
                                                                        /*  0-255  经过行同步脉冲下降沿 */
                                                                        /*  后,在首个有效数据前,有多少  */
                                                                        /*  无效像素                    */

                        | (HFP   << 8)                                  /*  HFPD------------------------*/
                                                                        /*  0-255行结束后,在行同步时钟上*/
                                                                        /*  升沿前有多少个无效像素      */

                        | (HSW   << 0);                                 /*  HSPW------------------------*/
                                                                        /*  0-255 行同步有多少无效时钟  */

    rVIDTCON2           = ((U_LCD_YSIZE - 1)  << 11)                    /*  0~2048  有效行数            */
                        | ((U_LCD_XSIZE - 1)  << 0);                    /*  0~2048  有效列数            */


    rWINCON0            = (0    << 22)                                  /*  0   -   专用DMA进行数据访问 */
                                                                        /*  1   *   程序控制            */

                        | (0    << 20)                                  /*  0~1     采用哪个缓冲区      */

                        | (0    << 19)                                  /*  0   -   双缓冲固定----------*/
                                                                        /*  0   -   通过H/W信号自动改变 */

                        | (0    << 18)                                  /*  0   -   位交换禁止----------*/
                                                                        /*  0   -   位交换使能          */

                        | (0    << 17)                                  /*  0   -   字节交换禁止--------*/
                                                                        /*  1   -   字节交换使能        */

                        | (1    << 16)                                  /*  0   -   半字交换禁止--------*/
                                                                        /*  1   -   半字交换使能        */

                        | (0    << 13)                                  /*  0   -   RGB颜色空间---------*/
                                                                        /*  1   -   YCbCr颜色空间       */

                        | (0    << 9)                                   /*  0   -   猝发传输16字--------*/
                                                                        /*  1   -   猝发传输8字         */
                                                                        /*  2   -   猝发传输4字         */

                        | (5    << 2)                                   /*  0000-   1BPP----------------*/
                                                                        /*  0001-   2BPP                */
                                                                        /*  0010-   4BPP                */
                                                                        /*  0011-   8BPP  调色板        */
                                                                        /*  0101-   16BPP 565           */
                                                                        /*  0111-   16BPP 555           */
                                                                        /*  1000-   16BPP 无填充        */
                                                                        /*  1011-   24BPP 无填充        */

                        | (0    << 0);                                  /*  0   -   禁止窗口0输出       */
                                                                        /*  1   -   使能窗口0输出-------*/


    rVIDOSD0A           = (0    << 11)                                  /*  窗口左上角X坐标             */

                        | (0    << 0);                                  /*  窗口左上角Y坐标             */


    rVIDOSD0B           = ((U_LCD_XSIZE - 1)    << 11)                   /*  窗口右下角X坐标             */
                        | ((U_LCD_YSIZE - 1)    << 0);                   /*  窗口右下角Y坐标             */


    rVIDOSD0C           = (U_LCD_XSIZE * U_LCD_YSIZE);


    rDITHMODE           = (0    << 5)                                   /*  红色抖动位控制--------------*/
                                                                        /*  00  -   8位抖动             */
                                                                        /*  01  -   6位抖动             */
                                                                        /*  10  -   5位抖动             */

                        | (0    << 5)                                   /*  绿色抖动位控制--------------*/
                                                                        /*  00  -   8位抖动             */
                                                                        /*  01  -   6位抖动             */
                                                                        /*  10  -   5位抖动             */

                        | (0    << 5)                                   /*  蓝色抖动位控制--------------*/
                                                                        /*  00  -   8位抖动             */
                                                                        /*  01  -   6位抖动             */
                                                                        /*  10  -   5位抖动             */

                        | (0    << 0);                                  /*  0   -   抖动禁止            */
                                                                        /*  1   -   抖动使能------------*/

    /*
     * Setup Frame buffer address in s3c6410 LCD controller
     */
    rVIDW00ADD0B0       = (FIRST_FB_ADDR);                              /* Frame buffer start address   */
    rVIDW00ADD1B0       = (FIRST_FB_ADDR & 0xffffff) + (V_SCR_XSIZE * U_LCD_YSIZE * BYTE_PER_PIXEL);
                                                                        /* Frame buffer end address     */

    rVIDW00ADD0B1       = (0);                                          /* Frame buffer start address   */
    rVIDW00ADD1B1       = (V_SCR_XSIZE * U_LCD_YSIZE * BYTE_PER_PIXEL); /* Frame buffer end address     */

    rVIDW00ADD2         = (((V_SCR_XSIZE - U_LCD_XSIZE) * BYTE_PER_PIXEL) << 13) |
                          (U_LCD_XSIZE * BYTE_PER_PIXEL) << 0;          /* Virtual screen controls    */


    rVIDINTCON0         = (0    << 0);                                  /*  0   -  禁止LCD控制器所有中断*/


    rVIDINTCON1         = (0    << 0);                                  /*  0   -  禁止LCD控制器所有中断*/


    /*
     *  打开窗口0输出、LCD控制器输出
     */
    rWINCON0           |= (1    << 0);                                  /*  0   -   禁止窗口0输出       */
                                                                        /*  1   -   使能窗口0输出----- -*/


    rVIDCON0           |= (1    << 1)                                   /*  0   -   不输出视频信号------*/
                                                                        /*  1   -   输出视频信号        */

                        | (1    << 0);                                  /*  0   -   帧尾视频信号被使能--*/
                                                                        /*  1   -   帧尾视频信号被禁止  */

    lcd_clear (0x001f); /* set lcd screen as blue */

    lcd_enable();

    _G_show_addr = (uint16 *)FIRST_FB_ADDR;
}
Beispiel #21
0
/*
 * this is called from board_init() after the hardware has been set up
 * and is usable. That seems like a good time to do this.
 * Right now the return value is ignored.
 */
int do_auto_update(void)
{
	block_dev_desc_t *stor_dev;
	long sz;
	int i, res = 0, cnt, old_ctrlc;
	char *env;
	long start, end;

#if 0 /* disable key-press detection to speed up boot-up time */
	uchar keypad_status1[2] = {0,0}, keypad_status2[2] = {0,0};

	/*
	 * Read keypad status
	 */
	i2c_read(I2C_PSOC_KEYPAD_ADDR, 0, 0, keypad_status1, 2);
	mdelay(500);
	i2c_read(I2C_PSOC_KEYPAD_ADDR, 0, 0, keypad_status2, 2);

	/*
	 * Check keypad
	 */
	if ( !(keypad_status1[1] & KEYPAD_MASK_LO) ||
	      (keypad_status1[1] != keypad_status2[1])) {
		return 0;
	}

#endif
	au_usb_stor_curr_dev = -1;
	/* start USB */
	if (usb_stop() < 0) {
		debug ("usb_stop failed\n");
		return -1;
	}
	if (usb_init() < 0) {
		debug ("usb_init failed\n");
		return -1;
	}
	/*
	 * check whether a storage device is attached (assume that it's
	 * a USB memory stick, since nothing else should be attached).
	 */
	au_usb_stor_curr_dev = usb_stor_scan(0);
	if (au_usb_stor_curr_dev == -1) {
		debug ("No device found. Not initialized?\n");
		res = -1;
		goto xit;
	}
	/* check whether it has a partition table */
	stor_dev = get_dev("usb", 0);
	if (stor_dev == NULL) {
		debug ("uknown device type\n");
		res = -1;
		goto xit;
	}
	if (fat_register_device(stor_dev, 1) != 0) {
		debug ("Unable to use USB %d:%d for fatls\n",
			au_usb_stor_curr_dev, 1);
		res = -1;
		goto xit;
	}
	if (file_fat_detectfs() != 0) {
		debug ("file_fat_detectfs failed\n");
	}

	/*
	 * now check whether start and end are defined using environment
	 * variables.
	 */
	start = -1;
	end = 0;
	env = getenv("firmware_st");
	if (env != NULL)
		start = simple_strtoul(env, NULL, 16);
	env = getenv("firmware_nd");
	if (env != NULL)
		end = simple_strtoul(env, NULL, 16);
	if (start >= 0 && end && end > start) {
		ausize[IDX_FIRMWARE] = (end + 1) - start;
		aufl_layout[IDX_FIRMWARE].start = start;
		aufl_layout[IDX_FIRMWARE].end = end;
	}
	start = -1;
	end = 0;
	env = getenv("kernel_st");
	if (env != NULL)
		start = simple_strtoul(env, NULL, 16);
	env = getenv("kernel_nd");
	if (env != NULL)
		end = simple_strtoul(env, NULL, 16);
	if (start >= 0 && end && end > start) {
		ausize[IDX_KERNEL] = (end + 1) - start;
		aufl_layout[IDX_KERNEL].start = start;
		aufl_layout[IDX_KERNEL].end = end;
	}
	start = -1;
	end = 0;
	env = getenv("rootfs_st");
	if (env != NULL)
		start = simple_strtoul(env, NULL, 16);
	env = getenv("rootfs_nd");
	if (env != NULL)
		end = simple_strtoul(env, NULL, 16);
	if (start >= 0 && end && end > start) {
		ausize[IDX_ROOTFS] = (end + 1) - start;
		aufl_layout[IDX_ROOTFS].start = start;
		aufl_layout[IDX_ROOTFS].end = end;
	}

	/* make certain that HUSH is runnable */
	u_boot_hush_start();
	/* make sure that we see CTRL-C and save the old state */
	old_ctrlc = disable_ctrlc(0);

	/* validate the images first */
	for (i = 0; i < AU_MAXFILES; i++) {
		ulong imsize;
		/* just read the header */
		sz = file_fat_read(aufile[i], LOAD_ADDR, image_get_header_size ());
		debug ("read %s sz %ld hdr %d\n",
			aufile[i], sz, image_get_header_size ());
		if (sz <= 0 || sz < image_get_header_size ()) {
			debug ("%s not found\n", aufile[i]);
			ausize[i] = 0;
			continue;
		}
		/* au_check_header_valid() updates ausize[] */
		if ((imsize = au_check_header_valid(i, sz)) < 0) {
			debug ("%s header not valid\n", aufile[i]);
			continue;
		}
		/* totsize accounts for image size and flash erase size */
		totsize += (imsize + (aufl_layout[i].end - aufl_layout[i].start));
	}

#ifdef CONFIG_PROGRESSBAR
	if (totsize) {
		lcd_puts(" Update in progress\n");
		lcd_enable();
	}
#endif

	/* just loop thru all the possible files */
	for (i = 0; i < AU_MAXFILES && totsize; i++) {
		if (!ausize[i]) {
			continue;
		}
		sz = file_fat_read(aufile[i], LOAD_ADDR, ausize[i]);

		debug ("read %s sz %ld hdr %d\n",
			aufile[i], sz, image_get_header_size ());

		if (sz != ausize[i]) {
			printf ("%s: size %ld read %ld?\n", aufile[i], ausize[i], sz);
			continue;
		}

		if (sz <= 0 || sz <= image_get_header_size ()) {
			debug ("%s not found\n", aufile[i]);
			continue;
		}
		if (au_check_cksum_valid(i, sz) < 0) {
			debug ("%s checksum not valid\n", aufile[i]);
			continue;
		}
		/* this is really not a good idea, but it's what the */
		/* customer wants. */
		cnt = 0;
		do {
			res = au_do_update(i, sz);
			/* let the user break out of the loop */
			if (ctrlc() || had_ctrlc()) {
				clear_ctrlc();
				break;
			}
			cnt++;
#ifdef AU_TEST_ONLY
		} while (res < 0 && cnt < (AU_MAXFILES + 1));
		if (cnt < (AU_MAXFILES + 1))
#else
		} while (res < 0);
#endif
	}
Beispiel #22
0
void lcd_reset(void)
{
  uint32_t c, i, j;
  uint8_t initdata[] = 
  {
    //0x40| 1, LCD_CMD_RESET,
    //0xC0|60,
    //0xC0|60,
    0x40| 1, LCD_CMD_DISPLAY_OFF,
    0xC0|20,
    0x40| 1, LCD_CMD_POWER_CTRLB,
    0x80| 3, 0x00, 0x83, 0x30, //0x83 0x81 0xAA
    0x40| 1, LCD_CMD_POWERON_SEQ_CTRL,
    0x80| 4, 0x64, 0x03, 0x12, 0x81, //0x64 0x67
    0x40| 1, LCD_CMD_DRV_TIMING_CTRLA,
    0x80| 3, 0x85, 0x01, 0x79, //0x79 0x78
    0x40| 1, LCD_CMD_POWER_CTRLA,
    0x80| 5, 0x39, 0X2C, 0x00, 0x34, 0x02,
    0x40| 1, LCD_CMD_PUMP_RATIO_CTRL,
    0x80| 1, 0x20,
    0x40| 1, LCD_CMD_DRV_TIMING_CTRLB,
    0x80| 2, 0x00, 0x00,
    0x40| 1, LCD_CMD_POWER_CTRL1,
    0x80| 1, 0x26, //0x26 0x25
    0x40| 1, LCD_CMD_POWER_CTRL2,
    0x80| 1, 0x11,
    0x40| 1, LCD_CMD_VCOM_CTRL1,
    0x80| 2, 0x35, 0x3E,
    0x40| 1, LCD_CMD_VCOM_CTRL2,
    0x80| 1, 0xBE, //0xBE 0x94
    0x40| 1, LCD_CMD_FRAME_CTRL,
    0x80| 2, 0x00, 0x1B, //0x1B 0x70
    0x40| 1, LCD_CMD_ENABLE_3G,
    0x80| 1, 0x08, //0x08 0x00
    0x40| 1, LCD_CMD_GAMMA,
    0x80| 1, 0x01, //G2.2
    0x40| 1, LCD_CMD_POS_GAMMA,
    0x80|15, 0x1F, 0x1A, 0x18, 0x0A, 0x0F, 0x06, 0x45, 0x87, 0x32, 0x0A, 0x07, 0x02, 0x07, 0x05, 0x00,
  //0x80|15, 0x0F, 0x1A, 0x18, 0x0A, 0x0F, 0x06, 0x45, 0x87, 0x32, 0x0A, 0x07, 0x02, 0x07, 0x05, 0x00,
    0x40| 1, LCD_CMD_NEG_GAMMA,
    0x80|15, 0x00, 0x25, 0x27, 0x05, 0x10, 0x09, 0x3A, 0x78, 0x4D, 0x05, 0x18, 0x0D, 0x38, 0x3A, 0x1F,
  //0x80|15, 0x00, 0x25, 0x27, 0x05, 0x10, 0x09, 0x3A, 0x78, 0x4D, 0x05, 0x18, 0x0D, 0x38, 0x3A, 0x0F,
    0x40| 1, LCD_CMD_DISPLAY_CTRL,
    0x80| 4, 0x0A, 0x82, 0x27, 0x00,
    0x40| 1, LCD_CMD_ENTRY_MODE,
    0x80| 1, 0x07,
    0x40| 1, LCD_CMD_PIXEL_FORMAT,
    0x80| 1, 0x55, //16bit
    0x40| 1, LCD_CMD_MEMACCESS_CTRL,
    0x80| 1, (1<<MEM_BGR) | (1<<MEM_X) | (1<<MEM_Y),
    0x40| 1, LCD_CMD_COLUMN,
    0x80| 2, 0x00, 0x00,
    0x80| 2, ((LCD_HEIGHT-1)>>8)&0xFF, (LCD_HEIGHT-1)&0xFF,
    0x40| 1, LCD_CMD_PAGE,
    0x80| 2, 0x00, 0x00,
    0x80| 2, ((LCD_WIDTH-1)>>8)&0xFF, (LCD_WIDTH-1)&0xFF,
    0x40| 1, LCD_CMD_SLEEPOUT,
    0xC0|60,
    0xC0|60,
    0x40| 1, LCD_CMD_DISPLAY_ON,
    0xC0|20,
  };

  //init pins
  INIT_PINS();

  //hardware reset
  GPIO_CLRPIN(LCD_PORT, RST_PIN);
  delay_ms(20);
  GPIO_SETPIN(LCD_PORT, RST_PIN);
  delay_ms(120);

  lcd_enable();

  //send init commands and data
  for(i=0; i<sizeof(initdata);)
  {
    c = initdata[i++];
    switch(c&0xC0)
    {
      case 0x40: //command
        for(j=c&0x3F; j!=0; j--)
        {
          c = initdata[i++];
          lcd_wrcmd8(c);
        }
        break;

      case 0x80: //data
        for(j=c&0x3F; j!=0; j--)
        {
          c = initdata[i++];
          lcd_wrdata8(c);
        }
        break;

      case 0xC0: //delay
        delay_ms(c&0x3F);
        break;
    }
  }

  //clear display buffer
  lcd_drawstart();
  for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--)
  {
    lcd_draw(0);
  }
  lcd_drawstop();

  lcd_disable();

  return;
}
Beispiel #23
0
void backlight_hw_on(void)
{
    lcd_enable(true);
}
Beispiel #24
0
void lcd_ctrl_init_70(void *lcdbase)
{
	ulong freq_lcdclk; 
	ulong freq_Hclk;
	ulong fb_size;
	unsigned char nn;
	unsigned short *pp;
	int i;

	GPICON_REG = 0xaaaaaaaa;
	GPIPUD_REG = 0xaaaaaaaa;
	GPJCON_REG = 0xaaaaaaaa;
	GPJPUD_REG = 0xaaaaaaaa;

	lcd_disable();
	S3C_WINCON0 &= (~(S3C_WINCONx_ENWIN_F_ENABLE));

	MIFPCON_REG &= (~SEL_BYPASS_MASK);
	SPCON_REG &= (~LCD_SEL_MASK);
	SPCON_REG |= (RGB_IF_STYLE_MASK);

	freq_lcdclk = S3CFB_PIXEL_CLOCK;
	freq_Hclk = get_HCLK();

	nn = (unsigned char)(freq_Hclk / freq_lcdclk) - 1;
	if(freq_lcdclk < freq_Hclk/2)
	{
		S3C_VIDCON0 = S3C_VIDCON0_INTERLACE_F_PROGRESSIVE + S3C_VIDCON0_VIDOUT_RGB_IF + \
		        S3C_VIDCON0_PNRMODE_RGB_P + S3C_VIDCON0_CLKVALUP_ST_FRM + S3C_VIDCON0_CLKVAL_F(nn) + \
		        S3C_VIDCON0_CLKDIR_DIVIDED + S3C_VIDCON0_CLKSEL_F_HCLK;
	}else
	{
		S3C_VIDCON0 = S3C_VIDCON0_INTERLACE_F_PROGRESSIVE + S3C_VIDCON0_VIDOUT_RGB_IF + \
		        S3C_VIDCON0_PNRMODE_RGB_P + S3C_VIDCON0_CLKVALUP_ST_FRM + S3C_VIDCON0_CLKVAL_F(0) + \
		        S3C_VIDCON0_CLKDIR_DIRECTED  + S3C_VIDCON0_CLKSEL_F_HCLK;
	}

	nn = 0;
	if(S3CFB_IVCLK)
	{
		nn += S3C_VIDCON1_IVCLK_RISE_EDGE;
	}
	if(S3CFB_IHSYNC)
	{
		nn += S3C_VIDCON1_IHSYNC_INVERT;
	}
	if(S3CFB_IVSYNC)
	{
		nn += S3C_VIDCON1_IVSYNC_INVERT;
	}
	if(S3CFB_IVDEN)
	{
		nn += S3C_VIDCON1_IVDEN_INVERT;
	}
	S3C_VIDCON1 = (unsigned int)nn;
	S3C_VIDCON2 = 0;

	S3C_VIDTCON0 = S3C_VIDTCON0_VBPD(S3CFB_VBP - 1) | S3C_VIDTCON0_VFPD(S3CFB_VFP - 1) | S3C_VIDTCON0_VSPW(S3CFB_VSW - 1);
	S3C_VIDTCON1 = S3C_VIDTCON1_HBPD(S3CFB_HBP - 1) | S3C_VIDTCON1_HFPD(S3CFB_HFP -1) | S3C_VIDTCON1_HSPW(S3CFB_HSW - 1);
	S3C_VIDTCON2 = S3C_VIDTCON2_LINEVAL(S3CFB_VRES - 1) | S3C_VIDTCON2_HOZVAL(S3CFB_HRES - 1);

#if LCD_BPP == LCD_COLOR32
	S3C_WINCON0 = S3C_WINCONx_BPPMODE_F_24BPP_888;
	S3C_WINCON1 = S3C_WINCONx_BPPMODE_F_24BPP_888 | S3C_WINCONx_BLD_PIX_PIXEL;
#else
	S3C_WINCON0 = S3C_WINCONx_BPPMODE_F_16BPP_565 | S3C_WINCONx_HAWSWP_ENABLE;
	S3C_WINCON1 = S3C_WINCONx_BPPMODE_F_16BPP_565 | S3C_WINCONx_HAWSWP_ENABLE | S3C_WINCONx_BLD_PIX_PIXEL;
#endif

	S3C_WINCON2 = 0;
	S3C_WINCON3 = 0;
	S3C_WINCON4 = 0;

	S3C_VIDOSD0A = S3C_VIDOSDxA_OSD_LTX_F(0) + S3C_VIDOSDxA_OSD_LTY_F(0);
	S3C_VIDOSD0B = S3C_VIDOSDxB_OSD_RBX_F(S3CFB_HRES - 1) | S3C_VIDOSDxB_OSD_RBY_F(S3CFB_VRES - 1);
	S3C_VIDOSD0C = S3C_VIDOSD0C_OSDSIZE(S3CFB_HRES*S3CFB_VRES);

	S3C_VIDOSD1A = S3C_VIDOSDxA_OSD_LTX_F(0) + S3C_VIDOSDxA_OSD_LTY_F(0);
	S3C_VIDOSD1B = S3C_VIDOSDxB_OSD_RBX_F(S3CFB_HRES - 1) | S3C_VIDOSDxB_OSD_RBY_F(S3CFB_VRES - 1);
	S3C_VIDOSD1C = 0xDDD000;/*alpha blending*/
	S3C_VIDOSD1D = S3C_VIDOSD0C_OSDSIZE(S3CFB_HRES*S3CFB_VRES);

	S3C_VIDOSD2A = 0;
	S3C_VIDOSD2B = 0;
	S3C_VIDOSD2C = 0;
	S3C_VIDOSD2D = 0;
	S3C_VIDOSD3A = 0;
	S3C_VIDOSD3B = 0;
	S3C_VIDOSD3C = 0;
	S3C_VIDOSD4A = 0;
	S3C_VIDOSD4B = 0;
	S3C_VIDOSD4C = 0;

	fb_size = calc_fbsize();

	S3C_VIDW00ADD0B0 = virt_to_phys(lcdbase);
	S3C_VIDW00ADD0B1 = 0;
	S3C_VIDW01ADD0B0 = virt_to_phys(osd_frame_buffer);
	S3C_VIDW01ADD0B1 = 0;
	S3C_VIDW02ADD0 = 0;
	S3C_VIDW03ADD0 = 0;
	S3C_VIDW04ADD0 = 0;

	S3C_VIDW00ADD1B0 = virt_to_phys((unsigned int)(lcdbase) + fb_size);
	S3C_VIDW00ADD1B1 = 0;
	S3C_VIDW01ADD1B0 = virt_to_phys(osd_frame_buffer) + fb_size;
	S3C_VIDW01ADD1B1 = 0;
	S3C_VIDW02ADD1 = 0;
	S3C_VIDW03ADD1 = 0;
	S3C_VIDW04ADD1 = 0;

	S3C_VIDW00ADD2 = 0;//S3C_VIDWxxADD2_OFFSIZE_F(0) | (S3C_VIDWxxADD2_PAGEWIDTH_F(panel_info.vl_col*panel_info.vl_bpix/8));
	S3C_VIDW01ADD2 = 0;//S3C_VIDWxxADD2_OFFSIZE_F(0) | (S3C_VIDWxxADD2_PAGEWIDTH_F(panel_info.vl_col*panel_info.vl_bpix/8));
	S3C_VIDW02ADD2 = 0;
	S3C_VIDW03ADD2 = 0;
	S3C_VIDW04ADD2 = 0;

	S3C_W1KEYCON0  = S3C_WxKEYCON0_KEYBLEN_ENABLE | S3C_WxKEYCON0_KEYEN_F_ENABLE | S3C_WxKEYCON0_COMPKEY(0xFFFF);
	S3C_W1KEYCON1  = 0x00000000;/*color key*/

#if 1
	memset(lcdbase,0x00,fb_size*2);
#else
	pp = lcdbase;
	for(i=0;i< S3CFB_HRES * S3CFB_VRES;i++)
	{
		*pp = 0xf100;
		pp++;
	}
#endif
	lcd_enable();

	S3C_WINCON0 |= S3C_WINCONx_ENWIN_F_ENABLE;
	S3C_WINCON1 |= S3C_WINCONx_ENWIN_F_ENABLE;
	return (0);
}
Beispiel #25
0
void _backlight_off(void)
{
    lcd_enable(false);
    ascodec_write(0x25, ascodec_read(0x25) & ~2);    /* lcd power */
    ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x0);
}
Beispiel #26
0
void _backlight_on(void)
{
    ascodec_write(0x25, ascodec_read(0x25) | 2);    /* lcd power */
    ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x90);
    lcd_enable(true);
}
Beispiel #27
0
int enter_boot_power_down()
{
    int key;
    int ac;
    
    power_gate_init();
    lcd_disable();
    video_dac_disable();
    camera_power_off() ;
    vcc2_power_off();
    //turn_off_audio_DAC();
    if (!early_suspend_flag) {
        printf("\n boot_suspend \n");
//        if (pdata->set_exgpio_early_suspend) {
//            pdata->set_exgpio_early_suspend(OFF);
//        }
        early_power_gate_switch(OFF);
        early_clk_switch(OFF);
        early_pll_switch(OFF);
        early_suspend_flag = 1;
    }
    
    printf("enter boot_pm_suspend!\n");
    analog_switch(OFF);
    usb_switch(OFF, 0);
    usb_switch(OFF, 1);
//    if (pdata->set_vccx2) {
//        pdata->set_vccx2(OFF);
//    }
    power_gate_switch(OFF);
    clk_switch(OFF);
    pll_switch(OFF);
    clrbits_le32(P_HHI_SYS_CPU_CLK_CNTL,1<<7); //change A9-->24M 

    
    printf("boot sleep ...\n");
//	WRITE_MPEG_REG_BITS(HHI_MALI_CLK_CNTL, 0, 9, 3); // mali use xtal
//    CLEAR_CBUS_REG_MASK(HHI_SYS_CPU_CLK_CNTL, 1<<7);  // a9 use xtal
//    SET_CBUS_REG_MASK(HHI_SYS_PLL_CNTL, (1 << 15));   // turn off sys pll
//    
//    meson_power_suspend();
    
    key = powerkey_scan();
    ac = axp_charger_is_ac_online();
    while((!key)&&ac) 
    {
        key = powerkey_scan();
        ac = axp_charger_is_ac_online();
    }
    setbits_le32(P_HHI_SYS_CPU_CLK_CNTL,1<<7); //change A9-->normal 

    
    printf("boot... wake up\n");
//    if (pdata->set_vccx2) {
//        pdata->set_vccx2(ON);
//    }
    SET_CBUS_REG_MASK(HHI_SYS_CPU_CLK_CNTL, (1 << 7));  // a9 use pll
    WRITE_MPEG_REG_BITS(HHI_MALI_CLK_CNTL, 3, 9, 3); // mali use pll

    pll_switch(ON);
    clk_switch(ON);
    power_gate_switch(ON);
    usb_switch(ON, 0);
    usb_switch(ON, 1);
    analog_switch(ON);
    if (early_suspend_flag) {
        early_pll_switch(ON);
        early_clk_switch(ON);
        early_power_gate_switch(ON);
        early_suspend_flag = 0;
        printf("boot sys_resume\n");
    }    
    
    printf("mlvds init\n");
    lcd_enable();  
    printf("mlvds init finish\n");  
    
    return ac;
}
Beispiel #28
0
int main()
{
	char c;
	
	init_uart();
	lcd_init();
	lcd_enable();

	ts_init();

	ts_calibrate();
	
	printf("can update program with serial port\n\r");

	while (1)
	{
		printf("[w] write the nand flash\n\r");
		printf("[r] read the nand flash\n\r");
		printf("[e] erase the nand flash\n\r");
		printf("[g] get file, and write to nand flash 0 block\n\r");
		printf("[x] get file to ddr(0x52000000), run it\n\r");
		printf("[t] test lcd\n\r");
		printf("[s] test touch screem\n\r");

		do {
			c = getc();
			if (c == '\n' || c == '\r')
			{
				printf("\n\r");
			}
			else
			{
				putc(c);
			}
		} while (c == '\n' || c == '\r');
		
		switch (c)
		{
			case 'w':
			case 'W':
			{
				nand_write_test();
				break;
			}

			case 'r':
			case 'R':
			{
				nand_read_test();
				break;
			}

			case 'e':
			case 'E':
			{
				nand_erase_test();
				break;
			}

			case 'g':
			case 'G':
			{
				update_program();
				break;
			}

			case 'x':
			case 'X':
			{
				run_program();
				break;
			}
			
			case 't':
			case 'T':
			{
				lcd_test();
				break;
			}
			case 's':
			case 'S':
			{
				ts_test();
				break;
			}
		}
	}
	
	return 0;
}
Beispiel #29
0
void backlight_hw_off(void)
{
    lcd_enable(false);
}
Beispiel #30
0
void backlight_hw_on(void)
{
    lcd_enable(true);
    sleep(HZ/100); /* lcd needs time - avoid flashing for dark screens */
    or_l(0x00020000, &GPIO1_OUT);
}