基于GD32VF103 的vga显示器 和ps2键盘 驱动
基于GD32VF103的vga和ps2鍵盤驅(qū)動(dòng)
前言
gd32vf103 是國(guó)內(nèi)一款很不錯(cuò)的riscv架構(gòu)微處理器,但是網(wǎng)上gd32vf103的應(yīng)用還比較少,這里我決定分享一下利用這個(gè)微處理器制作的vga驅(qū)動(dòng)和ps2鍵盤驅(qū)動(dòng)的調(diào)試過程和思路,主要還是用來學(xué)習(xí)定時(shí)器、spi等這些單片機(jī)常用的功能,希望能幫到有需要的人 源碼開源到了我的github上有需要自取gd32vf103 vga&ps2keyboard
PS2 鍵盤驅(qū)動(dòng)
ps2 鍵盤在幾年前還是非常多人使用,我現(xiàn)在仍然用的ps2的鍵盤鼠標(biāo) ,這里選用ps2 作為人機(jī)交互主要原因是它的接口和時(shí)序都非常簡(jiǎn)單
ps2 硬件連接
ps2 接口電路如圖
我們這里用到了四根線,大致的連接是這樣
PS2PIN -> GD32vf103PIN
4 -> 5v
3 -> GND
5(clk)->PA0
1(data) -> PA3
ps2 時(shí)序
我們這里單片機(jī)作為從機(jī)接收ps2鍵盤發(fā)來的數(shù)據(jù),所以簡(jiǎn)單來說就是在clk下降沿讀取data的電平。首先要將clk和data拉高,不然鍵盤不會(huì)發(fā)送數(shù)據(jù)。
第一位是start 0, 最后一位是stop 1,倒數(shù)第二位校驗(yàn),所以說我們要的數(shù)據(jù)就在中間data0-data7 一個(gè)移位就能讀出
我們要做的就是在clk對(duì)應(yīng)的引腳(PA0)掛上下降沿的外部中斷,然后在中斷處理函數(shù)中讀取data對(duì)應(yīng)引腳(PA3)電平,讀取的函數(shù)如下
然后就是數(shù)據(jù)的處理了,我這里用的第二套鍵盤掃描碼,通碼如下
按鍵按下發(fā)送通碼,彈起發(fā)送斷碼,因?yàn)槲抑苓呥€有很多沒搭好,所以這里就簡(jiǎn)單處理讓檢測(cè)到f0后接收到的碼作為當(dāng)前按鍵,emmm確實(shí)這里目前沒做其他的比如shift之類的,不過也很簡(jiǎn)單,隔段時(shí)間來填這個(gè)坑吧。
vga驅(qū)動(dòng)
由于單片機(jī)的算力有限,為了還能干些其他事情 ,我們這里使用單色 分辨率是800* 600@56Hz ,同樣考慮到這只是用來刷字符的卡 實(shí)際分辨率是600* 300
硬件接口
我們用的15針vga 大致連接如下
VGAPIN -> GD32VF103
HSYNC ->PB0
VSYNC -> PB6
GREEN->PA7
red和blue就直接接地
vga 時(shí)序以及驅(qū)動(dòng)實(shí)現(xiàn)
具體單片機(jī)實(shí)現(xiàn)推薦去看看國(guó)外這個(gè)大神的,他是利用stm32f1完成,我在實(shí)現(xiàn)中也參照了他的一些思路。有關(guān)vga時(shí)序也是百度一大把這里就先不多介紹
stm32f1 vga驅(qū)動(dòng)
我使用TIMER2CH2 作為行同步信號(hào) 通道三作為計(jì)算了消影的后的時(shí)間,即開始刷像素點(diǎn)的信號(hào)
在timer2中斷處理函數(shù)中計(jì)算行數(shù)來進(jìn)行場(chǎng)同步,這里更好的是利用定時(shí)器的主從模式讓timer2來觸發(fā)timer3,我為了節(jié)約定時(shí)器采用的在中斷中記時(shí)并產(chǎn)生場(chǎng)同步信號(hào),實(shí)測(cè)效果也不錯(cuò),大致的初始化這樣
由上面的分辨率算出來我們的像素時(shí)鐘頻率應(yīng)該是36mhz,加上消影時(shí)間就得到了定時(shí)器的分頻和具體的pulse
疫情在家條件有限,沒有示波器和邏輯分析儀
我們刷像素點(diǎn)使用的是spi-dma功能,即dma自動(dòng)加載像素點(diǎn)中數(shù)據(jù)到spi緩沖區(qū)發(fā)送,由于分頻限制我們做的4分頻,即時(shí)鐘頻率是27mhz 同時(shí)將每行數(shù)據(jù)刷兩次。即我們實(shí)際的分辨率是600* 300,不高,但是單片機(jī)來說足夠了,這里注意重新轉(zhuǎn)載新的一行時(shí)要先將dma失能,然后再在開始傳輸時(shí)使能dma通道
具體實(shí)現(xiàn)還是直接看我GitHub代碼吧 ,這里放幾張成功實(shí)現(xiàn)的圖
這是滿屏綠色的
由于家中條件有限,連接只有杜邦線面包板,面包板寄生電容和線上干擾很大,所以說顯示也有點(diǎn)丑陋,等打板后再繼續(xù)吧
歡迎大家來交流 郵箱 :chen.yuheng@nexuslink.cn
打板出來了,很尷尬的是定義的按鍵在boot上,插上去沒法dfu燒錄。。。
可以多個(gè)大小字體切換,改變填充方式后也更漂亮了。同時(shí)移植了mathbasic解釋器上去
tiny-math-basic解釋器
總結(jié)
以上是生活随笔為你收集整理的基于GD32VF103 的vga显示器 和ps2键盘 驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频APP源码,支持第三方支付,卡密充值
- 下一篇: 细谈keep_alive