STM32F4 DMA2D_R2M
2015-06-21 10:42
736 查看
图像处理的专门DMA
看一段示例代码
DMA2D_Init
DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M; // DMA2D->CR
DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; // DMA2D->OPFCCR
DMA2D_InitStruct.DMA2D_OutputGreen = Green_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputBlue = Blue_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputRed = Red_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputMemoryAdd = Xaddress; // DMA2D->OMAR
DMA2D_InitStruct.DMA2D_OutputOffset = 0; // DMA2D->OOR
DMA2D_InitStruct.DMA2D_NumberOfLine = 1; // DMA2D->NLR
DMA2D_InitStruct.DMA2D_PixelPerLine = Length; // DMA2D->NLR
Register to Memory比较简单,设置模式与输出color format,然后就是输出的颜色值,输出的地址(此例子直接给LCD),输出的offset已经解释过
没有FG(foreground)和 BG(background) 直接输出image到Memory
看一段示例代码
/** * @brief Initializes the DMA2D peripheral according to the specified parameters * in the DMA2D_InitStruct. * @note This function can be used only when the DMA2D is disabled. * @param DMA2D_InitStruct: pointer to a DMA2D_InitTypeDef structure that contains * the configuration information for the specified DMA2D peripheral. * @retval None */ void DMA2D_Init(DMA2D_InitTypeDef* DMA2D_InitStruct) { uint32_t outgreen = 0; uint32_t outred = 0; uint32_t outalpha = 0; uint32_t pixline = 0; /* Check the parameters */ assert_param(IS_DMA2D_MODE(DMA2D_InitStruct->DMA2D_Mode)); assert_param(IS_DMA2D_CMODE(DMA2D_InitStruct->DMA2D_CMode)); assert_param(IS_DMA2D_OGREEN(DMA2D_InitStruct->DMA2D_OutputGreen)); assert_param(IS_DMA2D_ORED(DMA2D_InitStruct->DMA2D_OutputRed)); assert_param(IS_DMA2D_OBLUE(DMA2D_InitStruct->DMA2D_OutputBlue)); assert_param(IS_DMA2D_OALPHA(DMA2D_InitStruct->DMA2D_OutputAlpha)); assert_param(IS_DMA2D_OUTPUT_OFFSET(DMA2D_InitStruct->DMA2D_OutputOffset)); assert_param(IS_DMA2D_LINE(DMA2D_InitStruct->DMA2D_NumberOfLine)); assert_param(IS_DMA2D_PIXEL(DMA2D_InitStruct->DMA2D_PixelPerLine)); /* Configures the DMA2D operation mode */ DMA2D->CR &= (uint32_t)CR_MASK; DMA2D->CR |= (DMA2D_InitStruct->DMA2D_Mode); /* Configures the color mode of the output image */ DMA2D->OPFCCR &= ~(uint32_t)DMA2D_OPFCCR_CM; DMA2D->OPFCCR |= (DMA2D_InitStruct->DMA2D_CMode); /* Configures the output color */ if (DMA2D_InitStruct->DMA2D_CMode == DMA2D_ARGB8888) { outgreen = DMA2D_InitStruct->DMA2D_OutputGreen << 8; outred = DMA2D_InitStruct->DMA2D_OutputRed << 16; outalpha = DMA2D_InitStruct->DMA2D_OutputAlpha << 24; } else if (DMA2D_InitStruct->DMA2D_CMode == DMA2D_RGB888) { outgreen = DMA2D_InitStruct->DMA2D_OutputGreen << 8; outred = DMA2D_InitStruct->DMA2D_OutputRed << 16; outalpha = (uint32_t)0x00000000; } else if (DMA2D_InitStruct->DMA2D_CMode == DMA2D_RGB565) { outgreen = DMA2D_InitStruct->DMA2D_OutputGreen << 5; outred = DMA2D_InitStruct->DMA2D_OutputRed << 11; outalpha = (uint32_t)0x00000000; } else if (DMA2D_InitStruct->DMA2D_CMode == DMA2D_ARGB1555) { outgreen = DMA2D_InitStruct->DMA2D_OutputGreen << 5; outred = DMA2D_InitStruct->DMA2D_OutputRed << 10; outalpha = DMA2D_InitStruct->DMA2D_OutputAlpha << 15; } else /* DMA2D_CMode = DMA2D_ARGB4444 */ { outgreen = DMA2D_InitStruct->DMA2D_OutputGreen << 4; outred = DMA2D_InitStruct->DMA2D_OutputRed << 8; outalpha = DMA2D_InitStruct->DMA2D_OutputAlpha << 12; } DMA2D->OCOLR |= ((outgreen) | (outred) | (DMA2D_InitStruct->DMA2D_OutputBlue) | (outalpha)); /* Configures the output memory address */ DMA2D->OMAR = (DMA2D_InitStruct->DMA2D_OutputMemoryAdd); /* Configure the line Offset */ DMA2D->OOR &= ~(uint32_t)DMA2D_OOR_LO; DMA2D->OOR |= (DMA2D_InitStruct->DMA2D_OutputOffset); /* Configure the number of line and pixel per line */ pixline = DMA2D_InitStruct->DMA2D_PixelPerLine << 16; DMA2D->NLR &= ~(DMA2D_NLR_NL | DMA2D_NLR_PL); DMA2D->NLR |= ((DMA2D_InitStruct->DMA2D_NumberOfLine) | (pixline));
DMA2D_Init
DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M; // DMA2D->CR
DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; // DMA2D->OPFCCR
DMA2D_InitStruct.DMA2D_OutputGreen = Green_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputBlue = Blue_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputRed = Red_Value; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F; // DMA2D->OCOLR
DMA2D_InitStruct.DMA2D_OutputMemoryAdd = Xaddress; // DMA2D->OMAR
DMA2D_InitStruct.DMA2D_OutputOffset = 0; // DMA2D->OOR
DMA2D_InitStruct.DMA2D_NumberOfLine = 1; // DMA2D->NLR
DMA2D_InitStruct.DMA2D_PixelPerLine = Length; // DMA2D->NLR
Register to Memory比较简单,设置模式与输出color format,然后就是输出的颜色值,输出的地址(此例子直接给LCD),输出的offset已经解释过
没有FG(foreground)和 BG(background) 直接输出image到Memory
相关文章推荐
- Android下用OpenCV3.0库静态链接错误解决方法
- Uva - 120 - Stacks of Flapjacks
- [leetcode] Two Sum
- 深入理解Java对象序列化
- Uva - 120 - Stacks of Flapjacks
- hypercall的实现机制与硬件虚拟化
- 本地推送服务 UILocalNotification
- 补发《超级迷宫》站立会议五
- 洗刷刷OO三A
- HDU_4609_3-idiots
- JavaScript-this的指向
- 剑指offer 面试题2
- 补发《超级迷宫》站立会议四
- java笔记30 网络编程2 服务器
- android onInterceptTouchEvent和onTouchEvent
- 基于高性能的硬件配置Nginx
- 使用python的Paramiko模块登陆SSH
- 对象切割 - 常量引用传递
- 餐饮美食图片数据表
- StrongReference, SoftReference, WeakReference 图解说明