stm32 DMA2D知識點
LTDC會一直從視訊記憶體中搬運資料並重新整理資料到液晶屏, 所以我們只需要往視訊記憶體寫資料就可以了
1 什麼是DMA2D
下面資料來自安富萊BSP手冊
2 DMA2D工作模式
1 模式 1:暫存器到儲存器模式
這個模式主要用於清屏,也即是將螢幕清為單色效果
2 模式 2:儲存器到儲存器模式
這個模式用於從一個儲存器複製一塊資料到另一個儲存器,比如將攝像頭 OV7670 的輸出影像複製到
LCD 視訊記憶體就可以採用這種方式。
3 模式 3:儲存器到儲存器模式,帶顏色格式轉換
這個模式比模式 2 多了一個顏色格式轉換,比如我們要顯示一幅 RGB888 顏色格式的點陣圖到 RGB565
顏色格式的螢幕,就需要用到這個模式,只需輸入端配置為 RGB888,輸出端配置 RGB565 即可。
點陣圖顏色格式轉換後會顯示到螢幕上。
4 模式 4:儲存器到儲存器模式,帶顏色格式轉換和混合
這個模式比模式 3 多了一個混合操作,通過混合,可以將兩種效果進行混合顯示。
5 模式 5:儲存器到儲存器模式,帶顏色格式轉換和混合,前景色是固定的
同模式 4,只是前景色的顏色值是固定的。
1 暫存器到儲存器
這個模式主要用於清屏,也即是將螢幕清為單色效果
此函式主要用於 LCD 的顏色填充。
第 23 行,設定 DMA2D 採用暫存器往儲存器傳輸資料模式,即 DMA2D 將 OCOLR 暫存器設定顏色
值填充到儲存器裡面。
第 24 行,OCOLR 暫存器用於設定輸出顏色值,特別注意要跟第 27 行的輸出顏色格式匹配。比如設
置的是 RGB565,那麼設定的顏色值就要是 16 位色的。
第 25 行,設定輸出填充區的首地址。
第 26 行,設定輸出行偏移。
第 27 行,設定輸出顏色格式,如果是輸出到 LCD 視訊記憶體,那麼此格式要與 LCD 顏色格式一致,否則
顯示不正常。
第 28 行,高 16 位用於設定每行的畫素數,低 16 位用於設定行數,合併起來決定總傳輸次數。
第 31-34 行,啟動傳輸,並等待傳輸完成。
具體應用:
1 正點原子
//LTDC填充矩形,DMA2D填充
//(sx,sy),(ex,ey):填充矩形對角座標,區域大小為:(ex-sx+1)*(ey-sy+1)
//color:要填充的顏色
//有時候需要頻繁的呼叫填充函式,所以為了速度,填充函式採用暫存器版本,
//不過下面有對應的庫函式版本的程式碼。
void LTDC_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint32_t color)
{
uint32_t psx,psy,pex,pey; //以LCD皮膚為基準的座標系,不隨橫豎屏變化而變化
uint32_t timeout=0;
uint16_t offline;
uint32_t addr;
//座標系轉換
if(PIXELS_DIR) //橫屏
{
psx=sx;
psy=sy;
pex=ex;
pey=ey;
} else //豎屏
{
psx=sy;
psy=PIXELS_H-ex-1;
pex=ey;
pey=PIXELS_H-sx-1;
}
offline=PIXELS_W-(pex-psx+1);
addr=(LCD_FRAME_BUF_ADDR+PIXELS_BYTE*(PIXELS_W*psy+psx));
__HAL_RCC_DMA2D_CLK_ENABLE(); //使能DM2D時鐘
//DMA2D->CR&=~(DMA2D_CR_START); //先停止DMA2D
DMA2D->CR=DMA2D_R2M; //暫存器到儲存器模式
// 設定 DMA2D 採用暫存器往儲存器傳輸資料模式,即 DMA2D 將 OCOLR 暫存器設定顏色值填充到儲存器裡面。
DMA2D->OPFCCR=LTDC_PIXEL_FORMAT_RGB565; //設定顏色格式
DMA2D->OOR=offline; //設定行偏移
DMA2D->OMAR=addr; //輸出儲存器地址
DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16); //設定行數暫存器
DMA2D->OCOLR=color; //設定輸出顏色暫存器
DMA2D->CR|=DMA2D_CR_START; //啟動DMA2D
while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //等待傳輸完成
{
}
DMA2D->IFCR|=DMA2D_FLAG_TC; //清除傳輸完成標誌
}
2 安富萊
/*
*********************************************************************************************************
* 函 數 名: _DMA2D_Fill
* 功能說明: DMA2D顏色填充功能
* 形 參: pDst 顏色資料目的地址
* xSize 色塊X軸大小,即每行畫素數
* ySize 色塊Y軸大小,即行數
* OffLine 前景層影像的行偏移
* ColorIndex 色塊顏色值
* PixelFormat 目標區顏色格式
* 返 回 值: 無
*********************************************************************************************************
*/
static void _DMA2D_Fill(void * pDst,
uint32_t xSize,
uint32_t ySize,
uint32_t OffLine,
uint32_t ColorIndex,
uint32_t PixelFormat)
{
/* DMA2D採用暫存器到儲存器模式, 這種模式用不到前景層和背景層 */
DMA2D->CR = 0x00030000UL | (1 << 9);
DMA2D->OCOLR = ColorIndex;
DMA2D->OMAR = (uint32_t)pDst;
DMA2D->OOR = OffLine;
DMA2D->OPFCCR = PixelFormat;
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 啟動傳輸 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D傳輸完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
2 儲存器到儲存器模式
此函式用於從前景層複製指定區域的顏色資料到目標區域。
第 25 行,設定 DMA2D 採用儲存器往儲存器傳輸資料模式,輸入儲存器只能是前景層。即 DMA2D
將 FGMAR 暫存器所指向的儲存資料傳輸到暫存器 OMAR 所指向的儲存器。
第 26 行,設定前景層資料首地址。
第 27 行,設定輸出儲存器首地址。
第 28 行,設定前景層行偏移。
第 29 行,設定輸出區行偏移。
第 32-33 行,設定前景層和輸出區域都採用 RGB565 顏色格式。另外注意,如果是輸出到 LCD 視訊記憶體,
那麼輸出顏色格式要與 LCD 顏色格式一致,否則顯示不正常。
第 35 行,高 16 位用於設定每行的畫素數,低 16 位用於設定行數,合併起來決定總傳輸次數。
第 38-41 行,啟動傳輸,並等待傳輸完成。
注意事項:
1. 使用此函式前務必要呼叫函式__HAL_RCC_DMA2D_CLK_ENABLE 使能 DMA2D 時鐘。
1 正點原子
//矩形彩色填充函式
void LTDC_Color_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t *color)
{
uint32_t psx,psy,pex,pey; //以LCD皮膚為基準的座標系,不隨橫豎屏變化而變化
uint32_t timeout=0;
uint16_t offline;
uint32_t addr;
//座標系轉換
if(PIXELS_DIR) //橫屏
{
psx=sx;
psy=sy;
pex=ex;
pey=ey;
} else //豎屏
{
psx=sy;
psy=PIXELS_H-ex-1;
pex=ey;
pey=PIXELS_H-sx-1;
}
offline=PIXELS_W-(pex-psx+1);
addr=(LCD_FRAME_BUF_ADDR+PIXELS_BYTE*(PIXELS_W*psy+psx));
__HAL_RCC_DMA2D_CLK_ENABLE(); //使能DM2D時鐘
//DMA2D->CR&=~(DMA2D_CR_START); //先停止DMA2D
DMA2D->CR=DMA2D_M2M; //儲存器到儲存器模式
DMA2D->FGMAR=(uint32_t)color; //源地址
DMA2D->OMAR=addr; //輸出儲存器地址
DMA2D->FGOR=0; //前景層行偏移為0
DMA2D->OOR=offline; //設定行偏移
DMA2D->FGPFCCR=0X02; //設定顏色格式
DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16); //設定行數暫存器
DMA2D->CR|=DMA2D_CR_START; //啟動DMA2D
while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //等待傳輸完成
{
}
DMA2D->IFCR|=DMA2D_FLAG_TC; //清除傳輸完成標誌
}
2 安富萊
將大小 128*128,顏色格式為 RGB565 的點陣圖繪製到 LCD 起始座標為(328, 20)的區域,輸出顏色格
式也配置為 RGB565。
1. _DMA2D_Copy((uint32_t *)_acmickey, /* 點陣圖地址 */
2. (uint32_t *)(SDRAM_LCD_BUF1 + g_LcdWidth*20*2 + 328*2), /* 顯示起始地址(328, 20) */
3. 128, /* 點陣圖長 */
4. 128, /* 點陣圖高 */
5. 0, /* 點陣圖行偏移 */
6. g_LcdWidth-128, /* 目標區行偏移 */
7. LTDC_PIXEL_FORMAT_RGB565); /* 目標區顏色格式 */
第 1 行是點陣圖首地址。
第 2 行,根據設定的起始座標,計算起始座標在 LCD 視訊記憶體中的具體位置。
SDRAM_LCD_BUF1 表示 LCD 視訊記憶體首地址。
g_LcdWidth*20*2 計算的是行數佔用的位元組數。
328*2 計算的是所在行的具體地址。
乘以 2 是因為 RGB565 顏色格式的 1 個畫素佔用兩個位元組。
第 5 行是點陣圖的行偏移,行偏移的意思就是一行結束到下一行開始的距離,單位畫素個數。由於整個
點陣圖都要繪製,所有行偏移就是 0。
第 6 行,輸出行偏移的,由於輸出區需要的長度是 128,那麼行偏移就是 LCD 的長度減去 128。
/*
*********************************************************************************************************
* 函 數 名: _DMA2D_Copy
* 功能說明: 通過DMA2D從前景層複製指定區域的顏色資料到目標區域
* 形 參: pSrc 顏色資料來源地址
* pDst 顏色資料目的地址
* xSize 目的區域的X軸大小,即每行畫素數
* ySize 目的區域的Y軸大小,即行數
* OffLineSrc 前景層影像的行偏移
* OffLineDst 輸出的行偏移
* PixelFormat 目標區顏色格式
* 返 回 值: 無
*********************************************************************************************************
*/
static void _DMA2D_Copy(void * pSrc,
void * pDst,
uint32_t xSize,
uint32_t ySize,
uint32_t OffLineSrc,
uint32_t OffLineDst,
uint32_t PixelFormat)
{
/* DMA2D採用儲存器到儲存器模式, 這種模式是前景層作為DMA2D輸入 */
DMA2D->CR = 0x00000000UL | (1 << 9);
DMA2D->FGMAR = (uint32_t)pSrc;
DMA2D->OMAR = (uint32_t)pDst;
DMA2D->FGOR = OffLineSrc;
DMA2D->OOR = OffLineDst;
/* 前景層和輸出區域都採用的RGB565顏色格式 */
DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_RGB565;
DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 啟動傳輸 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D傳輸完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
3 模式 3:儲存器到儲存器模式,帶顏色格式轉換
此函式用於前景層和目標區域的顏色混合,並將混合後的影像輸出到目標區域。
第 24 行,DMA2D 採用儲存器到儲存器模式, 這種模式把前景層和背景層作為 DMA2D 輸入,且支
持顏色格式轉換和顏色混合。
第 25 行,設定前景層資料首地址。
第 26 行,設定背景層資料首地址,這裡是把輸出區中的資料作為背景層。
第 27 行,設定輸出儲存器首地址。
第 28 行,設定前景層行偏移。
第 29 行,設定背景層行偏移。
第 29 行,設定輸出區行偏移。
第 33-37 行,前景層,背景層和輸出區都採用 RGB565 格式,並且為前景層配置一個 Alpha 值。另
外注意,如果是輸出到 LCD 視訊記憶體,那麼輸出顏色格式要與 LCD 顏色格式一致,否則顯示不正常。
第 39 行,高 16 位用於設定每行的畫素數,低 16 位用於設定行數,合併起來決定總傳輸次數。
第 42-45 行,啟動傳輸,並等待傳輸完成。
使用舉例:
將大小 128*128,顏色格式為 RGB565 的點陣圖繪製到 LCD 起始座標為(176, 168)的區域,輸出顏色格
式也配置為 RGB565,透明度設定為 200(255 表示完全不透明,0 表示完全透明)。
1. _DMA2D_MixColorsBulk((uint32_t *)_achuoying, /* 點陣圖地址 */
2. 0, /* 點陣圖行偏移 */
3. (uint32_t *)(SDRAM_LCD_BUF1 + g_LcdWidth*168*2 + 176*2), /* 顯示起始地址(176, 168) */
4. g_LcdWidth-128, /* 目標區行偏移 */
5. 128, /* 目標區長 */
6. 128, /* 目標區高 */
7. 200); /* 點陣圖顯示透明度 200 */
第 1 行是點陣圖首地址。
第 2 行是點陣圖的行偏移,行偏移的意思就是一行結束到下一行開始的距離,單位畫素個數。由於整個
點陣圖都要繪製,所有行偏移就是 0。
第 3 行,根據設定的起始座標,計算起始座標在 LCD 視訊記憶體中的具體位置。
SDRAM_LCD_BUF1 表示 LCD 視訊記憶體首地址。
g_LcdWidth*168*2 計算的是行數佔用的位元組數。
176*2 計算的是所在行的具體地址。
乘以 2 是因為 RGB565 顏色格式的 1 個畫素佔用兩個位元組。
第 4 行,輸出行偏移的,由於輸出區需要的長度是 128,那麼行偏移就是 LCD 的長度減去 128。
/*
*********************************************************************************************************
* 函 數 名: _DMA2D_MixColorsBulk
* 功能說明: 前景層和目標區域的顏色混合
* 形 參: pColorFG 前景層資料來源地址
* OffLineSrcFG 前景層影像的行偏移
* pColorDst 目標區資料地址
* OffLineDst 目標區的行偏移
* xSize 目的區域的X軸大小,即每行畫素數
* ySize 目的區域的Y軸大小,即行數
* Intens 設定前景層的透明度,255表示完全不透明,0表示完全透明
* 返 回 值: 無
*********************************************************************************************************
*/
static void _DMA2D_MixColorsBulk(uint32_t * pColorFG,
uint32_t OffLineSrcFG,
uint32_t * pColorDst,
uint32_t OffLineDst,
uint32_t xSize,
uint32_t ySize,
uint8_t Intens)
{
/* DMA2D採用儲存器到儲存器模式, 這種模式前景層和背景層作為DMA2D輸入,且支援顏色格式轉換和顏色混合 */
DMA2D->CR = 0x00020000UL | (1 << 9);
DMA2D->FGMAR = (uint32_t)pColorFG;
DMA2D->BGMAR = (uint32_t)pColorDst;
DMA2D->OMAR = (uint32_t)pColorDst;
DMA2D->FGOR = OffLineSrcFG;
DMA2D->BGOR = OffLineDst;
DMA2D->OOR = OffLineDst;
/* 前景層,背景層和輸出區都是用的RGB565格式 */
DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_RGB565
| (1UL << 16)
| ((uint32_t)Intens << 24);
DMA2D->BGPFCCR = LTDC_PIXEL_FORMAT_RGB565;
DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 啟動傳輸 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D傳輸完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
4 模式 4:儲存器到儲存器模式,帶顏色格式轉換和混合
此函式用於前景層和背景層的顏色混合,並將混合後的影像輸出到目標區域。
第 26 行,DMA2D 採用儲存器到儲存器模式, 這種模式把前景層和背景層作為 DMA2D 輸入,且支
持顏色格式轉換和顏色混合。
第 27 行,設定前景層資料首地址。
第 28 行,設定背景層資料首地址。
第 29 行,設定輸出儲存器首地址。
第 30 行,設定前景層行偏移。
第 31 行,設定背景層行偏移。
第 32 行,設定輸出區行偏移。
第 35-37 行,前景層,背景層採用 ARGB8888 格式,輸出區採用 RGB565 格式。另外注意,如果是
輸出到 LCD 視訊記憶體,那麼輸出顏色格式要與 LCD 顏色格式一致,否則顯示不正常。
第 38 行,高 16 位用於設定每行的畫素數,低 16 位用於設定行數,合併起來決定總傳輸次數。
第 41-44 行,啟動傳輸,並等待傳輸完成。
使用舉例:
將兩個大小 128*128,顏色格式為 ARGB8888 的點陣圖混合後繪製到 LCD 起始座標為(24, 168)的區域,
輸出顏色格式配置為 RGB565。
1. _DMA2D_AlphaBlendingBulk((uint32_t *)_aclufei, /* 前景層點陣圖地址 */
2. 0, /* 前景層行偏移 */
3. (uint32_t *)_acsuolong, /* 背景層點陣圖地址 */
4. 0, /* 背景層行偏移 */
5. (uint32_t *)(SDRAM_LCD_BUF1 + g_LcdWidth*168*2 + 24*2), /* 顯示起始地址(24, 168) */
6. g_LcdWidth-128, /* 目標區行偏移 */
7. 128, /* 目標區長 */
8. 128); /* 目標區高 */
第 1 行是前景層點陣圖首地址。
第 2 行是點陣圖的行偏移,行偏移的意思就是一行結束到下一行開始的距離,單位畫素個數。由於整個
點陣圖都要繪製,所有行偏移就是 0。
第 3 行是背景層點陣圖首地址。
第 4 行是背景層行偏移。
第 5 行,根據設定的起始座標,計算起始座標在 LCD 視訊記憶體中的具體位置。
SDRAM_LCD_BUF1 表示 LCD 視訊記憶體首地址。
g_LcdWidth*168*2 計算的是行數佔用的位元組數。
24*2 計算的是所在行的具體地址。
乘以 2 是因為 RGB565 顏色格式的 1 個畫素佔用兩個位元組。
第 6 行,輸出行偏移的,由於輸出區需要的長度是 128,那麼行偏移就是 LCD 的長度減去 128。
/*
*********************************************************************************************************
* 函 數 名: _DMA2D_AlphaBlendingBulk
* 功能說明: 前景層和背景層的顏色混合
* 形 參: pColorFG 前景層源資料地址
* OffLineSrcFG 前景層源資料行偏移
* pColorBG 背景層源資料地址
* OffLineSrcBG 背景層源資料行偏移
* pColorDst 目標區地址
* OffLineDst 目標區行偏移
* xSize 目標區域的X軸大小,即每行畫素數
* ySize 目標區域的Y軸大小,即行數
* 返 回 值: 無
*********************************************************************************************************
*/
static void _DMA2D_AlphaBlendingBulk(uint32_t * pColorFG,
uint32_t OffLineSrcFG,
uint32_t * pColorBG,
uint32_t OffLineSrcBG,
uint32_t * pColorDst,
uint32_t OffLineDst,
uint32_t xSize,
uint32_t ySize)
{
/* DMA2D採用儲存器到儲存器模式, 這種模式前景層和背景層作為DMA2D輸入,且支援顏色格式轉換和顏色混合 */
DMA2D->CR = 0x00020000UL | (1 << 9);
DMA2D->FGMAR = (uint32_t)pColorFG;
DMA2D->BGMAR = (uint32_t)pColorBG;
DMA2D->OMAR = (uint32_t)pColorDst;
DMA2D->FGOR = OffLineSrcFG;
DMA2D->BGOR = OffLineSrcBG;
DMA2D->OOR = OffLineDst;
/* 前景層,背景層採用ARGB8888格式,輸出區採用RGB565格式 */
DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_ARGB8888;
DMA2D->BGPFCCR = LTDC_PIXEL_FORMAT_ARGB8888;
DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 啟動傳輸 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D傳輸完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
5 模式 5:儲存器到儲存器模式,帶顏色格式轉換和混合,前景色是固定的
此函式用於在指定位置顯示 ARGB8888 格式點陣圖。
第 24 行,DMA2D 採用儲存器到儲存器模式, 這種模式把前景層和背景層作為 DMA2D 輸入,且支
持顏色格式轉換和顏色混合。
第 25 行,設定前景層資料首地址。
第 26 行,設定背景層資料首地址,這裡是把輸出區中的資料作為背景層。
第 27 行,設定輸出儲存器首地址。
第 28 行,設定前景層行偏移。
第 29 行,設定背景層行偏移。
第 30 行,設定輸出區行偏移。
第 33-35 行,前景層顏色格式是 LTDC_PIXEL_FORMAT_ARGB8888,即點陣圖的顏色格式。背景層和
輸出區顏色格式可配置。另外注意,如果是輸出到 LCD 視訊記憶體,那麼輸出顏色格式要與 LCD 顏色格式
一致,否則顯示不正常。
第 36 行,高 16 位用於設定每行的畫素數,低 16 位用於設定行數,合併起來決定總傳輸次數。
第 39-42 行,啟動傳輸,並等待傳輸完成。
使用舉例:
將大小 128*128,顏色格式為 ARGB8888 的點陣圖繪製到 LCD 起始座標為(176, 20)的區域,輸出顏色
格式配置為 RGB565。
1. _DMA2D_DrawAlphaBitmap((void *)(SDRAM_LCD_BUF1 + g_LcdWidth*20*2 + 176*2), /* 顯示起始地址(176, 20) */
2. (void *)_aclufei, /* 點陣圖地址 */
3. 128, /* 點陣圖長 */
4. 128, /* 點陣圖高 */
5. 0, /* 點陣圖行偏移 */
6. g_LcdWidth-128, /* 目標區行偏移 */
7. LTDC_PIXEL_FORMAT_RGB565); /* 目標區顏色格式 */
第 1 行,根據設定的起始座標,計算起始座標在 LCD 視訊記憶體中的具體位置。
SDRAM_LCD_BUF1 表示 LCD 視訊記憶體首地址。
g_LcdWidth*20*2 計算的是行數佔用的位元組數。
176*2 計算的是所在行的具體地址。
乘以 2 是因為 RGB565 顏色格式的 1 個畫素佔用兩個位元組
第 2 行是點陣圖首地址。
第 5 行是點陣圖的行偏移,行偏移的意思就是一行結束到下一行開始的距離,單位畫素個數。由於整個
點陣圖都要繪製,所有行偏移就是 0。
第 6 行,輸出行偏移的,由於輸出區需要的長度是 128,那麼行偏移就是 LCD 的長度減去 128。
/*
*********************************************************************************************************
* 函 數 名: _DMA2D_DrawAlphaBitmap
* 功能說明: ARGB8888格式點陣圖顯示
* 形 參: pDst 目標區地址
* pSrc 源資料地址,即點陣圖首地址
* xSize 目標區域的X軸大小,即每行畫素數
* ySize 目標區域的Y軸大小,即行數
* OffLineSrc 源資料行偏移
* OffLineDst 目標區行偏移
* PixelFormat 目標區顏色格式
* 返 回 值: 無
*********************************************************************************************************
*/
static void _DMA2D_DrawAlphaBitmap(void * pDst,
void * pSrc,
uint32_t xSize,
uint32_t ySize,
uint32_t OffLineSrc,
uint32_t OffLineDst,
uint32_t PixelFormat)
{
/* DMA2D採用儲存器到儲存器模式, 這種模式前景層和背景層作為DMA2D輸入,且支援顏色格式轉換和顏色混合 */
DMA2D->CR = 0x00020000UL | (1 << 9);
DMA2D->FGMAR = (uint32_t)pSrc;
DMA2D->BGMAR = (uint32_t)pDst;
DMA2D->OMAR = (uint32_t)pDst;
DMA2D->FGOR = OffLineSrc;
DMA2D->BGOR = OffLineDst;
DMA2D->OOR = OffLineDst;
/* 前景層顏色格式是LTDC_PIXEL_FORMAT_ARGB8888,即點陣圖的顏色格式,背景層和輸出區顏色格式可配置 */
DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_ARGB8888;
DMA2D->BGPFCCR = PixelFormat;
DMA2D->OPFCCR = PixelFormat;
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 啟動傳輸 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D傳輸完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
相關文章
- STM32記憶體知識記憶體
- 知識點
- STM32中斷相關知識總結
- rabbitmq 知識點MQ
- SQL知識點(+)SQL
- 前端知識點前端
- Android 知識點Android
- Weex 知識點
- Promise知識點Promise
- Laravel 知識點Laravel
- MySQL知識點MySql
- 知識點——terms
- ajax知識點
- 通用知識點
- 混合知識點
- Redis知識點Redis
- JavaWeb知識點JavaWeb
- JS知識點:ES6 中常見的知識點JS
- STM32串列埠列印的那些知識串列埠
- 浮點數小知識點
- 知識點記錄
- Python知識點(二)Python
- Python知識點(一)Python
- js小知識點JS
- 知識點總結
- mongo 小知識點Go
- Runtime知識點整理
- 計組知識點
- Promise重要知識點Promise
- 面試知識點面試
- webpack常用知識點Web
- MongoDB知識要點MongoDB
- Laravel Model 知識點Laravel
- Vue全套知識點Vue
- SVN - 常用知識點
- Android知識點3Android
- JavaScript知識點整理JavaScript
- app的知識點APP