PSoC Express和簡(jiǎn)單游戲機開(kāi)發(fā)應用
PSoC(可編程片上系統)是Cypress半導體公司生產(chǎn)的包含有8位微處理器核和數字與模擬混合的信號陣列芯片,其應用領(lǐng)域與8位的MCU相同。與8位的MCU的區別在于PSoC的數字周邊資源(如定時(shí)器、PWM、UART等等)和模擬周邊資源(放大器、比較器、濾波器等等)以數字模塊和模擬模塊的方式給出。不同型號的PSoC芯片的差異,主要是擁有數字模塊和模擬模塊的數量不同,用戶(hù)可以根據自己的需要來(lái)定義這些模塊。所有這些預定義的模塊稱(chēng)為用戶(hù)模塊。在PSoC Express出現以前,開(kāi)發(fā)PSoC的應用項目與MCU的應用開(kāi)發(fā)相似,使用PSoC Designer集成開(kāi)發(fā)環(huán)境,根據項目的需要調用和配置資源(用戶(hù)模塊),然后編寫(xiě)代碼(C或匯編)、編譯、調試等步驟,制成目標芯片。
本文引用地址:http://dyxdggzs.com/article/81551.htm現在由于PSoC Express可以在更高的抽象概念水平上運行,且無(wú)需匯編或C語(yǔ)言的軟件開(kāi)發(fā),因此設計人員只需要數小時(shí)或數天時(shí)間即可完成對PSoC器件的新設計開(kāi)發(fā)、仿真及編程,而不再耗時(shí)數周乃至數月。
PSoC Express的開(kāi)發(fā)過(guò)程
使用PSoC Express的開(kāi)發(fā)過(guò)程主要有四個(gè)步驟,它們是:
1. 選擇輸入和輸出
運行PSoC Express,選擇 Design選項夾,根據設計的需要選擇相應的輸入、輸出和接口驅動(dòng)器,并根據要求設定驅動(dòng)器的參數。
2. 定義輸出的行為
根據不同的輸入變化來(lái)定義系統的輸出行為。輸入/輸出關(guān)系比較簡(jiǎn)單時(shí),輸出驅動(dòng)器提供三種傳輸函數:優(yōu)先編碼器、狀態(tài)編碼器和表格對應器,直接使用這三種傳輸函數建立起輸入和輸出的關(guān)系。輸入/輸出的關(guān)系比較復雜時(shí),需要使用評估器(Valuator),評估器包含6個(gè)傳輸函數,除了輸出驅動(dòng)器的三種傳輸函數以外,評估器還有環(huán)路延時(shí)、狀態(tài)機和閾值三種傳輸函數。
3. 仿真和驗證
仿真為軟仿真,它主要通過(guò)交互方式來(lái)改變輸入值或狀態(tài),輸出驅動(dòng)器和評估器的狀態(tài)或數值圖形塊中的參數值隨即發(fā)生相應的變化,通過(guò)觀(guān)察這個(gè)變化,用戶(hù)可以評估和驗證設計結果的正確性。
4. 生成系統文件和下載十六進(jìn)制編程文件到PSoC芯片。至此,可以在實(shí)驗板上驗證設計功能是否達到了設計的要求。
優(yōu)先編碼器傳遞函數和狀態(tài)機傳遞函數
1.優(yōu)先編碼器傳遞函數
優(yōu)先編碼器傳遞函數是最常用的傳遞函數。它是基于表達式的實(shí)施一系列IF(…)Then(…)、Else IF(…) Then(…)…的操作,進(jìn)而得到一個(gè)可以用作輸出的值。括號里的表達式類(lèi)似C語(yǔ)言里的表達式。表達式里的變量來(lái)自輸入驅動(dòng)器的輸出或其他評估器的輸出。對于實(shí)施一系列
IF(…)Then(…)
Else IF(…) Then(…)
…
的操作,從上到下,只要一遇到IF(…)里面的表達式為真,下面的語(yǔ)句將不再執行。由此可知,只有一個(gè)IF(…) Then(…)語(yǔ)句真正被執行,越是前面的語(yǔ)句優(yōu)先級越高。
2.狀態(tài)機傳遞函數
通常一個(gè)系統中會(huì )有多個(gè)狀態(tài),當滿(mǎn)足一定的條件或被某個(gè)事件觸發(fā)時(shí),系統會(huì )從一個(gè)狀態(tài)轉變到另一個(gè)狀態(tài)。在PSoC Express中,僅有評估器的狀態(tài)機傳遞函數才能實(shí)施這一功能,而輸出驅動(dòng)器是沒(méi)有狀態(tài)機傳遞函數的。
為了實(shí)施這一功能,用鼠標右鍵點(diǎn)擊評估器圖標,選擇狀態(tài)機傳遞函數。首先要為所有可能的狀態(tài)定義狀態(tài)名,然后設置觸發(fā)條件,并選擇該觸發(fā)條件之前和之后的狀態(tài),給每個(gè)觸發(fā)條件命名。通常觸發(fā)條件用表達式來(lái)表示。每設置一個(gè)觸發(fā)條件,就有一條帶箭頭的藍線(xiàn)將兩個(gè)轉換之前和之后的狀態(tài)連接起來(lái)。所有的觸發(fā)條件都設置好了以后,我們在屏幕上可以看到所熟悉的狀態(tài)轉換圖。狀態(tài)機傳遞函數的輸出就是某一個(gè)用狀態(tài)名表示的狀態(tài),在所有的狀態(tài)中必須定義一個(gè)狀態(tài)為初始狀態(tài),它以綠色表示,如圖1所示。
簡(jiǎn)單游戲機設計
石頭、剪刀、布游戲機包括三個(gè)輸入驅動(dòng)器、四個(gè)輸出驅動(dòng)器和四個(gè)評估器。三個(gè)輸入驅動(dòng)器就是三個(gè)輕觸按鍵,分別代表石頭、剪刀、布用于用戶(hù)作競猜選擇。四個(gè)輸出驅動(dòng)器都是LCD,分別是一個(gè)16X2字符點(diǎn)陣LCD的四個(gè)部分,用于顯示每次競猜的輸贏(yíng)和狀態(tài)以及玩家的分數。四個(gè)評估器中的兩個(gè)用于產(chǎn)生隨機數1或2或3,分別代表石頭、剪刀、布參與和用戶(hù)的競猜。一個(gè)評估器用于測試三個(gè)輕觸按鈕是否處于空閑等待狀態(tài),以便LCD的顯示從競猜結果狀態(tài)返回到競猜前的等待狀態(tài)。另一個(gè)評估器實(shí)施各種狀態(tài)的轉換,以便在不同的時(shí)刻給出一個(gè)正確的狀態(tài),如圖2所示。
輸入驅動(dòng)器 Rock(石頭)、Scissor(剪刀)和Paper(布)三個(gè)輕觸按鈕分別有四個(gè)可能的輸出狀態(tài):上升沿、下降沿、ON、OFF,連接AllOff和m評估器。Roll和Pick兩個(gè)評估器的傳遞函數產(chǎn)生隨機數1或2或3。Roll的傳遞函數如下:
if(m_state==m_state__ WaitForYouToPlay)&&(Roll==0) then Roll = 1
else if(m_state==m_state__ WaitForYouToPlay)&&(Roll<128) then Roll = Roll*2
else if(m_state==m_state__ WaitForYouToPlay) then Roll = ((Roll-128)*2^0x71
Pick的傳遞函數僅有一條語(yǔ)句:
If(1) then Pick = (Roll%3)+1
AllOff也使用傳遞函數測試三個(gè)輕觸按鈕是否處于空閑等待狀態(tài):
if(Rock==Rock__On) then AllOff = 0
else if(Paper==Paper__On) then AllOff = 0
else if(Scissors==Scissors__On) then AllOff = 0
else if(1) then AllOff = 1
m評估器用狀態(tài)機傳遞函數實(shí)現9個(gè)狀態(tài)的轉換如圖3所示。Start為初始狀態(tài)用綠顏色表示,如果任意一個(gè)按扭被按,觸發(fā)條件變?yōu)椋?br />
(Rock==Rock__Rising_Edge)||(Paper== Paper__Rising_Edge)||(Scissors== Scissors__Rising_Edge)
產(chǎn)生觸發(fā)從初始狀態(tài)進(jìn)入等待狀態(tài) WaitForYouToPlay,等待用戶(hù)競猜。一旦再有按鍵被按,就進(jìn)入Rock、Scissors、Paper的三個(gè)選擇狀態(tài)之一。
接下來(lái)馬上實(shí)施三個(gè)判斷:Pick等于1(Rock)或2(Paper)或3(Scissors)?由于Pick評估器的輸出就是這三個(gè)值之一,所以必然有一個(gè)條件滿(mǎn)足。無(wú)論是Iwin或Draw或YouWin狀態(tài),都無(wú)條件地進(jìn)入到Converge狀態(tài),因為這三個(gè)狀態(tài)轉換到Converge的觸發(fā)條件rrr、ddd、sss都是1。當按鍵被釋放以后,Converge狀態(tài)便返回到等待狀態(tài) WaitForYouToPlay,因為它的觸發(fā)條件是All Off。
對于普遍使用的16X2字符點(diǎn)陣LCD模塊(如S01602芯片),針對不同顯示方式,PSoC Express有多個(gè)LCD的輸出驅動(dòng)器。這里用這個(gè)LCD模塊的四個(gè)四分之一(第一排左邊和右邊,第二排左邊和右邊)以字符和數字來(lái)顯示不同的內容。它們都是用優(yōu)先編碼器傳遞函數來(lái)實(shí)現狀態(tài)和結果顯示。第一個(gè)LCD驅動(dòng)器My Pick在第一排左邊顯示PSoC競猜選擇項目(Rock或Scissor或Paper),在開(kāi)始狀態(tài)顯示Any Key,在等待狀態(tài)顯示Please。它的傳遞函數:
if(m_state==m_state__Start) then LCDMyPick=LCDMyPick __Label_4
else if(m_state==m_state__ WaitForYouToPlay) then LCDMyPick=LCDMyPick__Label_5
else if(m_state==m_state__ YouSelectedRock) then LCDMyPick = Pick
else if(m_state==m_state__ YouSelectedPaper) then LCDMyPick =Pick
else if(m_state==m_state__ YouSelectedScissor) then LCDMyPick = Pick
Label_4是Any Key, Label_5 是Please在驅動(dòng)器的參數中設定。第二個(gè)至第四個(gè)LCD驅動(dòng)器的傳遞函數從略。
結語(yǔ)
在 PSoC Expess的開(kāi)發(fā)環(huán)境下用三個(gè)輸入驅動(dòng)器、四個(gè)輸出驅動(dòng)器和四個(gè)評估器實(shí)現石頭、剪刀、布的游戲,其中四個(gè)輸出驅動(dòng)器和四個(gè)評估器中的三個(gè)使用了優(yōu)先編碼器傳遞函數,而僅一個(gè)評估器使用了狀態(tài)機傳遞函數??梢钥吹?,使用無(wú)代碼的圖形化的PSoC芯片的集成開(kāi)發(fā)環(huán)境PSoC Expess開(kāi)發(fā)項目簡(jiǎn)單而易行,快捷而有趣。
評論