LTDC synchronization with DMA2D and CPU - harkjael/Embedded-Dev GitHub Wiki

DMA2D๋Š” AHB matrix์˜ master์ด๋‹ค. CPU๋ฅผ ๋””์Šคํ”Œ๋ ˆ์ด ๊ด€๋ จ ์ž‘์—…์—์„œ ์‰ฌ๊ฒŒ ํ•˜๋ ค๋ฉด DMA2D๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค.

DMA2D๋Š” ๋‹ค์Œ 4๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์ž‘์—…์„ ํ•œ๋‹ค.

  • ์‚ฌ๊ฐ์˜์—ญ์— ์ƒ‰์ƒ์„ ์ฑ„์›€
  • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋˜๋Š” peripheral๋กœ frame์ด๋‚˜ frame๋‚ด์˜ ์‚ฌ๊ฐ์˜์—ญ์„ ๋ณต์‚ฌ
  • ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋กœ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ๋•Œ ํ”„๋ ˆ์ž„์˜ ํ”ฝ์…€ ํฌ๋งท์ด๋‚˜ ํ”„๋ ˆ์ž„์˜ ์‚ฌ๊ฐ์˜์—ญ์„ ๋ณ€ํ™˜(๋ฌด์—‡์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ฑฐ์ง€?)
  • ํ”ฝ์…€ ํฌ๋งท์ด๋‚˜ ํฌ๊ธฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ˜ผํ•ฉํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

LTDC์™€ DMA2D/CPU synchronization ์˜ค์ง ํ•˜๋‚˜์˜ frame buffer๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ frame ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด ํ™”๋ฉด ํ‘œ์‹œ์— ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต double buffer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ frame ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด ํ™”๋ฉด์— ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•œ๋‹ค.

double buffer๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ tearing effect๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค. LTDC์™€ frame buffer update (CPU ๋˜๋Š” DMA2D์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ)๊ฐ„ ๋™๊ธฐ๊ฐ€ ํ‹€์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” vsync ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LTDC์™€ CPU ๋˜๋Š” LTDC์™€ DMA2D๊ฐ„์— ๋™๊ธฐ๋ฅผ ๋งž์ถฐ์•ผ ํ•œ๋‹ค.

LTDC๊ฐ€ front buffer์—์„œ ๊ทธ๋ž˜ํ”ฝ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋™์•ˆ DMA2D๋Š” back buffer์— ๋‹ค์Œ frame์„ ์ค€๋น„ํ•œ๋‹ค. VSYNC ์ฃผ๊ธฐ๋Š” ์‹ค์ œ ํ‘œ์‹œ๋˜๋Š” frame์ด ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ  ๋‘ buffer๋Š” ์„œ๋กœ ๊ต๋Œ€๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค.

LTDC๋Š” ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด์„œ ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. `

  • ๋งˆ์ง€๋ง‰ screen line์ด ๋๋‚ ๋•Œ๋งˆ๋‹ค ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์„ค์ •ํ•˜๊ณ  ์ธํ„ฐ๋ŸฝํŠธ ๋ฃจํ‹ด์—์„œ๋Š” ํ‘œ์‹œํ•  frame buffer๋ฅผ ์ „ํ™˜ํ•˜๊ณ  ๋‹ค์Œ frame buffer ์—ฐ์‚ฐ์„ ์‹œ์ž‘
  • LTDC_SRCR (shadow reload register)๋ฅผ ์„ค์ •ํ•ด์„œ vertical blanking์„ reloadํ•˜์—ฌ LTDC frame buffer ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋˜ํ•œ VSYNC ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ DMA2D๋ฅผ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์„ค์ •ํ•œ๋‹ค.