123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- /*
- * File : drv_slcdc_ili9341.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2008 - 2016, RT-Thread Development Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Change Logs:
- * Date Author Notes
- * 2016-08-12 fujie The first version
- */
- #include <string.h>
- #include <rthw.h>
- #include <rtthread.h>
- #include <rtdevice.h>
- #include "board.h"
- #include "drv_gpio.h"
- #include "drv_slcdc.h"
- #include "drv_clock.h"
- #if defined(RT_USING_ILI9341)
- rt_uint32_t _ili9341_cmd_table[]=
- {
- 0x2c2c2c2c,
- };
- const struct slcd_data_table _ili9341_data_table[] =
- {
- {SMART_CONFIG_CMD, 0x11},
- {SMART_CONFIG_UDELAY, 1200},
- {SMART_CONFIG_CMD, 0xCF}, //Power control B 功耗控制B 【3参数】
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0xAA},
- {SMART_CONFIG_DATA, 0XB0},
- {SMART_CONFIG_CMD, 0xED}, //Power on sequence control 电源时序控制B 【4参数】
- {SMART_CONFIG_DATA, 0x64},
- {SMART_CONFIG_DATA, 0x03},
- {SMART_CONFIG_DATA, 0X12},
- {SMART_CONFIG_DATA, 0X81},
- {SMART_CONFIG_CMD, 0xE8}, //Driver timing control A
- {SMART_CONFIG_DATA, 0x85},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x78},
- {SMART_CONFIG_CMD, 0xCB}, //Power control A
- {SMART_CONFIG_DATA, 0x39},
- {SMART_CONFIG_DATA, 0x2C},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x34},
- {SMART_CONFIG_DATA, 0x02},
- {SMART_CONFIG_CMD, 0xF7}, //Pump ratio control
- {SMART_CONFIG_DATA, 0x20},
- {SMART_CONFIG_CMD, 0xEA}, // Driver timing control B
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_CMD, 0xb6}, //Display Function Control
- {SMART_CONFIG_DATA, 0x0a},
- {SMART_CONFIG_DATA, 0xa2},
- {SMART_CONFIG_CMD, 0xC0}, //Power control
- {SMART_CONFIG_DATA, 0x26}, //VRH[5:0]
- {SMART_CONFIG_CMD, 0xC1}, //Power control
- {SMART_CONFIG_DATA, 0x11}, //SAP[2:0];BT[3:0]
- {SMART_CONFIG_CMD, 0xC5}, //VCM control
- {SMART_CONFIG_DATA, 0x31}, //对比度调节 0x31
- {SMART_CONFIG_DATA, 0x3C},
- {SMART_CONFIG_CMD, 0xC7}, //VCM control2
- {SMART_CONFIG_DATA, 0xd3},
- {SMART_CONFIG_CMD, 0x36}, // Memory Access Control
- {SMART_CONFIG_DATA, 0x68}, // ●定义帧存储器的读写扫描方向 //[竖屏]0x48 0x88 [横屏]0x28 0xE8 0x68 //0x08
- {SMART_CONFIG_CMD, 0x3A}, //COLMOD: Pixel Format Set
- {SMART_CONFIG_DATA, 0x55},
- {SMART_CONFIG_CMD, 0xB1}, //VCM control
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x14},
- {SMART_CONFIG_CMD, 0xF2}, // 3Gamma Function Disable
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_CMD, 0x26}, //Gamma curve selected
- {SMART_CONFIG_DATA, 0x01},
- {SMART_CONFIG_CMD, 0xE0}, //Set Gamma
- {SMART_CONFIG_DATA, 0x0F},
- {SMART_CONFIG_DATA, 0x1d},
- {SMART_CONFIG_DATA, 0x1a},
- {SMART_CONFIG_DATA, 0x09},
- {SMART_CONFIG_DATA, 0x0f},
- {SMART_CONFIG_DATA, 0x09},
- {SMART_CONFIG_DATA, 0x46},
- {SMART_CONFIG_DATA, 0x88},
- {SMART_CONFIG_DATA, 0x39},
- {SMART_CONFIG_DATA, 0x05},
- {SMART_CONFIG_DATA, 0x0f},
- {SMART_CONFIG_DATA, 0x03},
- {SMART_CONFIG_DATA, 0x07},
- {SMART_CONFIG_DATA, 0x05},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_CMD, 0XE1}, //Set Gamma
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x22},
- {SMART_CONFIG_DATA, 0x25},
- {SMART_CONFIG_DATA, 0x06},
- {SMART_CONFIG_DATA, 0x10},
- {SMART_CONFIG_DATA, 0x06},
- {SMART_CONFIG_DATA, 0x39},
- {SMART_CONFIG_DATA, 0x22},
- {SMART_CONFIG_DATA, 0x4a},
- {SMART_CONFIG_DATA, 0x0a},
- {SMART_CONFIG_DATA, 0x10},
- {SMART_CONFIG_DATA, 0x0C},
- {SMART_CONFIG_DATA, 0x38},
- {SMART_CONFIG_DATA, 0x3a},
- {SMART_CONFIG_DATA, 0x0F},
- {SMART_CONFIG_UDELAY, 5},
- {SMART_CONFIG_CMD, 0x11}, //Exit Sleep
- {SMART_CONFIG_UDELAY, 12},
- {SMART_CONFIG_CMD, 0x29}, //Display
- // Write the display data into GRAM here
- {SMART_CONFIG_CMD, 0x2A},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0xEF},
- {SMART_CONFIG_CMD, 0x2B},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x00},
- {SMART_CONFIG_DATA, 0x01},
- {SMART_CONFIG_DATA, 0x3F},
- // {SMART_CONFIG_CMD, 0x2C}, //GRAM start writing
- /* set window */
- {SMART_CONFIG_CMD, 0x2a},
- {SMART_CONFIG_DATA, 0>>8},
- {SMART_CONFIG_DATA, 0&0xFF},
- {SMART_CONFIG_DATA, 320>>8},
- {SMART_CONFIG_DATA, 320&0xFF},
- {SMART_CONFIG_CMD, 0x2b},
- {SMART_CONFIG_DATA, 0>>8},
- {SMART_CONFIG_DATA, 0&0xFF},
- {SMART_CONFIG_DATA, 240>>8},
- {SMART_CONFIG_DATA, 240&0xFF},
- {SMART_CONFIG_CMD, 0X2C}, //GRAM start writing
- };
- const struct slcd_configure _ili9341_config =
- {
- .reg_write_twice = 0,
- .rsply_cmd_high = 0,
- .csply_active_high = 0,
- /* write graphic ram command, in word, for example 8-bit bus, write_gram_cmd=C3C2C1C0. */
- .newcfg_fmt_conv = 1,
- .width = 320,
- .height = 240,
- .bpp = 16,
- .bus_width = 8,
- .data_table_num = sizeof(_ili9341_data_table)/sizeof(_ili9341_data_table[0]),
- .data_table = &_ili9341_data_table[0],
- .cmd_table = &_ili9341_cmd_table[0],
- .cmd_table_num = sizeof(_ili9341_cmd_table)/sizeof(_ili9341_cmd_table[0]),
- };
- void ili9341_bl_set(rt_bool_t isPwrON)
- {
- if(isPwrON)
- gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 1);
- else
- gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 0);
- }
- int ili9341_init(void)
- {
- /* enable backlight */
- gpio_set_func(GPIO_PORT_B, GPIO_Pin_12, GPIO_OUTPUT0); //LCD Light
- /* Reset LCD Driver */
- gpio_set_func(GPIO_PORT_B, GPIO_Pin_10, GPIO_OUTPUT0);
- rt_thread_delay(20);
- gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 1);
- rt_thread_delay(20);
- rt_hw_slcd_init((struct slcd_configure *)&_ili9341_config);
- // rt_hw_lcd_set_bl_func(ili9341_bl_set);
- return 0;
- }
- #include <finsh.h>
- int bl(int argc, char** argv)
- {
- int enable = 0;
- if (argc != 2) return 0;
- enable = atoi(argv[1]);
- if (enable)
- {
- rt_kprintf("turn on blight\n");
- gpio_set_value(GPIO_PORT_B, GPIO_Pin_12, 1);
- }
- else
- {
- rt_kprintf("turn off blight\n");
- gpio_set_value(GPIO_PORT_B, GPIO_Pin_12, 0);
- }
- return 0;
- }
- MSH_CMD_EXPORT(bl, black light);
- #endif //RT_USING_ILI9341
|