drv_slcd_ili9341.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /*
  2. * File : drv_slcdc_ili9341.c
  3. * This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2008 - 2016, RT-Thread Development Team
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program; if not, write to the Free Software Foundation, Inc.,
  18. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  19. *
  20. * Change Logs:
  21. * Date Author Notes
  22. * 2016-08-12 fujie The first version
  23. */
  24. #include <string.h>
  25. #include <rthw.h>
  26. #include <rtthread.h>
  27. #include <rtdevice.h>
  28. #include "board.h"
  29. #include "drv_gpio.h"
  30. #include "drv_slcdc.h"
  31. #include "drv_clock.h"
  32. #if defined(RT_USING_ILI9341)
  33. rt_uint32_t _ili9341_cmd_table[]=
  34. {
  35. 0x2c2c2c2c,
  36. };
  37. const struct slcd_data_table _ili9341_data_table[] =
  38. {
  39. {SMART_CONFIG_CMD, 0x11},
  40. {SMART_CONFIG_UDELAY, 1200},
  41. {SMART_CONFIG_CMD, 0xCF}, //Power control B 功耗控制B 【3参数】
  42. {SMART_CONFIG_DATA, 0x00},
  43. {SMART_CONFIG_DATA, 0xAA},
  44. {SMART_CONFIG_DATA, 0XB0},
  45. {SMART_CONFIG_CMD, 0xED}, //Power on sequence control 电源时序控制B 【4参数】
  46. {SMART_CONFIG_DATA, 0x64},
  47. {SMART_CONFIG_DATA, 0x03},
  48. {SMART_CONFIG_DATA, 0X12},
  49. {SMART_CONFIG_DATA, 0X81},
  50. {SMART_CONFIG_CMD, 0xE8}, //Driver timing control A
  51. {SMART_CONFIG_DATA, 0x85},
  52. {SMART_CONFIG_DATA, 0x00},
  53. {SMART_CONFIG_DATA, 0x78},
  54. {SMART_CONFIG_CMD, 0xCB}, //Power control A
  55. {SMART_CONFIG_DATA, 0x39},
  56. {SMART_CONFIG_DATA, 0x2C},
  57. {SMART_CONFIG_DATA, 0x00},
  58. {SMART_CONFIG_DATA, 0x34},
  59. {SMART_CONFIG_DATA, 0x02},
  60. {SMART_CONFIG_CMD, 0xF7}, //Pump ratio control
  61. {SMART_CONFIG_DATA, 0x20},
  62. {SMART_CONFIG_CMD, 0xEA}, // Driver timing control B
  63. {SMART_CONFIG_DATA, 0x00},
  64. {SMART_CONFIG_DATA, 0x00},
  65. {SMART_CONFIG_CMD, 0xb6}, //Display Function Control
  66. {SMART_CONFIG_DATA, 0x0a},
  67. {SMART_CONFIG_DATA, 0xa2},
  68. {SMART_CONFIG_CMD, 0xC0}, //Power control
  69. {SMART_CONFIG_DATA, 0x26}, //VRH[5:0]
  70. {SMART_CONFIG_CMD, 0xC1}, //Power control
  71. {SMART_CONFIG_DATA, 0x11}, //SAP[2:0];BT[3:0]
  72. {SMART_CONFIG_CMD, 0xC5}, //VCM control
  73. {SMART_CONFIG_DATA, 0x31}, //对比度调节 0x31
  74. {SMART_CONFIG_DATA, 0x3C},
  75. {SMART_CONFIG_CMD, 0xC7}, //VCM control2
  76. {SMART_CONFIG_DATA, 0xd3},
  77. {SMART_CONFIG_CMD, 0x36}, // Memory Access Control
  78. {SMART_CONFIG_DATA, 0x68}, // ●定义帧存储器的读写扫描方向 //[竖屏]0x48 0x88 [横屏]0x28 0xE8 0x68 //0x08
  79. {SMART_CONFIG_CMD, 0x3A}, //COLMOD: Pixel Format Set
  80. {SMART_CONFIG_DATA, 0x55},
  81. {SMART_CONFIG_CMD, 0xB1}, //VCM control
  82. {SMART_CONFIG_DATA, 0x00},
  83. {SMART_CONFIG_DATA, 0x14},
  84. {SMART_CONFIG_CMD, 0xF2}, // 3Gamma Function Disable
  85. {SMART_CONFIG_DATA, 0x00},
  86. {SMART_CONFIG_CMD, 0x26}, //Gamma curve selected
  87. {SMART_CONFIG_DATA, 0x01},
  88. {SMART_CONFIG_CMD, 0xE0}, //Set Gamma
  89. {SMART_CONFIG_DATA, 0x0F},
  90. {SMART_CONFIG_DATA, 0x1d},
  91. {SMART_CONFIG_DATA, 0x1a},
  92. {SMART_CONFIG_DATA, 0x09},
  93. {SMART_CONFIG_DATA, 0x0f},
  94. {SMART_CONFIG_DATA, 0x09},
  95. {SMART_CONFIG_DATA, 0x46},
  96. {SMART_CONFIG_DATA, 0x88},
  97. {SMART_CONFIG_DATA, 0x39},
  98. {SMART_CONFIG_DATA, 0x05},
  99. {SMART_CONFIG_DATA, 0x0f},
  100. {SMART_CONFIG_DATA, 0x03},
  101. {SMART_CONFIG_DATA, 0x07},
  102. {SMART_CONFIG_DATA, 0x05},
  103. {SMART_CONFIG_DATA, 0x00},
  104. {SMART_CONFIG_CMD, 0XE1}, //Set Gamma
  105. {SMART_CONFIG_DATA, 0x00},
  106. {SMART_CONFIG_DATA, 0x22},
  107. {SMART_CONFIG_DATA, 0x25},
  108. {SMART_CONFIG_DATA, 0x06},
  109. {SMART_CONFIG_DATA, 0x10},
  110. {SMART_CONFIG_DATA, 0x06},
  111. {SMART_CONFIG_DATA, 0x39},
  112. {SMART_CONFIG_DATA, 0x22},
  113. {SMART_CONFIG_DATA, 0x4a},
  114. {SMART_CONFIG_DATA, 0x0a},
  115. {SMART_CONFIG_DATA, 0x10},
  116. {SMART_CONFIG_DATA, 0x0C},
  117. {SMART_CONFIG_DATA, 0x38},
  118. {SMART_CONFIG_DATA, 0x3a},
  119. {SMART_CONFIG_DATA, 0x0F},
  120. {SMART_CONFIG_UDELAY, 5},
  121. {SMART_CONFIG_CMD, 0x11}, //Exit Sleep
  122. {SMART_CONFIG_UDELAY, 12},
  123. {SMART_CONFIG_CMD, 0x29}, //Display
  124. // Write the display data into GRAM here
  125. {SMART_CONFIG_CMD, 0x2A},
  126. {SMART_CONFIG_DATA, 0x00},
  127. {SMART_CONFIG_DATA, 0x00},
  128. {SMART_CONFIG_DATA, 0x00},
  129. {SMART_CONFIG_DATA, 0xEF},
  130. {SMART_CONFIG_CMD, 0x2B},
  131. {SMART_CONFIG_DATA, 0x00},
  132. {SMART_CONFIG_DATA, 0x00},
  133. {SMART_CONFIG_DATA, 0x01},
  134. {SMART_CONFIG_DATA, 0x3F},
  135. // {SMART_CONFIG_CMD, 0x2C}, //GRAM start writing
  136. /* set window */
  137. {SMART_CONFIG_CMD, 0x2a},
  138. {SMART_CONFIG_DATA, 0>>8},
  139. {SMART_CONFIG_DATA, 0&0xFF},
  140. {SMART_CONFIG_DATA, 320>>8},
  141. {SMART_CONFIG_DATA, 320&0xFF},
  142. {SMART_CONFIG_CMD, 0x2b},
  143. {SMART_CONFIG_DATA, 0>>8},
  144. {SMART_CONFIG_DATA, 0&0xFF},
  145. {SMART_CONFIG_DATA, 240>>8},
  146. {SMART_CONFIG_DATA, 240&0xFF},
  147. {SMART_CONFIG_CMD, 0X2C}, //GRAM start writing
  148. };
  149. const struct slcd_configure _ili9341_config =
  150. {
  151. .reg_write_twice = 0,
  152. .rsply_cmd_high = 0,
  153. .csply_active_high = 0,
  154. /* write graphic ram command, in word, for example 8-bit bus, write_gram_cmd=C3C2C1C0. */
  155. .newcfg_fmt_conv = 1,
  156. .width = 320,
  157. .height = 240,
  158. .bpp = 16,
  159. .bus_width = 8,
  160. .data_table_num = sizeof(_ili9341_data_table)/sizeof(_ili9341_data_table[0]),
  161. .data_table = &_ili9341_data_table[0],
  162. .cmd_table = &_ili9341_cmd_table[0],
  163. .cmd_table_num = sizeof(_ili9341_cmd_table)/sizeof(_ili9341_cmd_table[0]),
  164. };
  165. void ili9341_bl_set(rt_bool_t isPwrON)
  166. {
  167. if(isPwrON)
  168. gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 1);
  169. else
  170. gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 0);
  171. }
  172. int ili9341_init(void)
  173. {
  174. /* enable backlight */
  175. gpio_set_func(GPIO_PORT_B, GPIO_Pin_12, GPIO_OUTPUT0); //LCD Light
  176. /* Reset LCD Driver */
  177. gpio_set_func(GPIO_PORT_B, GPIO_Pin_10, GPIO_OUTPUT0);
  178. rt_thread_delay(20);
  179. gpio_set_value(GPIO_PORT_B, GPIO_Pin_10, 1);
  180. rt_thread_delay(20);
  181. rt_hw_slcd_init((struct slcd_configure *)&_ili9341_config);
  182. // rt_hw_lcd_set_bl_func(ili9341_bl_set);
  183. return 0;
  184. }
  185. #include <finsh.h>
  186. int bl(int argc, char** argv)
  187. {
  188. int enable = 0;
  189. if (argc != 2) return 0;
  190. enable = atoi(argv[1]);
  191. if (enable)
  192. {
  193. rt_kprintf("turn on blight\n");
  194. gpio_set_value(GPIO_PORT_B, GPIO_Pin_12, 1);
  195. }
  196. else
  197. {
  198. rt_kprintf("turn off blight\n");
  199. gpio_set_value(GPIO_PORT_B, GPIO_Pin_12, 0);
  200. }
  201. return 0;
  202. }
  203. MSH_CMD_EXPORT(bl, black light);
  204. #endif //RT_USING_ILI9341