gd_vo_i80.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. /*!
  2. *******************************************************************************
  3. **
  4. ** \file gd_i80.h
  5. **
  6. ** \brief I80
  7. **
  8. ** Copyright: 2012 - 2015 (C) GoKe Microelectronics Chengdu Branch
  9. **
  10. ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
  11. ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
  12. ** OMMISSIONS.
  13. **
  14. ** \note
  15. **
  16. ******************************************************************************/
  17. #ifndef _GD_VO_I80_H_
  18. #define _GD_VO_I80_H_
  19. #include <gtypes.h>
  20. #include "gmodids.h"
  21. #include "gd_int.h"
  22. #include "gd_uart.h"
  23. #define DEAD_LOOP_CHECK
  24. #define I80_DESIGN_REF_CLK_FREQ 200//MHz GK7101S-->200MHz GK8601-->300MHz
  25. #define I80_CLK_FREQ 100//MHz GK7101S: FPGA-->100MHz IC-->200MHz
  26. //#define I80_CLK_PERIOD (1000/I80_CLK_FREQ)// 5ns/Cycle
  27. #define TIMING_PARA_CEIL_NS(x) (((x)*I80_CLK_FREQ+999)/1000)
  28. #define I80_1ST_H_L_COUNTER (10*I80_DESIGN_REF_CLK_FREQ)
  29. #define I80_2ND_H_COUNTER (100*I80_DESIGN_REF_CLK_FREQ)
  30. #define I80_HW_DELAY_COUNTER (100*I80_DESIGN_REF_CLK_FREQ)
  31. //#define I80_RST_1ST_UNIT (I80_1ST_H_L_COUNTER/I80_CLK_FREQ)//us 10
  32. //#define I80_RST_2ND_UNIT (I80_2ND_H_COUNTER/I80_CLK_FREQ)//us 100
  33. #define TIMING_PARA_FIRST_H_CEIL_MS(x) ((1000*I80_CLK_FREQ*(x)+I80_1ST_H_L_COUNTER-1)/I80_1ST_H_L_COUNTER)
  34. #define TIMING_PARA_FIRST_L_CEIL_MS(x) ((1000*I80_CLK_FREQ*(x)+I80_1ST_H_L_COUNTER-1)/I80_1ST_H_L_COUNTER)
  35. #define TIMING_PARA_SECOND_H_CEIL_MS(x) ((1000*I80_CLK_FREQ*(x)+I80_2ND_H_COUNTER-1)/I80_2ND_H_COUNTER)
  36. #define TIMING_PARA_HW_DELAY_CEIL_MS(x) ((1000*I80_CLK_FREQ*(x)+I80_HW_DELAY_COUNTER-1)/I80_HW_DELAY_COUNTER)
  37. //#define I80_CLK_10US_CYCLE (10*I80_CLK_FREQ)//2000 //(10000/(1000/200))cycles
  38. //#define I80_CLK_100US_CYCLE (100*I80_CLK_FREQ)//20000 //(100000/(1000/200))cycles
  39. //#define TIMING_PARA_FIRST_H_CEIL_MS(x) (((x)*1000*I80_CLK_FREQ+I80_CLK_10US_CYCLE-1)/I80_CLK_10US_CYCLE)//1ms*(200/2000*(10^6)
  40. //#define TIMING_PARA_FIRST_L_CEIL_MS(x) (((x)*1000*I80_CLK_FREQ+I80_CLK_10US_CYCLE-1)/I80_CLK_10US_CYCLE)
  41. //#define TIMING_PARA_SECOND_H_CEIL_MS(x) (((x)*1000*I80_CLK_FREQ+I80_CLK_100US_CYCLE-1)/I80_CLK_100US_CYCLE)
  42. #define I80READ 0
  43. #define I80WRITE 1
  44. #define I80COMMAND 0
  45. #define I80PARA 1
  46. #define LCD_WRITE_CMD(x) ((I80COMMAND<<17) | (I80WRITE<<16) | (x))
  47. #define LCD_WRITE_PARA(x) ((I80PARA<<17) | (I80WRITE<<16) | (x))
  48. #define LCD_READ_CMD(x) ((I80COMMAND<<17) | (I80WRITE<<16) | (x))
  49. #define LCD_READ_PARA ((I80PARA<<17) | (I80READ <<16) | (0))
  50. #define I80_DELAY_CMD ((I80COMMAND<<17) | (I80WRITE<<16) | (0xFFFF))//never conflict with the command of driver ic!!!!
  51. #define MAX_CMDPARA_NUM 128
  52. #define MAX_READINFO_NUM 10
  53. #define GD_VO_I80_ERR_BASE (26 << 16)//(GD_ETH_MODULE_ID << 16)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  54. //*****************************************************************************
  55. //*****************************************************************************
  56. //** Enumerated types
  57. //*****************************************************************************
  58. //*****************************************************************************
  59. enum
  60. {
  61. GD_ERR_I80_NOT_SUPPORTED = GD_VO_I80_ERR_BASE, //!< Device not supported.
  62. GD_ERR_I80_CMD_ERROR = GD_VO_I80_ERR_BASE+1,
  63. GD_ERR_I80_SRAM_OVER_FLOW = GD_VO_I80_ERR_BASE+2,
  64. GD_ERR_I80_FRAME_HEAD_ERROR = GD_VO_I80_ERR_BASE+4,
  65. GD_ERR_I80_CHECK_TIME_OUT = GD_VO_I80_ERR_BASE+8,
  66. };
  67. #define DCn_LOW_CMD (0<<5)
  68. #define DCn_HIGH_CMD (1<<5)
  69. #define CSn_RISING (0<<4)
  70. #define CSn_FALLING (1<<4)
  71. #define VSYNC_LOW (0<<3)
  72. #define VSYNC_HIGH (1<<3)
  73. #define LCDRST_LOW (0<<2)
  74. #define LCDRST_HIGH (1<<2)
  75. #define RD_RISING (0<<1)
  76. #define RD_FALLING (1<<1)
  77. #define WR_RISING (0<<0)
  78. #define WR_FALLING (1<<0)
  79. //typedef GD_INT_DATA_S* (*GD_I2S_ISR_T)(U8 channelIndex);
  80. typedef enum
  81. {
  82. GD_VO_I80_OFF=0, //!< disable.
  83. GD_VO_I80_ON=1, //!< enable.
  84. }GD_VO_I80_ONOFF_E;
  85. /*!
  86. *******************************************************************************
  87. **
  88. ** \brief I80 data width modes.
  89. **
  90. ** \sa GD_VO_I80_DATA_WIDTH_E
  91. **
  92. ******************************************************************************/
  93. typedef enum
  94. {
  95. GD_VO_I80_8BIT=0, //!< 8 BIT.
  96. GD_VO_I80_9BIT=1, //!< 9 BIT.
  97. GD_VO_I80_16BIT=2, //!< 16 BIT.
  98. GD_VO_I80_18BIT=3, //!< 18 BIT.
  99. GD_VO_I80_24BIT=4, //!< 24 BIT.
  100. }GD_VO_I80_DATA_WIDTH_E;
  101. /*!
  102. *******************************************************************************
  103. **
  104. ** \brief I2S operition modes.
  105. **
  106. ** \sa GD_VO_I80_COLOR_FORMAT_E
  107. **
  108. ******************************************************************************/
  109. typedef enum
  110. {
  111. GD_VO_I80_PIXEL_16BIT=0, //!< 16 BIT.
  112. GD_VO_I80_PIXEL_18BIT=1, //!< 18 BIT.
  113. GD_VO_I80_PIXEL_24BIT=2, //!< 24 BIT.
  114. GD_VO_I80_PIXEL_12BIT=3, //!< 12 BIT.
  115. }GD_VO_I80_COLOR_FORMAT_E;
  116. /*!
  117. *******************************************************************************
  118. **
  119. ** \brief I80 trans data format.
  120. **
  121. ** \sa GD_VO_I80_TRANS_FORMAT_E
  122. **
  123. ******************************************************************************/
  124. typedef enum
  125. {
  126. GD_VO_I80_18BIT_TWICE_1PIXEL = 0, //!< 1PIXEL/TWICE
  127. GD_VO_I80_18BIT_TRICE_2PIXEL = 1, //!< 2PIXEL/TRICE
  128. }GD_VO_I80_TRANS_FORMAT_E;
  129. /*!
  130. *******************************************************************************
  131. **
  132. ** \brief I80 command width.
  133. **
  134. ** \sa GD_VO_I80_CMD_WIDTH_E
  135. **
  136. ******************************************************************************/
  137. typedef enum
  138. {
  139. GD_VO_I80_CMD_8BIT =0 , //!< 8BIT.
  140. GD_VO_I80_CMD_16BIT =1 , //!< 16BIT.
  141. }GD_VO_I80_CMD_WIDTH_E;
  142. /*!
  143. *******************************************************************************
  144. **
  145. ** \brief I80 command endian.
  146. **
  147. ** \sa GD_VO_I80_CMD_ENDIAN_E
  148. **
  149. ******************************************************************************/
  150. typedef enum
  151. {
  152. GD_VO_I80_CMD_LITTLE_ENDIAN = 0 ,//!< low byte first.
  153. GD_VO_I80_CMD_BIG_ENDIAN =1 , //!< high byte first.
  154. }GD_VO_I80_CMD_ENDIAN_E;
  155. /*!
  156. *******************************************************************************
  157. **
  158. ** \brief the struct of picture resolution.
  159. **
  160. ** \sa GD_VO_I80_PIC_RESOLUTION_S
  161. **
  162. ******************************************************************************/
  163. typedef struct
  164. {
  165. U16 width;
  166. U16 height;
  167. }GD_VO_I80_PIC_RESOLUTION_S;
  168. typedef struct
  169. {
  170. U16 firstHTime;//11bits,10us/unit
  171. U16 firstLTime;//11bits,10us/unit
  172. U16 secondHTime;//11bits,100us/unit
  173. }GD_VO_I80_RST_TIMING_S;
  174. typedef struct
  175. {
  176. U16 twrh;//9bit
  177. U16 twrl;//9bit
  178. U16 trdh;//9bit
  179. U16 trdl;//9bit
  180. U8 csref;//0--wr/rd as reference 1--cs as reference
  181. U16 tas;//9bit
  182. U16 pwcsh_wt;//9bit when cs_ref=1
  183. U16 pwcsl_wt;//9bit when cs_ref=1
  184. U16 pwcsh_rd;//9bit when cs_ref=1
  185. U16 pwcsl_rd;//9bit when cs_ref=1
  186. U16 todh;//9bit
  187. }GD_VO_I80_TRANS_TIMING_S;
  188. typedef struct
  189. {
  190. U16 rdstatecmd;//read command--write to driver ic of lcd
  191. U8 rdnum;//state number including dummy
  192. U8 rddummynum;//dummy number
  193. U16 *plcdinfo;//array for lcd state, dummy state will not be put into plcdinfo
  194. }GD_VO_I80_READ_STATE_S;//only one read command
  195. typedef struct
  196. {
  197. // GBOOL bcmdwr;//1--include reading command
  198. // GBOOL bcmdrd;//1--include writing command
  199. U8 cmdparanum;//1--total number of command and parameter
  200. U8 rdnum;//state number including dummy
  201. U32 *plcdcmdpara;//array of command and parameter
  202. U16 *plcdinfo;//array of lcd state, dummy state will be put into plcdinfo
  203. }GD_VO_I80_TRANS_STATE_S;
  204. ///*!
  205. //*******************************************************************************
  206. //**
  207. //** I80 OPEN parameter.
  208. //**
  209. //******************************************************************************/
  210. typedef struct
  211. {
  212. /*!
  213. Flag to request DMA for read/write transfer operation.
  214. */
  215. // U32 using;
  216. GD_VO_I80_DATA_WIDTH_E datawidth;
  217. GD_VO_I80_COLOR_FORMAT_E colorformat;
  218. GD_VO_I80_TRANS_FORMAT_E datatransformat;
  219. U16 wrcmd;/*write pixel command*/
  220. U16 rdcmd;/*read pixel command*/
  221. GD_VO_I80_CMD_WIDTH_E cmdwidth;
  222. GD_VO_I80_CMD_ENDIAN_E cmdformat;
  223. U32 polarctrl;
  224. GD_VO_I80_PIC_RESOLUTION_S picresolution;
  225. GD_VO_I80_TRANS_TIMING_S transtiming;
  226. U32 isUseHWDelay;
  227. U16 delayms;
  228. U16 delaycmd;
  229. // GBOOL isCfgValidImmediately;
  230. } GD_VO_I80_OPEN_PARAMS_S;
  231. typedef struct
  232. {
  233. U32 using;
  234. GD_VO_I80_DATA_WIDTH_E datawidth;
  235. GD_VO_I80_COLOR_FORMAT_E colorformat;
  236. GD_VO_I80_TRANS_FORMAT_E datatransformat;
  237. U16 wrcmd;/*write command*/
  238. U16 rdcmd;/*read command*/
  239. GD_VO_I80_CMD_WIDTH_E cmdwidth;
  240. GD_VO_I80_CMD_ENDIAN_E cmdformat;
  241. U32 polarctrl;
  242. GD_VO_I80_PIC_RESOLUTION_S picresolution;
  243. GD_VO_I80_RST_TIMING_S rstlcmtiming;
  244. GD_VO_I80_TRANS_TIMING_S transtiming;
  245. U32 isUseHWDelay;
  246. U16 delayms;
  247. U16 delaycmd;
  248. GBOOL isCfgValidImmediately;
  249. // GD_HANDLE i80Handle; /* INT handle */
  250. // GD_I2S_ISR_T i2sIsrRx; /* ISR of the block */
  251. // GD_I2S_ISR_T i2sIsrTx; /* ISR of the block */
  252. } GD_VO_I80_STATE_MACHINE_S;
  253. #ifdef __cplusplus
  254. extern "C" {
  255. #endif
  256. GERR GD_VO_I80_Exit(void);
  257. GERR GD_VO_I80_Init(void);
  258. GERR GD_VO_I80_Open(GD_VO_I80_OPEN_PARAMS_S * openParamsP,GD_HANDLE * pHandle);
  259. GERR GD_VO_I80_Close(GD_HANDLE *pHandle);
  260. GERR GD_VO_I80_OnOff(GD_HANDLE *pHandle,GD_VO_I80_ONOFF_E onoff);
  261. GERR GD_VO_I80_SetTransWidth(GD_HANDLE* pHandle,GD_VO_I80_DATA_WIDTH_E data_width);
  262. GERR GD_VO_I80_SetPixelTransCmd(GD_HANDLE* pHandle, U16 pixelwrcmd,U16 pixelrdcmd);
  263. GERR GD_VO_I80_SetPixelBits(GD_HANDLE* pHandle,GD_VO_I80_COLOR_FORMAT_E color_format);
  264. GERR GD_VO_I80_SetMultiTransSeq(GD_HANDLE* pHandle,GD_VO_I80_TRANS_FORMAT_E datatransformat);
  265. GERR GD_VO_I80_SetPicResolution(GD_HANDLE* pHandle, GD_VO_I80_PIC_RESOLUTION_S picresolution);
  266. GERR GD_VO_I80_SetCmdFormat(GD_HANDLE* pHandle,GD_VO_I80_CMD_WIDTH_E cmdwidth,GD_VO_I80_CMD_ENDIAN_E cmdformat);
  267. GERR GD_VO_I80_SetTransTiming(GD_HANDLE* pHandle,GD_VO_I80_TRANS_TIMING_S *pTranstiming);
  268. GERR GD_VO_I80_SetCfgValidImmediately(GD_HANDLE* pHandle,GBOOL bValidimmediately);
  269. GERR GD_VO_I80_CfgInvalid(void);
  270. GERR GD_VO_I80_CfgValid(void);
  271. GERR GD_VO_I80_CmdParaInvalid(void);
  272. GERR GD_VO_I80_CmdParaValid(void);
  273. GERR GD_VO_I80_SetPolarCtrl(GD_HANDLE* pHandle, U32 polarctrl);
  274. GERR GD_VO_I80_HWResetLCM(GD_HANDLE* pHandle,GD_VO_I80_RST_TIMING_S *pRrstlcmtiming);
  275. GERR GD_VO_I80_DelayEnable(GD_HANDLE* pHandle,U16 delayms,U16 delaycmd);
  276. GERR GD_VO_I80_DelayDisable(GD_HANDLE* pHandle);
  277. GBOOL GD_VO_I80_CheckNoCmdParaTrans(void);
  278. GBOOL GD_VO_I80_CheckRdCmdParaReady(void);
  279. GBOOL GD_VO_I80_ClearRdCmdParaReady(void);
  280. GERR GD_VO_I80_CheckCmdErr(void);
  281. GERR GD_VO_I80_CheckSramOverFlowErr(void);
  282. GERR GD_VO_I80_CheckFramErr(void);
  283. U16 GD_VO_I80_GetLcdState(U8 indexreg);
  284. GERR GD_VO_I80_ReadLcdInfo(GD_HANDLE* pHandle,GD_VO_I80_READ_STATE_S *pLcdrdstate);
  285. //GERR GD_VO_I80_WriteCmdPara(GD_HANDLE * pHandle,U32 lcdcmdpara[],U8 cmdparanum);
  286. GERR GD_VO_I80_TransCmdPara(GD_HANDLE* pHandle,GD_VO_I80_TRANS_STATE_S *pLcdtransstate);
  287. GERR GD_VO_I80_EnterPixelWrite(GD_HANDLE* pHandle);
  288. GERR GD_VO_I80_EnterPixelReading(GD_HANDLE* pHandle);
  289. #ifdef __cplusplus
  290. }
  291. #endif
  292. #endif /* _GD_VO_I80_H_ */
  293. /*----------------------------------------------------------------------------*/
  294. /* end of file */
  295. /*----------------------------------------------------------------------------*/