Lab4 DMA2D Embedded Systems
Dependencies: mbed BSP_DISCO_F746NG
Revision 5:62208303709a, committed 2019-11-13
- Comitter:
- troshha
- Date:
- Wed Nov 13 10:28:20 2019 +0000
- Parent:
- 4:eecb962016bf
- Commit message:
- 6
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Nov 01 10:57:20 2017 +0000 +++ b/main.cpp Wed Nov 13 10:28:20 2019 +0000 @@ -13,10 +13,14 @@ void DMA2D_Config(void); uint32_t ramBuffer[(150 * 150 * 2) / 4]; uint32_t offset = ((272 - 150) / 2 * 480 + (480 - 150) / 2) * 4; +uint32_t offset2 = ((272 - 260) / 2 * 480 + (480 - 150) / 2) * 4; +uint32_t offset3 = ((272 - 260) / 2 * 480 + (480 - 270) / 2) * 4; int main(void) { int xpos_offset = 0; + int xpos_offset2 = 0; + int ypos_offset3 = 0; HAL_Init(); BSP_LCD_Init(); @@ -31,7 +35,7 @@ HAL_DMA2D_Start(&hdma2d, (uint32_t)&ARGB4444_150x150, (uint32_t)&ramBuffer, 150, 150); while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); - hdma2d.Init.Mode = DMA2D_M2M_PFC; + hdma2d.Init.Mode = DMA2D_R2M ; hdma2d.Init.ColorMode = DMA2D_ARGB8888; hdma2d.Init.OutputOffset = 480 - 150; @@ -43,8 +47,10 @@ HAL_DMA2D_Init(&hdma2d); HAL_DMA2D_ConfigLayer(&hdma2d, 1); HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_FB_START_ADDRESS + offset, 150, 150); + HAL_DMA2D_Start(&hdma2d, 0xfff0f000, LCD_FB_START_ADDRESS + offset2, 50, 50); + HAL_DMA2D_Start(&hdma2d, 0xffff0000, LCD_FB_START_ADDRESS + offset3, 50, 50); while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); - + int k=0; for(;;){ // fill the previous position of image hdma2d.Init.Mode = DMA2D_R2M; @@ -57,13 +63,35 @@ hdma2d.Init.OutputOffset = 480 - 50; HAL_DMA2D_Init(&hdma2d); //HAL_DMA2D_Start(&hdma2d, 0x00000000, LCD_FB_START_ADDRESS + offset + xpos_offset, 150, 150); - HAL_DMA2D_Start(&hdma2d, 0xffff0000, LCD_MEM_ADDR + (10 + 10 * 480) * 4, 50, 50); + //HAL_DMA2D_Start(&hdma2d, 0xfff0f000, LCD_MEM_ADDR + (10 + 10 * 480) * 4, 50, 50); + HAL_DMA2D_Start(&hdma2d, 0xfff0f000, LCD_MEM_ADDR + offset2 + xpos_offset2 , 50, 50); + while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); + + hdma2d.Init.Mode = DMA2D_R2M; + hdma2d.Init.OutputOffset = 480 - 50; + HAL_DMA2D_Init(&hdma2d); + //HAL_DMA2D_Start(&hdma2d, 0x00000000, LCD_FB_START_ADDRESS + offset + xpos_offset, 150, 150); + HAL_DMA2D_Start(&hdma2d, 0xffff0000, LCD_MEM_ADDR + ((272 - ypos_offset3) / 2 * 480 + (480 - 270) / 2) * 4 , 50, 50); while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); // and move to the next - xpos_offset += 4; - if (xpos_offset == 300) - xpos_offset = 0; + if(xpos_offset<=300&&k==0){ + xpos_offset += 4; + xpos_offset2 += 10; + ypos_offset3 += 3; + } + if (xpos_offset == 300&&k==0) + + k=1; + if(xpos_offset<=300&&k==1){ + xpos_offset -= 4; + xpos_offset2 -= 10; + ypos_offset3 -= 3; + if(xpos_offset == 64) + k=0; + } + + hdma2d.Init.Mode = DMA2D_M2M_PFC; hdma2d.Init.ColorMode = DMA2D_ARGB8888; hdma2d.Init.OutputOffset = 480 - 150; @@ -75,7 +103,10 @@ HAL_DMA2D_ConfigLayer(&hdma2d, 1); //HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_FB_START_ADDRESS + offset + xpos_offset, 150, 150); HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_MEM_ADDR + offset + xpos_offset, 150, 150); + while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); + + hdma2d.Init.OutputOffset = 0; hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; hdma2d.LayerCfg[1].InputAlpha = 0xff;