Advertisement
Guest User

HX8369A_RGB_18bit_Initial

a guest
Jul 25th, 2014
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.02 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <getopt.h>
  6. #include <fcntl.h>
  7. #include <sys/ioctl.h>
  8. #include <linux/types.h>
  9.  
  10. static int reset_fd;
  11. static const char *reset = "/sys/class/gpio/gpio7/value";
  12.  
  13. static int cs_fd;
  14. static const char *cs = "/sys/class/gpio/gpio105/value";
  15.  
  16. static int sdi_fd;
  17. static const char *sdi = "/sys/class/gpio/gpio104/value";
  18.  
  19. static int clk_fd;
  20. static const char *clk = "/sys/class/gpio/gpio102/value";
  21.  
  22.  
  23. static void pabort(const char *s)
  24. {
  25. perror(s);
  26. abort();
  27. }
  28.  
  29. /*
  30. void LCD_Enter Standby_HX8369A(void)
  31. {
  32. SPI_WriteComm(0x0028); // Display off
  33. SPI_WriteComm(0x0010); // Enter Standby mode
  34. }
  35.  
  36. void LCD_Exit Standby _HX8369A(void)
  37. {
  38. SPI_WriteComm(0x11); // Standby out
  39. Delay(60);
  40. SPI_WriteComm(0x29); // Display on
  41. }
  42.  
  43. */
  44.  
  45. void SPI_WriteComm(unsigned char i)
  46. {
  47.  
  48. unsigned char n;
  49. write(cs_fd,"0",1);
  50. write(sdi_fd,"0",1);
  51. write(clk_fd,"0",1);
  52. write(clk_fd,"1",1);
  53.  
  54. for(n=0; n<8; n++)
  55. {
  56. if(i&0x80) write(sdi_fd,"1",1);
  57. else write(sdi_fd,"0",1);
  58. i<<= 1;
  59. write(clk_fd,"0",1);
  60. write(clk_fd,"1",1);
  61. }
  62.  
  63. write(cs_fd,"1",1);
  64. }
  65.  
  66. void SPI_WriteData(unsigned char i)
  67. {
  68. unsigned char n;
  69. write(cs_fd,"0",1);
  70. write(sdi_fd,"1",1);
  71. write(clk_fd,"0",1);
  72. write(clk_fd,"1",1);
  73.  
  74. for(n=0; n<8; n++)
  75. {
  76. if(i&0x80) write(sdi_fd,"1",1);
  77. else write(sdi_fd,"0",1);
  78. i<<= 1;
  79. write(clk_fd,"0",1);
  80. write(clk_fd,"1",1);
  81. }
  82.  
  83. write(cs_fd,"1",1);
  84. }
  85.  
  86. int main(int argc, char *argv[])
  87. {
  88. unsigned char i;
  89. int ret = 0;
  90.  
  91. // Open the pin files
  92. reset_fd = open(reset,O_RDWR);
  93. if (reset_fd < 0)
  94. pabort("lcd reset pin unavailable");
  95.  
  96. cs_fd = open(cs,O_RDWR);
  97. if (cs_fd < 0)
  98. pabort("lcd cs pin unavailable");
  99.  
  100. sdi_fd = open(sdi,O_RDWR);
  101. if (sdi_fd < 0)
  102. pabort("lcd sdi pin unavailable");
  103.  
  104. clk_fd = open(clk,O_RDWR);
  105. if (clk_fd < 0)
  106. pabort("lcd reset pin unavailable");
  107.  
  108. // VCI=2.8V -- Actually 3.3 on our setup
  109.  
  110. //************* Reset LCD Driver ****************//
  111. write(reset_fd,"1",1);
  112. usleep(1000); // Delay 1ms
  113. write(reset_fd,"0",1);
  114. usleep(10000); // Delay 10ms // This delay time is necessary
  115. write(reset_fd,"1",1);
  116. usleep(120000); // Delay 120 ms
  117.  
  118. //************* Start Initial Sequence **********//
  119. SPI_WriteComm(0xB9); //Set_EXTC
  120. SPI_WriteData(0xFF);
  121. SPI_WriteData(0x83);
  122. SPI_WriteData(0x69);
  123.  
  124. SPI_WriteComm(0xB1); //Set Power
  125. SPI_WriteData(0x01);
  126. SPI_WriteData(0x00);
  127. SPI_WriteData(0x34);
  128. SPI_WriteData(0x06);
  129. SPI_WriteData(0x00);
  130. SPI_WriteData(0x0F);
  131. SPI_WriteData(0x0F);
  132. SPI_WriteData(0x2A);
  133. SPI_WriteData(0x32);
  134. SPI_WriteData(0x3F);
  135. SPI_WriteData(0x3F);
  136. SPI_WriteData(0x07);
  137. SPI_WriteData(0x23);
  138. SPI_WriteData(0x01);
  139. SPI_WriteData(0xE6);
  140. SPI_WriteData(0xE6);
  141. SPI_WriteData(0xE6);
  142. SPI_WriteData(0xE6);
  143. SPI_WriteData(0xE6);
  144.  
  145. SPI_WriteComm(0xB2); // SET Display 480x800
  146. SPI_WriteData(0x00);
  147. SPI_WriteData(0x2B);
  148. SPI_WriteData(0x0A); // back porch
  149. SPI_WriteData(0x0A); // front porch
  150. SPI_WriteData(0x70);
  151. SPI_WriteData(0x00);
  152. SPI_WriteData(0xFF);
  153. SPI_WriteData(0x00);
  154. SPI_WriteData(0x00);
  155. SPI_WriteData(0x00);
  156. SPI_WriteData(0x00);
  157. SPI_WriteData(0x03);
  158. SPI_WriteData(0x03);
  159. SPI_WriteData(0x00);
  160. SPI_WriteData(0x01);
  161.  
  162. SPI_WriteComm(0xB4); // SET Display 480x800
  163. SPI_WriteData(0x01);
  164. SPI_WriteData(0x18);
  165.  
  166. SPI_WriteData(0x80);
  167. SPI_WriteData(0x10);
  168. SPI_WriteData(0x01);
  169.  
  170.  
  171. SPI_WriteComm(0xB6); // SET VCOM
  172. SPI_WriteData(0x2C); // -1.296 V
  173. SPI_WriteData(0x2C); // -1.296 V
  174.  
  175. SPI_WriteComm(0xD5); //SET GIP
  176. SPI_WriteData(0x00);
  177. SPI_WriteData(0x05);
  178. SPI_WriteData(0x03);
  179. SPI_WriteData(0x00);
  180. SPI_WriteData(0x01);
  181. SPI_WriteData(0x09);
  182. SPI_WriteData(0x10);
  183. SPI_WriteData(0x80);
  184. SPI_WriteData(0x37);
  185. SPI_WriteData(0x37);
  186. SPI_WriteData(0x20);
  187. SPI_WriteData(0x31);
  188. SPI_WriteData(0x46);
  189. SPI_WriteData(0x8A);
  190. SPI_WriteData(0x57);
  191. SPI_WriteData(0x9B);
  192. SPI_WriteData(0x20);
  193. SPI_WriteData(0x31);
  194. SPI_WriteData(0x46);
  195. SPI_WriteData(0x8A);
  196. SPI_WriteData(0x57);
  197. SPI_WriteData(0x9B);
  198. SPI_WriteData(0x07);
  199. SPI_WriteData(0x0F);
  200. SPI_WriteData(0x02);
  201. SPI_WriteData(0x00);
  202.  
  203. SPI_WriteComm(0xE0); //SET GAMMA
  204. SPI_WriteData(0x00);
  205. SPI_WriteData(0x08);
  206. SPI_WriteData(0x0D);
  207. SPI_WriteData(0x2D);
  208. SPI_WriteData(0x34);
  209. SPI_WriteData(0x3F);
  210. SPI_WriteData(0x19);
  211. SPI_WriteData(0x38);
  212. SPI_WriteData(0x09);
  213. SPI_WriteData(0x0E);
  214. SPI_WriteData(0x0E);
  215. SPI_WriteData(0x12);
  216. SPI_WriteData(0x14);
  217. SPI_WriteData(0x12);
  218. SPI_WriteData(0x14);
  219. SPI_WriteData(0x13);
  220. SPI_WriteData(0x19);
  221. SPI_WriteData(0x00);
  222. SPI_WriteData(0x08);
  223. SPI_WriteData(0x0D);
  224. SPI_WriteData(0x2D);
  225. SPI_WriteData(0x34);
  226. SPI_WriteData(0x3F);
  227. SPI_WriteData(0x19);
  228. SPI_WriteData(0x38);
  229. SPI_WriteData(0x09);
  230. SPI_WriteData(0x0E);
  231. SPI_WriteData(0x0E);
  232. SPI_WriteData(0x12);
  233. SPI_WriteData(0x14);
  234. SPI_WriteData(0x12);
  235. SPI_WriteData(0x14);
  236. SPI_WriteData(0x13);
  237. SPI_WriteData(0x19);
  238.  
  239. SPI_WriteComm(0xC1); //set DGC
  240. SPI_WriteData(0x01); //enable DGC function
  241. SPI_WriteData(0x02); //SET R-GAMMA
  242. SPI_WriteData(0x08);
  243. SPI_WriteData(0x12);
  244. SPI_WriteData(0x1A);
  245. SPI_WriteData(0x22);
  246. SPI_WriteData(0x2A);
  247. SPI_WriteData(0x31);
  248. SPI_WriteData(0x36);
  249. SPI_WriteData(0x3F);
  250. SPI_WriteData(0x48);
  251. SPI_WriteData(0x51);
  252. SPI_WriteData(0x58);
  253. SPI_WriteData(0x60);
  254. SPI_WriteData(0x68);
  255. SPI_WriteData(0x70);
  256. SPI_WriteData(0x78);
  257. SPI_WriteData(0x80);
  258. SPI_WriteData(0x88);
  259. SPI_WriteData(0x90);
  260. SPI_WriteData(0x98);
  261. SPI_WriteData(0xA0);
  262. SPI_WriteData(0xA7);
  263. SPI_WriteData(0xAF);
  264. SPI_WriteData(0xB6);
  265. SPI_WriteData(0xBE);
  266. SPI_WriteData(0xC7);
  267. SPI_WriteData(0xCE);
  268. SPI_WriteData(0xD6);
  269. SPI_WriteData(0xDE);
  270. SPI_WriteData(0xE6);
  271. SPI_WriteData(0xEF);
  272. SPI_WriteData(0xF5);
  273. SPI_WriteData(0xFB);
  274. SPI_WriteData(0xFC);
  275. SPI_WriteData(0xFE);
  276. SPI_WriteData(0x8C);
  277. SPI_WriteData(0xA4);
  278. SPI_WriteData(0x19);
  279. SPI_WriteData(0xEC);
  280. SPI_WriteData(0x1B);
  281. SPI_WriteData(0x4C);
  282. SPI_WriteData(0x40);
  283.  
  284. SPI_WriteData(0x02); //SET G-Gamma
  285. SPI_WriteData(0x08);
  286. SPI_WriteData(0x12);
  287. SPI_WriteData(0x1A);
  288. SPI_WriteData(0x22);
  289. SPI_WriteData(0x2A);
  290. SPI_WriteData(0x31);
  291. SPI_WriteData(0x36);
  292. SPI_WriteData(0x3F);
  293. SPI_WriteData(0x48);
  294. SPI_WriteData(0x51);
  295. SPI_WriteData(0x58);
  296. SPI_WriteData(0x60);
  297. SPI_WriteData(0x68);
  298. SPI_WriteData(0x70);
  299. SPI_WriteData(0x78);
  300. SPI_WriteData(0x80);
  301. SPI_WriteData(0x88);
  302. SPI_WriteData(0x90);
  303. SPI_WriteData(0x98);
  304. SPI_WriteData(0xA0);
  305. SPI_WriteData(0xA7);
  306. SPI_WriteData(0xAF);
  307. SPI_WriteData(0xB6);
  308. SPI_WriteData(0xBE);
  309. SPI_WriteData(0xC7);
  310. SPI_WriteData(0xCE);
  311. SPI_WriteData(0xD6);
  312. SPI_WriteData(0xDE);
  313. SPI_WriteData(0xE6);
  314. SPI_WriteData(0xEF);
  315. SPI_WriteData(0xF5);
  316. SPI_WriteData(0xFB);
  317. SPI_WriteData(0xFC);
  318. SPI_WriteData(0xFE);
  319. SPI_WriteData(0x8C);
  320. SPI_WriteData(0xA4);
  321. SPI_WriteData(0x19);
  322. SPI_WriteData(0xEC);
  323. SPI_WriteData(0x1B);
  324. SPI_WriteData(0x4C);
  325. SPI_WriteData(0x40);
  326. SPI_WriteData(0x02); //SET B-Gamma
  327. SPI_WriteData(0x08);
  328. SPI_WriteData(0x12);
  329. SPI_WriteData(0x1A);
  330. SPI_WriteData(0x22);
  331. SPI_WriteData(0x2A);
  332. SPI_WriteData(0x31);
  333. SPI_WriteData(0x36);
  334. SPI_WriteData(0x3F);
  335. SPI_WriteData(0x48);
  336. SPI_WriteData(0x51);
  337. SPI_WriteData(0x58);
  338. SPI_WriteData(0x60);
  339. SPI_WriteData(0x68);
  340. SPI_WriteData(0x70);
  341. SPI_WriteData(0x78);
  342. SPI_WriteData(0x80);
  343. SPI_WriteData(0x88);
  344. SPI_WriteData(0x90);
  345. SPI_WriteData(0x98);
  346. SPI_WriteData(0xA0);
  347. SPI_WriteData(0xA7);
  348. SPI_WriteData(0xAF);
  349. SPI_WriteData(0xB6);
  350. SPI_WriteData(0xBE);
  351. SPI_WriteData(0xC7);
  352. SPI_WriteData(0xCE);
  353. SPI_WriteData(0xD6);
  354. SPI_WriteData(0xDE);
  355. SPI_WriteData(0xE6);
  356. SPI_WriteData(0xEF);
  357. SPI_WriteData(0xF5);
  358. SPI_WriteData(0xFB);
  359. SPI_WriteData(0xFC);
  360. SPI_WriteData(0xFE);
  361. SPI_WriteData(0x8C);
  362. SPI_WriteData(0xA4);
  363. SPI_WriteData(0x19);
  364. SPI_WriteData(0xEC);
  365. SPI_WriteData(0x1B);
  366. SPI_WriteData(0x4C);
  367. SPI_WriteData(0x40);
  368.  
  369. SPI_WriteComm(0x36); //Set_address_mode
  370. SPI_WriteData(0x20);
  371.  
  372. SPI_WriteComm(0x3A); //Set_pixel_format
  373. SPI_WriteData(0x66); //18 Bit
  374.  
  375. //Set_LUT
  376. SPI_WriteComm(0x2D);
  377. for (i=0; i<=63; i++)
  378. SPI_WriteData(i*4); //Set_R_LUT
  379. for (i=0; i<=63; i++)
  380. SPI_WriteData(i*4); //Set_G_LUT
  381. for (i=0; i<=63; i++)
  382. SPI_WriteData(i*4); //Set_B_LUT
  383.  
  384. SPI_WriteComm(0x11); //Sleep Out
  385.  
  386. usleep(120000);
  387.  
  388. SPI_WriteComm(0x29); //Display On
  389.  
  390. SPI_WriteComm(0x2C); //display on
  391.  
  392. // Close all the pin files
  393. close(reset_fd);
  394. close(cs_fd);
  395. close(sdi_fd);
  396. close(clk_fd);
  397.  
  398. return ret;
  399.  
  400. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement