| 384 | } |
| 385 | |
| 386 | static rt_err_t drv_lcd_init(rt_device_t dev) |
| 387 | { |
| 388 | rt_err_t ret = RT_EOK; |
| 389 | lcd_8080_device_t lcd = (lcd_8080_device_t)dev; |
| 390 | rt_uint8_t data = 0; |
| 391 | |
| 392 | if(!lcd) |
| 393 | { |
| 394 | return -RT_ERROR; |
| 395 | } |
| 396 | drv_lcd_hw_init(lcd); |
| 397 | /* reset LCD */ |
| 398 | drv_lcd_cmd(lcd, SOFTWARE_RESET); |
| 399 | rt_thread_mdelay(100); |
| 400 | |
| 401 | /* Enter normal status */ |
| 402 | drv_lcd_cmd(lcd, SLEEP_OFF); |
| 403 | rt_thread_mdelay(100); |
| 404 | |
| 405 | /* pixel format rgb565 */ |
| 406 | drv_lcd_cmd(lcd, PIXEL_FORMAT_SET); |
| 407 | data = 0x55; |
| 408 | drv_lcd_data_byte(lcd, &data, 1); |
| 409 | |
| 410 | /* set direction */ |
| 411 | drv_lcd_set_direction(lcd, LCD_SCAN_DIR); |
| 412 | |
| 413 | lcd->lcd_info.framebuffer = rt_malloc_align(lcd->lcd_info.height * lcd->lcd_info.width * (lcd->lcd_info.bits_per_pixel / 8), 64); |
| 414 | RT_ASSERT(lcd->lcd_info.framebuffer); |
| 415 | |
| 416 | uint16_t *framebuffer = (uint16_t *)(lcd->lcd_info.framebuffer); |
| 417 | for(uint32_t i=0; i<(lcd->lcd_info.height * lcd->lcd_info.width * (lcd->lcd_info.bits_per_pixel / 8))/2; i++) { |
| 418 | framebuffer[i] = BLACK; |
| 419 | } |
| 420 | /*display on*/ |
| 421 | #ifdef BSP_BOARD_K210_DRACO |
| 422 | drv_lcd_cmd(lcd, INVERSION_DISPALY_ON); |
| 423 | #endif |
| 424 | drv_lcd_cmd(lcd, DISPALY_ON); |
| 425 | |
| 426 | /* set to black */ |
| 427 | drv_lcd_clear(lcd, BLACK); |
| 428 | return ret; |
| 429 | } |
| 430 | |
| 431 | static rt_err_t drv_lcd_open(rt_device_t dev, rt_uint16_t oflag) |
| 432 | { |
nothing calls this directly
no test coverage detected