1 #ifndef __SWM341_DMA2D_H__ 2 #define __SWM341_DMA2D_H__ 3 4 #include <stdint.h> 5 6 7 typedef struct { 8 uint16_t Interval; // 每传输一块数据(64个字),等待指定个系统周期后再传输下一个块,防止DMA2D占用过多SDRAM带宽,影响LCD读取显示数据;取值1--1023 9 uint8_t IntEOTEn; // End of Transter(传输完成)中断使能 10 } DMA2D_InitStructure; 11 12 13 typedef struct { 14 uint32_t Address; 15 uint32_t LineOffset; // added at the end of each line to determine the starting address of the next line 16 uint8_t ColorMode; // DMA2D_FMT_ARGB888、DMA2D_FMT_RGB888、DMA2D_FMT_RGB565、... 17 uint8_t AlphaMode; // DMA2D_AMODE_PIXEL、DMA2D_AMODE_ALPHA、DMA2D_AMODE_PMULA、... 18 uint8_t Alpha; 19 20 /* 只有输出层需要设置这两个域,前景层和背景层不需设置 */ 21 uint16_t LineCount; // 显示数据行数 22 uint16_t LinePixel; // 每行像素个数 23 } DMA2D_LayerSetting; 24 25 26 #define DMA2D_LAYER_FG 0 // Foreground layer 27 #define DMA2D_LAYER_BG 1 // Background layer 28 #define DMA2D_LAYER_OUT 2 // Output layer 29 30 /* Color Format */ 31 #define DMA2D_FMT_ARGB888 (0 | (0 << 4)) 32 #define DMA2D_FMT_RGB888 (1 | (0 << 4)) 33 #define DMA2D_FMT_RGB565 (2 | (0 << 4)) 34 #define DMA2D_FMT_ABGR888 (0 | (1 << 4)) 35 #define DMA2D_FMT_BGR888 (1 | (1 << 4)) 36 #define DMA2D_FMT_BGR565 (2 | (1 << 4)) 37 38 /* Alpha Mode */ 39 #define DMA2D_AMODE_PIXEL (0 | (0 << 5)) // 使用像素点自带Alpha值 40 #define DMA2D_AMODE_ALPHA (0 | (1 << 5)) // 使用软件指定的Alpha值 41 #define DMA2D_AMODE_PMULA (0 | (2 << 5)) // 使用像素点自带Alpha值与软件指定的Alpha值的乘积 42 43 44 void DMA2D_Init(DMA2D_InitStructure * initStruct); 45 void DMA2D_PixelFill(DMA2D_LayerSetting * outLayer, uint32_t color); 46 void DMA2D_PixelMove(DMA2D_LayerSetting * fgLayer, DMA2D_LayerSetting * outLayer); 47 void DMA2D_PixelConvert(DMA2D_LayerSetting * fgLayer, DMA2D_LayerSetting * outLayer); 48 void DMA2D_PixelBlend(DMA2D_LayerSetting * fgLayer, DMA2D_LayerSetting * bgLayer, DMA2D_LayerSetting * outLayer); 49 uint32_t DMA2D_IsBusy(void); 50 51 void DMA2D_INTEn(void); 52 void DMA2D_INTDis(void); 53 void DMA2D_INTClr(void); 54 uint32_t DMA2D_INTStat(void); 55 56 57 #endif // __SWM341_DMA2D_H__ 58