|
我們選擇800×600 @ 56Hz的原因是因?yàn)橄袼貢r(shí)鐘;
輸出分辨率使用36MHz像素時(shí)鐘,周期是72MHz的倍數(shù)(STM32的頻率),
因?yàn)槲覀冃枰褂肧PI產(chǎn)生像素信號(hào),可以把STM32的頻率經(jīng)過SPI預(yù)分頻得到18MHz的像素時(shí)鐘,
然后將每一個(gè)像素點(diǎn)繪制兩次,具體方法是當(dāng)在水平方向800像素點(diǎn)時(shí)輸出一個(gè)信號(hào)像素,
SPI 的 MOSI信號(hào)保持低電平或者高電平兩倍的時(shí)間(相比于之前繪制一個(gè)點(diǎn)的時(shí)間)。
幀緩沖區(qū)是一個(gè)52×200字節(jié)的數(shù)組。每一行有50*8=400個(gè)像素(每一個(gè)bit是一個(gè)像素),
剩下的兩個(gè)字節(jié)(52-50)模擬每一行的消隱間隔。
水平同步
水平同步信號(hào)( horizontal synchronism signal)和后延時(shí)間(back porch time)由TIM1定時(shí)器產(chǎn)生的通道1和2產(chǎn)生,TIM1定時(shí)器產(chǎn)生的通道1連接到PA8。
H-SYNC也就是TIM1定時(shí)器的通道1將會(huì)產(chǎn)生水平同步信號(hào)給顯示器。
H-BACKPORCH也就是TIM1定時(shí)器的通道2,計(jì)算水平同步時(shí)間的和以及后延時(shí)間,
這個(gè)定時(shí)器產(chǎn)生一個(gè)中斷用于觸發(fā)DMA開始通過SPI發(fā)送像素的請(qǐng)求。
幀緩沖里面的每一行都會(huì)重復(fù)這樣的過程,
垂直同步
TIM2定時(shí)器用于產(chǎn)生垂直同步信號(hào),但是實(shí)在從機(jī)模式下。
TIM2計(jì)算主機(jī)(TIM1)產(chǎn)生的H-SYNC脈沖數(shù)。
TIM2的通道2通過PA1輸出V-SYNC信號(hào)。
TIM2的通道3將會(huì)觸發(fā)一個(gè)中斷當(dāng)定時(shí)器的計(jì)數(shù)器達(dá)到V-SYNC的和垂直后沿時(shí)間。
這個(gè)中斷會(huì)設(shè)置一個(gè)變量表明正在掃描一個(gè)有效幀并且DMA可以開始發(fā)送像素到屏幕了。
像素發(fā)生器
像素由SPI的MOSI(PA7)產(chǎn)生。
定時(shí)器TIM1的通道2產(chǎn)生一個(gè)中斷用于使能DMA TX請(qǐng)求向SPI發(fā)送數(shù)據(jù)。
DMA將會(huì)從幀緩沖區(qū)讀取一行并且將數(shù)據(jù)放到SPI的DR寄存器。
DMA被設(shè)置用來在一行信號(hào)被發(fā)送之后產(chǎn)生一個(gè)中斷,行號(hào)是遞增的。
因?yàn)槲覀儗⒚恳恍邪l(fā)送了三次,我們?cè)谥袛嘀袑⒂?jì)數(shù)加1。
當(dāng)三行數(shù)據(jù)被發(fā)送出去,我們將DMA指針指向下一行的幀緩沖。
當(dāng)所有的行被發(fā)送出去,DMA被禁止直到下一個(gè)有效單的幀中斷發(fā)生(TIM2通道3)。
|
|