新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PSoC Express和簡(jiǎn)單游戲機(jī)開發(fā)應(yīng)用

PSoC Express和簡(jiǎn)單游戲機(jī)開發(fā)應(yīng)用

作者:賽普拉斯半導(dǎo)體資深主任應(yīng)用工程師 翁小平 時(shí)間:2008-04-15 來源:電子產(chǎn)品世界 收藏

  PSoC(可編程片上系統(tǒng))是Cypress半導(dǎo)體公司生產(chǎn)的包含有8位微處理器核和數(shù)字與模擬混合的信號(hào)陣列芯片,其應(yīng)用領(lǐng)域與8位的MCU相同。與8位的MCU的區(qū)別在于PSoC的數(shù)字周邊資源(如定時(shí)器、PWM、UART等等)和模擬周邊資源(放大器、比較器、濾波器等等)以數(shù)字模塊和模擬模塊的方式給出。不同型號(hào)的PSoC芯片的差異,主要是擁有數(shù)字模塊和模擬模塊的數(shù)量不同,用戶可以根據(jù)自己的需要來定義這些模塊。所有這些預(yù)定義的模塊稱為用戶模塊。在出現(xiàn)以前,開發(fā)PSoC的應(yīng)用項(xiàng)目與MCU的應(yīng)用開發(fā)相似,使用PSoC Designer集成開發(fā)環(huán)境,根據(jù)項(xiàng)目的需要調(diào)用和配置資源(用戶模塊),然后編寫代碼(C或匯編)、編譯、調(diào)試等步驟,制成目標(biāo)芯片。

