1 #ifndef __SWM341_LCD_H__
2 #define __SWM341_LCD_H__
3 
4 
5 typedef struct {
6     uint8_t  ClkDiv;        //取值范围2--65
7     uint8_t  Format;        //LCD_FMT_RGB565、LCD_FMT_RGB888、LCD_FMT_SRGB565、LCD_FMT_SRGB888
8     uint16_t HnPixel;       //水平方向像素个数,最大取值1024
9     uint16_t VnPixel;       //垂直方向像素个数,最大取值1024
10     uint8_t  Hfp;           //horizonal front porch,最大取值64
11     uint16_t Hbp;           //horizonal back porch, 最大取值256
12     uint8_t  Vfp;           //vertical front porch, 最大取值64
13     uint16_t Vbp;           //vertical back porch,  最大取值256
14     uint16_t HsyncWidth;    //HSYNC低电平持续多少个DOTCLK,最大取值256
15     uint16_t VsyncWidth;    //VSYNC低电平持续多少个行时间,最大取值256
16 
17     uint32_t DataSource;    //显示数据地址
18     uint32_t Background;    //背景颜色
19     uint8_t  SampleEdge;    //屏幕在DOTCLK的哪个边沿采样数据:LCD_SAMPLE_RISE、LCD_SAMPLE_FALL
20 
21     uint8_t  IntEOTEn;      //End of Transter(传输完成)中断使能
22 } LCD_InitStructure;
23 
24 
25 typedef struct {
26     uint8_t  Alpha;
27     uint16_t HStart;        //水平方向起始位置,取值范围0 ~ HnPixel-1
28     uint16_t HStop;         //水平方向终止位置(包含),不得小于HStart,且 HStop - HStart 结果必须为奇数
29     uint16_t VStart;
30     uint16_t VStop;
31     uint32_t DataSource;    //显示数据地址
32 } LCD_LayerInitStructure;
33 
34 
35 #define LCD_FMT_RGB565  0
36 #define LCD_FMT_RGB888  1
37 #define LCD_FMT_SRGB565 2   //Serial RGB
38 #define LCD_FMT_SRGB888 3
39 
40 #define LCD_SAMPLE_RISE 0   //屏幕在DOTCLK的上升沿采样数据
41 #define LCD_SAMPLE_FALL 1   //屏幕在DOTCLK的下降沿采样数据
42 
43 #define LCD_LAYER_1     0
44 #define LCD_LAYER_2     1
45 
46 
47 void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct);
48 void LCD_LayerInit(LCD_TypeDef * LCDx, uint32_t layerx, LCD_LayerInitStructure * initStruct);
49 void LCD_SetLayerPos(LCD_TypeDef * LCDx, uint32_t layerx, uint16_t hstart, uint16_t hstop, uint16_t vstart, uint16_t vstop);
50 void LCD_Start(LCD_TypeDef * LCDx);
51 uint32_t LCD_IsBusy(LCD_TypeDef * LCDx);
52 
53 void LCD_INTEn(LCD_TypeDef * LCDx);
54 void LCD_INTDis(LCD_TypeDef * LCDx);
55 void LCD_INTClr(LCD_TypeDef * LCDx);
56 uint32_t LCD_INTStat(LCD_TypeDef * LCDx);
57 
58 
59 
60 typedef struct {
61     uint8_t  RDHoldTime;    //LCD_RD低电平保持时间,取值1--32
62     uint8_t  WRHoldTime;    //LCD_WR低电平保持时间,取值1--16
63     uint8_t  CSFall_WRFall; //LCD_CS下降沿到LCD_WR下降沿延时,取值1--4
64     uint8_t  WRRise_CSRise; //LCD_WR上升沿到LCD_CS上升沿延时,取值1--4
65     uint8_t  RDCSRise_Fall; //读操作时,LCD_CS上升沿到下降沿延时,取值1--32
66     uint8_t  WRCSRise_Fall; //写操作时,LCD_CS上升沿到下降沿延时,取值1--16
67 } MPULCD_InitStructure;
68 
69 
70 void MPULCD_Init(LCD_TypeDef * LCDx, MPULCD_InitStructure * initStruct);
71 
72 void LCD_WR_REG(LCD_TypeDef * LCDx, uint16_t reg);
73 void LCD_WR_DATA(LCD_TypeDef * LCDx, uint16_t val);
74 void LCD_WriteReg(LCD_TypeDef * LCDx, uint16_t reg, uint16_t val);
75 uint16_t LCD_ReadReg(LCD_TypeDef * LCDx, uint16_t reg);
76 
77 void MPULCD_DMAStart(LCD_TypeDef * LCDx, uint32_t * buff, uint16_t hpix, uint16_t vpix);
78 uint32_t MPULCD_DMABusy(LCD_TypeDef * LCDx);
79 
80 
81 #endif //__SWM341_LCD_H__
82