用于NIOS II 嵌入式處理器系統(tǒng)的鼠標控制器設計
q是從鼠標收到的數(shù)據(jù),它的q[0],q[11]等是起始位,應為邏輯0;q[10],q[21]等是停止位,應是邏輯1;q[9],q[20]等為奇偶校驗位。在驗證數(shù)據(jù)幀狀態(tài)下根據(jù)測試得到的packet_good信號值確定是跳轉到等待狀態(tài)還是輸出數(shù)據(jù)幀狀態(tài)。
該鼠標控制器缺省狀態(tài)為標準PS/2模式,要進入微軟的Intellimouse只需向鼠標發(fā)送前文(見1.2)所提到的命令序列,并將msmode置為邏輯1即可。
2、鼠標控制器的驗證
我們在一個使用Altera公司的Cyclone系列[5]的 EP1C6Q240C8 芯片的開發(fā)板上對該設計進行了驗證。在NiosII IDE集成開發(fā)環(huán)境[6]中我們編寫了一個測試程序。其部分代碼如下所示,它的作用是等待鼠標事件的發(fā)生并打印鼠標事件信息。
while (wait_rx_ready(0,PS2_READY,PS2_MOUSEDATA,data) 0);
if ((data PS2_RBUTTON)){
printf(RBUTTON......n);}
else if ((data PS2_LBUTTON)) {
printf(LBUTTON......n);}
else if((data PS2_MBUTTON)) {
printf(MBUTTON......n);}
else {
xdata = (data PS2_XMASK) >> PS2_XSHIFT;
ydata = (data PS2_YMASK) >> PS2_YSHIFT;
zdata = (data PS2_ZMASK) >> PS2_ZSHIFT;
printf(x: %d, y: %d, z: %dn, xdata, ydata, zdata);
}
我們測試了一個帶滾輪的雙飛燕光電鼠標和一個不帶滾輪的飛利浦的機械鼠標。測試中,當我們分別按下鼠標左鍵,右鍵,及中鍵;或在水平方向,豎直方向移動鼠標;或者轉動滾輪時,程序都會在NiosII IDE的Console窗口連續(xù)的打印出相應的信息。滿足了我們支持標準PS/2(IBM PS/2)和微軟的Intellimouse兩種模式的要求。結果證明,本文所提出的設計是成功的。
3、結束語
本文介紹了一個用于Nios II處理器系統(tǒng)的鼠標控制器的設計,支持標準PS/2 鼠標和微軟的Intellimouse。相比于其他嵌入式系統(tǒng)中采用另外增加一個單片機(如一般采用的Intel8042或AT89C51[7]等)作為鼠標控制器來說,減少了系統(tǒng)成本,也減少硬件布板布線的復雜性,可以在Nios II處理器系統(tǒng)中廣泛使用。
該設計最大的創(chuàng)新點在于增加了讀取鼠標響應的功能,并實現(xiàn)了主機向鼠標發(fā)送命令,在此基礎上實現(xiàn)了對微軟的Intellimouse的支持,相比參考文獻[8]中提到的2D鼠標控制器有較大的改進。
評論