本文引用地址:http://m.butianyuan.cn/article/81551.htm

  現(xiàn)在由于可以在更高的抽象概念水平上運(yùn)行,且無需匯編或C語言的軟件開發(fā),因此設(shè)計(jì)人員只需要數(shù)小時(shí)或數(shù)天時(shí)間即可完成對(duì)PSoC器件的新設(shè)計(jì)開發(fā)、仿真及編程,而不再耗時(shí)數(shù)周乃至數(shù)月。

  的開發(fā)過程

  使用PSoC Express的開發(fā)過程主要有四個(gè)步驟,它們是:

  1. 選擇輸入和輸出

  運(yùn)行PSoC Express,選擇 Design選項(xiàng)夾,根據(jù)設(shè)計(jì)的需要選擇相應(yīng)的輸入、輸出和接口驅(qū)動(dòng)器,并根據(jù)要求設(shè)定驅(qū)動(dòng)器的參數(shù)。

  2. 定義輸出的行為

  根據(jù)不同的輸入變化來定義系統(tǒng)的輸出行為。輸入/輸出關(guān)系比較簡(jiǎn)單時(shí),輸出驅(qū)動(dòng)器提供三種傳輸函數(shù):優(yōu)先編碼器、狀態(tài)編碼器和表格對(duì)應(yīng)器,直接使用這三種傳輸函數(shù)建立起輸入和輸出的關(guān)系。輸入/輸出的關(guān)系比較復(fù)雜時(shí),需要使用評(píng)估器(Valuator),評(píng)估器包含6個(gè)傳輸函數(shù),除了輸出驅(qū)動(dòng)器的三種傳輸函數(shù)以外,評(píng)估器還有環(huán)路延時(shí)、狀態(tài)機(jī)和閾值三種傳輸函數(shù)。

  3. 仿真和驗(yàn)證

  仿真為軟仿真,它主要通過交互方式來改變輸入值或狀態(tài),輸出驅(qū)動(dòng)器和評(píng)估器的狀態(tài)或數(shù)值圖形塊中的參數(shù)值隨即發(fā)生相應(yīng)的變化,通過觀察這個(gè)變化,用戶可以評(píng)估和驗(yàn)證設(shè)計(jì)結(jié)果的正確性。

  4. 生成系統(tǒng)文件和下載十六進(jìn)制編程文件到PSoC芯片。至此,可以在實(shí)驗(yàn)板上驗(yàn)證設(shè)計(jì)功能是否達(dá)到了設(shè)計(jì)的要求。

  優(yōu)先編碼器傳遞函數(shù)和狀態(tài)機(jī)傳遞函數(shù)

  1.優(yōu)先編碼器傳遞函數(shù)

  優(yōu)先編碼器傳遞函數(shù)是最常用的傳遞函數(shù)。它是基于表達(dá)式的實(shí)施一系列IF(…)Then(…)、Else IF(…) Then(…)…的操作,進(jìn)而得到一個(gè)可以用作輸出的值。括號(hào)里的表達(dá)式類似C語言里的表達(dá)式。表達(dá)式里的變量來自輸入驅(qū)動(dòng)器的輸出或其他評(píng)估器的輸出。對(duì)于實(shí)施一系列

  IF(…)Then(…)
  Else IF(…) Then(…)
  …

  的操作,從上到下,只要一遇到IF(…)里面的表達(dá)式為真,下面的語句將不再執(zhí)行。由此可知,只有一個(gè)IF(…) Then(…)語句真正被執(zhí)行,越是前面的語句優(yōu)先級(jí)越高。

  2.狀態(tài)機(jī)傳遞函數(shù)

  通常一個(gè)系統(tǒng)中會(huì)有多個(gè)狀態(tài),當(dāng)滿足一定的條件或被某個(gè)事件觸發(fā)時(shí),系統(tǒng)會(huì)從一個(gè)狀態(tài)轉(zhuǎn)變到另一個(gè)狀態(tài)。在PSoC Express中,僅有評(píng)估器的狀態(tài)機(jī)傳遞函數(shù)才能實(shí)施這一功能,而輸出驅(qū)動(dòng)器是沒有狀態(tài)機(jī)傳遞函數(shù)的。

  為了實(shí)施這一功能,用鼠標(biāo)右鍵點(diǎn)擊評(píng)估器圖標(biāo),選擇狀態(tài)機(jī)傳遞函數(shù)。首先要為所有可能的狀態(tài)定義狀態(tài)名,然后設(shè)置觸發(fā)條件,并選擇該觸發(fā)條件之前和之后的狀態(tài),給每個(gè)觸發(fā)條件命名。通常觸發(fā)條件用表達(dá)式來表示。每設(shè)置一個(gè)觸發(fā)條件,就有一條帶箭頭的藍(lán)線將兩個(gè)轉(zhuǎn)換之前和之后的狀態(tài)連接起來。所有的觸發(fā)條件都設(shè)置好了以后,我們?cè)谄聊簧峡梢钥吹剿煜さ臓顟B(tài)轉(zhuǎn)換圖。狀態(tài)機(jī)傳遞函數(shù)的輸出就是某一個(gè)用狀態(tài)名表示的狀態(tài),在所有的狀態(tài)中必須定義一個(gè)狀態(tài)為初始狀態(tài),它以綠色表示,如圖1所示。

  簡(jiǎn)單游戲機(jī)設(shè)計(jì)

  石頭、剪刀、布游戲機(jī)包括三個(gè)輸入驅(qū)動(dòng)器、四個(gè)輸出驅(qū)動(dòng)器和四個(gè)評(píng)估器。三個(gè)輸入驅(qū)動(dòng)器就是三個(gè)輕觸按鍵,分別代表石頭、剪刀、布用于用戶作競(jìng)猜選擇。四個(gè)輸出驅(qū)動(dòng)器都是LCD,分別是一個(gè)16X2字符點(diǎn)陣LCD的四個(gè)部分,用于顯示每次競(jìng)猜的輸贏和狀態(tài)以及玩家的分?jǐn)?shù)。四個(gè)評(píng)估器中的兩個(gè)用于產(chǎn)生隨機(jī)數(shù)1或2或3,分別代表石頭、剪刀、布參與和用戶的競(jìng)猜。一個(gè)評(píng)估器用于測(cè)試三個(gè)輕觸按鈕是否處于空閑等待狀態(tài),以便LCD的顯示從競(jìng)猜結(jié)果狀態(tài)返回到競(jìng)猜前的等待狀態(tài)。另一個(gè)評(píng)估器實(shí)施各種狀態(tài)的轉(zhuǎn)換,以便在不同的時(shí)刻給出一個(gè)正確的狀態(tài),如圖2所示。

  輸入驅(qū)動(dòng)器 Rock(石頭)、Scissor(剪刀)和Paper(布)三個(gè)輕觸按鈕分別有四個(gè)可能的輸出狀態(tài):上升沿、下降沿、ON、OFF,連接AllOff和m評(píng)估器。Roll和Pick兩個(gè)評(píng)估器的傳遞函數(shù)產(chǎn)生隨機(jī)數(shù)1或2或3。Roll的傳遞函數(shù)如下:

  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的傳遞函數(shù)僅有一條語句:

  If(1)  then Pick = (Roll%3)+1

  AllOff也使用傳遞函數(shù)測(cè)試三個(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評(píng)估器用狀態(tài)機(jī)傳遞函數(shù)實(shí)現(xiàn)9個(gè)狀態(tài)的轉(zhuǎn)換如圖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,等待用戶競(jìng)猜。一旦再有按鍵被按,就進(jìn)入Rock、Scissors、Paper的三個(gè)選擇狀態(tài)之一。

  接下來馬上實(shí)施三個(gè)判斷:Pick等于1(Rock)或2(Paper)或3(Scissors)?由于Pick評(píng)估器的輸出就是這三個(gè)值之一,所以必然有一個(gè)條件滿足。無論是Iwin或Draw或YouWin狀態(tài),都無條件地進(jìn)入到Converge狀態(tài),因?yàn)檫@三個(gè)狀態(tài)轉(zhuǎn)換到Converge的觸發(fā)條件rrr、ddd、sss都是1。當(dāng)按鍵被釋放以后,Converge狀態(tài)便返回到等待狀態(tài) WaitForYouToPlay,因?yàn)樗挠|發(fā)條件是All Off。

  對(duì)于普遍使用的16X2字符點(diǎn)陣LCD模塊(如S01602芯片),針對(duì)不同顯示方式,PSoC Express有多個(gè)LCD的輸出驅(qū)動(dòng)器。這里用這個(gè)LCD模塊的四個(gè)四分之一(第一排左邊和右邊,第二排左邊和右邊)以字符和數(shù)字來顯示不同的內(nèi)容。它們都是用優(yōu)先編碼器傳遞函數(shù)來實(shí)現(xiàn)狀態(tài)和結(jié)果顯示。第一個(gè)LCD驅(qū)動(dòng)器My Pick在第一排左邊顯示PSoC競(jìng)猜選擇項(xiàng)目(Rock或Scissor或Paper),在開始狀態(tài)顯示Any Key,在等待狀態(tài)顯示Please。它的傳遞函數(shù):

  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在驅(qū)動(dòng)器的參數(shù)中設(shè)定。第二個(gè)至第四個(gè)LCD驅(qū)動(dòng)器的傳遞函數(shù)從略。

  結(jié)語

  在 PSoC Expess的開發(fā)環(huán)境下用三個(gè)輸入驅(qū)動(dòng)器、四個(gè)輸出驅(qū)動(dòng)器和四個(gè)評(píng)估器實(shí)現(xiàn)石頭、剪刀、布的游戲,其中四個(gè)輸出驅(qū)動(dòng)器和四個(gè)評(píng)估器中的三個(gè)使用了優(yōu)先編碼器傳遞函數(shù),而僅一個(gè)評(píng)估器使用了狀態(tài)機(jī)傳遞函數(shù)。可以看到,使用無代碼的圖形化的PSoC芯片的集成開發(fā)環(huán)境PSoC Expess開發(fā)項(xiàng)目簡(jiǎn)單而易行,快捷而有趣。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