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๋ฅผ ํด์ ํ ๋๊น์ง ๋๊ธฐ์ํ๋ก ์ค์ ํ๋ค.