Lab4 DMA2D Embedded Systems
Dependencies: BSP_DISCO_F746NG mbed
main.cpp@1:751d3c9544ea, 2017-10-21 (annotated)
- Committer:
- codebreaker7
- Date:
- Sat Oct 21 15:49:21 2017 +0000
- Revision:
- 1:751d3c9544ea
- Parent:
- 0:919da762f527
- Child:
- 2:b4b0e5e08b0a
Removed unnecessary code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
codebreaker7 | 0:919da762f527 | 1 | //#include "mbed.h" |
codebreaker7 | 0:919da762f527 | 2 | |
codebreaker7 | 0:919da762f527 | 3 | #include "stm32f7xx.h" |
codebreaker7 | 0:919da762f527 | 4 | #include "stm32746g_discovery.h" |
codebreaker7 | 0:919da762f527 | 5 | #include "stm32746g_discovery_lcd.h" |
codebreaker7 | 0:919da762f527 | 6 | #include "stm32f7xx_hal_dma2d.h" |
codebreaker7 | 0:919da762f527 | 7 | #include "ARGB4444_150x150.h" |
codebreaker7 | 0:919da762f527 | 8 | |
codebreaker7 | 0:919da762f527 | 9 | #define LCD_MEM_ADDR (LCD_FB_START_ADDRESS + (480 * 272) * 4) |
codebreaker7 | 0:919da762f527 | 10 | |
codebreaker7 | 0:919da762f527 | 11 | DMA2D_HandleTypeDef hdma2d; |
codebreaker7 | 0:919da762f527 | 12 | |
codebreaker7 | 0:919da762f527 | 13 | void DMA2D_Config(void); |
codebreaker7 | 0:919da762f527 | 14 | uint32_t ramBuffer[(150 * 150 * 2) / 4]; |
codebreaker7 | 0:919da762f527 | 15 | uint32_t offset = ((272 - 150) / 2 * 480 + (480 - 150) / 2) * 4; |
codebreaker7 | 0:919da762f527 | 16 | |
codebreaker7 | 0:919da762f527 | 17 | int main(void) |
codebreaker7 | 0:919da762f527 | 18 | { |
codebreaker7 | 0:919da762f527 | 19 | int xpos_offset = 0; |
codebreaker7 | 0:919da762f527 | 20 | HAL_Init(); |
codebreaker7 | 0:919da762f527 | 21 | |
codebreaker7 | 0:919da762f527 | 22 | BSP_LCD_Init(); |
codebreaker7 | 0:919da762f527 | 23 | BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS); |
codebreaker7 | 0:919da762f527 | 24 | BSP_LCD_Clear(LCD_COLOR_BLACK); |
codebreaker7 | 0:919da762f527 | 25 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
codebreaker7 | 0:919da762f527 | 26 | BSP_LCD_SetBackColor(LCD_COLOR_BLUE); |
codebreaker7 | 0:919da762f527 | 27 | BSP_LCD_SetFont(&Font16); |
codebreaker7 | 0:919da762f527 | 28 | |
codebreaker7 | 0:919da762f527 | 29 | DMA2D_Config(); |
codebreaker7 | 0:919da762f527 | 30 | |
codebreaker7 | 0:919da762f527 | 31 | HAL_DMA2D_Start(&hdma2d, (uint32_t)&ARGB4444_150x150, (uint32_t)&ramBuffer, 150, 150); |
codebreaker7 | 0:919da762f527 | 32 | while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); |
codebreaker7 | 0:919da762f527 | 33 | |
codebreaker7 | 0:919da762f527 | 34 | hdma2d.Init.Mode = DMA2D_M2M_PFC; |
codebreaker7 | 0:919da762f527 | 35 | hdma2d.Init.ColorMode = DMA2D_ARGB8888; |
codebreaker7 | 0:919da762f527 | 36 | hdma2d.Init.OutputOffset = 480 - 150; |
codebreaker7 | 0:919da762f527 | 37 | |
codebreaker7 | 0:919da762f527 | 38 | hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
codebreaker7 | 0:919da762f527 | 39 | hdma2d.LayerCfg[1].InputAlpha = 0xff; |
codebreaker7 | 0:919da762f527 | 40 | hdma2d.LayerCfg[1].InputColorMode = CM_ARGB4444; |
codebreaker7 | 0:919da762f527 | 41 | hdma2d.LayerCfg[1].InputOffset = 0; |
codebreaker7 | 0:919da762f527 | 42 | |
codebreaker7 | 0:919da762f527 | 43 | HAL_DMA2D_Init(&hdma2d); |
codebreaker7 | 0:919da762f527 | 44 | HAL_DMA2D_ConfigLayer(&hdma2d, 1); |
codebreaker7 | 0:919da762f527 | 45 | HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_FB_START_ADDRESS + offset, 150, 150); |
codebreaker7 | 0:919da762f527 | 46 | while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); |
codebreaker7 | 0:919da762f527 | 47 | |
codebreaker7 | 0:919da762f527 | 48 | for(;;){ |
codebreaker7 | 0:919da762f527 | 49 | // fill the previous position of image |
codebreaker7 | 0:919da762f527 | 50 | hdma2d.Init.Mode = DMA2D_R2M; |
codebreaker7 | 0:919da762f527 | 51 | HAL_DMA2D_Init(&hdma2d); |
codebreaker7 | 0:919da762f527 | 52 | //HAL_DMA2D_Start(&hdma2d, 0x00000000, LCD_FB_START_ADDRESS + offset + xpos_offset, 150, 150); |
codebreaker7 | 0:919da762f527 | 53 | HAL_DMA2D_Start(&hdma2d, 0x00000000, LCD_MEM_ADDR, 480, 272); |
codebreaker7 | 0:919da762f527 | 54 | while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); |
codebreaker7 | 0:919da762f527 | 55 | // and move to the next |
codebreaker7 | 0:919da762f527 | 56 | xpos_offset += 4; |
codebreaker7 | 0:919da762f527 | 57 | if (xpos_offset == 300) |
codebreaker7 | 0:919da762f527 | 58 | xpos_offset = 0; |
codebreaker7 | 0:919da762f527 | 59 | hdma2d.Init.Mode = DMA2D_M2M_PFC; |
codebreaker7 | 0:919da762f527 | 60 | hdma2d.Init.ColorMode = DMA2D_ARGB8888; |
codebreaker7 | 0:919da762f527 | 61 | hdma2d.Init.OutputOffset = 480 - 150; |
codebreaker7 | 0:919da762f527 | 62 | hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
codebreaker7 | 0:919da762f527 | 63 | hdma2d.LayerCfg[1].InputAlpha = 0xff; |
codebreaker7 | 0:919da762f527 | 64 | hdma2d.LayerCfg[1].InputColorMode = CM_ARGB4444; |
codebreaker7 | 0:919da762f527 | 65 | hdma2d.LayerCfg[1].InputOffset = 0; |
codebreaker7 | 0:919da762f527 | 66 | HAL_DMA2D_Init(&hdma2d); |
codebreaker7 | 0:919da762f527 | 67 | HAL_DMA2D_ConfigLayer(&hdma2d, 1); |
codebreaker7 | 0:919da762f527 | 68 | //HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_FB_START_ADDRESS + offset + xpos_offset, 150, 150); |
codebreaker7 | 0:919da762f527 | 69 | HAL_DMA2D_Start(&hdma2d, (uint32_t)&ramBuffer, LCD_MEM_ADDR + offset + xpos_offset, 150, 150); |
codebreaker7 | 0:919da762f527 | 70 | while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); |
codebreaker7 | 0:919da762f527 | 71 | hdma2d.Init.OutputOffset = 0; |
codebreaker7 | 0:919da762f527 | 72 | hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
codebreaker7 | 0:919da762f527 | 73 | hdma2d.LayerCfg[1].InputAlpha = 0xff; |
codebreaker7 | 0:919da762f527 | 74 | hdma2d.LayerCfg[1].InputColorMode = CM_ARGB8888; |
codebreaker7 | 0:919da762f527 | 75 | hdma2d.LayerCfg[1].InputOffset = 0; |
codebreaker7 | 0:919da762f527 | 76 | HAL_DMA2D_Init(&hdma2d); |
codebreaker7 | 0:919da762f527 | 77 | HAL_DMA2D_ConfigLayer(&hdma2d, 1); |
codebreaker7 | 0:919da762f527 | 78 | HAL_DMA2D_Start(&hdma2d, LCD_MEM_ADDR, LCD_FB_START_ADDRESS, 480, 272); |
codebreaker7 | 0:919da762f527 | 79 | while(HAL_DMA2D_PollForTransfer(&hdma2d, 1000) != HAL_OK); |
codebreaker7 | 0:919da762f527 | 80 | HAL_Delay(50); |
codebreaker7 | 0:919da762f527 | 81 | } |
codebreaker7 | 0:919da762f527 | 82 | } |
codebreaker7 | 0:919da762f527 | 83 | |
codebreaker7 | 0:919da762f527 | 84 | void DMA2D_Config(void) { |
codebreaker7 | 0:919da762f527 | 85 | hdma2d.Init.Mode = DMA2D_M2M; |
codebreaker7 | 0:919da762f527 | 86 | hdma2d.Init.OutputOffset = 0; |
codebreaker7 | 0:919da762f527 | 87 | hdma2d.Init.ColorMode = DMA2D_ARGB4444; |
codebreaker7 | 0:919da762f527 | 88 | |
codebreaker7 | 0:919da762f527 | 89 | hdma2d.Instance = DMA2D; |
codebreaker7 | 0:919da762f527 | 90 | |
codebreaker7 | 0:919da762f527 | 91 | hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; |
codebreaker7 | 0:919da762f527 | 92 | hdma2d.LayerCfg[1].InputAlpha = 0xff; |
codebreaker7 | 0:919da762f527 | 93 | hdma2d.LayerCfg[1].InputOffset = 0; |
codebreaker7 | 0:919da762f527 | 94 | hdma2d.LayerCfg[1].InputColorMode = CM_ARGB4444; |
codebreaker7 | 0:919da762f527 | 95 | |
codebreaker7 | 0:919da762f527 | 96 | HAL_DMA2D_Init(&hdma2d); |
codebreaker7 | 0:919da762f527 | 97 | HAL_DMA2D_ConfigLayer(&hdma2d, 1); |
codebreaker7 | 0:919da762f527 | 98 | } |