以前,MicroC/OS-IIの良いチュートリアルがないなどと書いていましたが,
HirokiNakaharaOboe-TipsのRTOS入門を発見.
外部割込みでタスクを起動するサンプルまである.
すばらしい!これこそ求めていたものだ.
DE2のサンプルですが,Simさんのサンプルにsystem timerさえ追加すれば
動きそうな気がするので,早速挑戦.
まず,Componet LibraryのPeripheralsから,
Microcontroller Peripherals -> Interval Timerを追加します.
![](https://blogimg.goo.ne.jp/user_image/71/ea/a8d44c047d2dd8b0aec966a64e3dba1d.png)
Timeout periodは1msに設定します.
(クリックで拡大)
外部割込みのサンプルも試してみたかったので,ボタンスイッチ用のPIOも追加しました.
KEY[0]はリセットボタンに使っているので,KEY[1]を外部割込みに使います.
オープンの状態でpull-upされているので,割り込みの設定をfalling edgeにします.
(クリックで拡大)
MicroC/OS-IIはNios II/eでは動作しませんので,fastに変更します.
勘違いでした.economyでも問題なく動作します.
(クリックで拡大)
最終的な接続は以下の通りです.
button_pio_0とtimer_0からは,Nios IIに割り込み信号が繋がっています.
(クリックで拡大)
DE0_Nano.vも,button_pio_0とKEY[1]が繋がるように修正します.
![](https://blogimg.goo.ne.jp/user_image/0c/78/d12112b9f6ced2d8886c9efb83238e28.png)
変更はこれで全部です.後は,論理合成をして,sofファイルをDE0-Nanoに書き込みます.
Nios II Software Build Tools for Eclipseでは,これまでと同じように,
FileメニューからNew -> Nios II Application and BSP from Templateを選びます.
SOPC Information File nameにsopcinfoファイルを読み込み,
TemplateにはHello MicroC/OS-IIを選びます.
(クリックで拡大)
Templateのhello_niosii.cでは,task1とtask2が実行される周期がどちらも
3秒に設定されています.そこで,task1の周期を1秒に変更して実行してみました.
![](https://blogimg.goo.ne.jp/user_image/6b/47/446af2857368765f7572e6c3fef333aa.png)
結果は意図したとおりに,taks1が3回実行された後にtask2が実行されています.
![](https://blogimg.goo.ne.jp/user_image/6e/34/e1eead7b8e73f78bda85b7650d589486.png)
さらに,HirokiNakaharaOboe-TipsのNios IIで割り込みを使うにはの記事を参考に,
外部割込みによるタスクの起動も動作を確認することができました.
ナイトライダーのように左右に点滅しながら動いているLEDが,
KEY[1]を押すと一瞬だけ全て点灯します.
DE0-Nanoのプロジェクトファイルをアップロードしておきますので,
興味のある方はお試しください.
http://www.sensorcomm.co.jp/osqzss/fpga/namuru/DE0_Nano_uCOS2.zip
HirokiNakaharaOboe-TipsのRTOS入門を発見.
外部割込みでタスクを起動するサンプルまである.
すばらしい!これこそ求めていたものだ.
DE2のサンプルですが,Simさんのサンプルにsystem timerさえ追加すれば
動きそうな気がするので,早速挑戦.
まず,Componet LibraryのPeripheralsから,
Microcontroller Peripherals -> Interval Timerを追加します.
![](https://blogimg.goo.ne.jp/user_image/71/ea/a8d44c047d2dd8b0aec966a64e3dba1d.png)
Timeout periodは1msに設定します.
![](https://blogimg.goo.ne.jp/user_image/47/be/fd467eb9faac1d1d337bd9a9c7b26144.png)
外部割込みのサンプルも試してみたかったので,ボタンスイッチ用のPIOも追加しました.
KEY[0]はリセットボタンに使っているので,KEY[1]を外部割込みに使います.
オープンの状態でpull-upされているので,割り込みの設定をfalling edgeにします.
![](https://blogimg.goo.ne.jp/user_image/5b/10/2c27c9483eb7bfd8b490c76209962aea.png)
勘違いでした.economyでも問題なく動作します.
![](https://blogimg.goo.ne.jp/user_image/15/ee/1f1aeac0f54e594f45d4d1c91fb888fb.png)
最終的な接続は以下の通りです.
button_pio_0とtimer_0からは,Nios IIに割り込み信号が繋がっています.
![](https://blogimg.goo.ne.jp/user_image/4d/91/f5eacf5805b8dbb00109792d319aa702.png)
DE0_Nano.vも,button_pio_0とKEY[1]が繋がるように修正します.
![](https://blogimg.goo.ne.jp/user_image/0c/78/d12112b9f6ced2d8886c9efb83238e28.png)
変更はこれで全部です.後は,論理合成をして,sofファイルをDE0-Nanoに書き込みます.
Nios II Software Build Tools for Eclipseでは,これまでと同じように,
FileメニューからNew -> Nios II Application and BSP from Templateを選びます.
SOPC Information File nameにsopcinfoファイルを読み込み,
TemplateにはHello MicroC/OS-IIを選びます.
![](https://blogimg.goo.ne.jp/user_image/47/59/3e8259b32ae1822a1135d3e63ec54a96.png)
Templateのhello_niosii.cでは,task1とtask2が実行される周期がどちらも
3秒に設定されています.そこで,task1の周期を1秒に変更して実行してみました.
![](https://blogimg.goo.ne.jp/user_image/6b/47/446af2857368765f7572e6c3fef333aa.png)
結果は意図したとおりに,taks1が3回実行された後にtask2が実行されています.
![](https://blogimg.goo.ne.jp/user_image/6e/34/e1eead7b8e73f78bda85b7650d589486.png)
さらに,HirokiNakaharaOboe-TipsのNios IIで割り込みを使うにはの記事を参考に,
外部割込みによるタスクの起動も動作を確認することができました.
ナイトライダーのように左右に点滅しながら動いているLEDが,
KEY[1]を押すと一瞬だけ全て点灯します.
DE0-Nanoのプロジェクトファイルをアップロードしておきますので,
興味のある方はお試しください.
http://www.sensorcomm.co.jp/osqzss/fpga/namuru/DE0_Nano_uCOS2.zip
※コメント投稿者のブログIDはブログ作成者のみに通知されます