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