7.チュートリアルに沿って試してみよう (UART ソフトコンソールフロー)7-1. SoftConsole Standalone Flow Tutorial を見てみよう今回は実際にSoftConsoleを使用して、SmartFusionの構成と、ARMのCプログラミングを行ってみます。今回の最も注目すべき点は 「ARMと装備されているハードIPを使用するだけで、FPGA部を全く使用しない場合はSoftConsoleとFrashProだけで設計、実行できる。つまりLiberoIDEの出番は無し。」 ということです。 FPGA部は使わないで、IP選んでARMで動作させたいとかいうときは今回の手順の応用で行けます。多分 (^_^;);。 チュートリアルとデータのZIPをダウンロードしておきます。 http://www.actel.com/products/hardware/devkits_boards/smartfusion_eval.aspx にある Using UART with SmartFusion: SoftConsole Standalone Flow Tutorial のSmartFusion_UART_SW_flow_tutorial_UG.pdf とDesign Files (ZIP, 3.9 MB, 2/11) SmartFusion_UART_SW_flow_tutorial_DF.zip をダウンロードしてきます。 今回はZIPファイルの中身は全部使わないで必要なところだけ利用します。(ZIPの中には全部入っているので単なるデモになっちゃうので。) ZIPをとりあえず解凍しておきます。 C:\Actelprj\SmartFusion に置いて解凍すると、SmartFusion_UART_SW_flow_tutorial_DFというフォルダができて、さらにSoftConsoleの下に何個かフォルダができますね。 7-2. SoftConsole Standalone Flow Tutorial に沿って構築してみよう手順としては
7-2-1. SoftConsoleでプロジェクト作成スタート->すべてのプログラム->Microsemi SoftConsole v3.3->Micorsemi Softconsele IDE v3.3.0.14 を選択します。(2011/06/12現在、バージョンは変わる可能性があるので都度読み替えてください)ActelでなくMicorsemiであることに注意します。 Workspace Launcherが開きました。チュートリアルにあるとおり、WorkspaceにC:\Actelprj\SmartFusion/SoftConsole といれてOKをクリックします。
SoftConsoleが立ち上がりました。
次にツールバーの File->New->C projectを選択します。 C Projectが開くので Project nameに polled_uart_sc を入力します。Project type:がEmpty Project、Toolchains:がMirocsemi Cortex-M3 Tools になっていることを確認して、Nextをクリックします。
DebugとReleaseにチェックが付いていることを確認してFinishを押します。
SoftConsoleの左のProcectExplorerにpolled_uart_scという名前のCと付いたフォルダアイコンができましたね。 これをクリック(シングルクリックで良い)して、有効になった状態にしておきます。(重要。選択されていないと次のMSS Configuratorが選択できないです) 7-2-2. SnartFusion MSS 構成次にツールバーより Run->RunSmartFusion MSS Configuratorを選択します。これにより今回どのIPを使うかとかそのIPの動作を設定します。 Create a new project が選択されていること、CoreにSmartFusion Microsontoroller Subsystem(MSS) Version2.4.1.05 となっていること、を確認し、Nextをクリックします。
FamilyがSmartFusion、DieがA2F200M3F、Packageが484FBGAになっていることを確認します。メガメガボードはこのタイプのデバイスが載っているのでこれ以外を選択すると動作しないので注意して確認します。OKであればNextをクリックです。
ここで、FPGAの開発言語を選択する画面に来ます。今回はFPGA部の開発は行わないのでどっちでも良いのですが、Verilogを選択しておきます。 もし、FPGA部の開発がある場合であってもVerilogをオススメします。お仕事でASICとかFPGAの開発をしていますが、案件ではVerilogの方が多い事、開発効率がVerilogの方が良い事等の理由からです。業務上VHDLしかダメや、とかVHDLで書かんと単位がもらえんとか、おばあちゃんの遺言でVHDLとか、で無い限りVerilogで行きます。 って、話しがそれたのでもどって、次にいきます。Verilogを選択してFinishをクリックです。
SmartDesign MSS Configurator - polled_uart_sc_MSS で、Canvas の画面が開きましたね。 折角なのでどのようなブロックがあるかさらっとみておきます。左上から
こうやってみてみると結構いろいろなものが装備されていますね。 それぞれのブロックに色が付いていますが
青色のブロックの右したにはスパナみたいなマークとチェックボックスが付いていますが、スパナみたいなマークは設定ができることを示し、チェックボックスは使うか使わないかを設定できます。 折角載っているんだから全部使うでいいじゃん。って話もありますが、使わないってすることにより電力を抑えることができます(そうだよね)。世の中エコですよ、エコ。
で、今回使用しないブロックをディゼイブルにします。使わないのは (ACE), MAC, EMC, Fabric Interface, UART_1, SPI_0, SPI_1, I2C_0, and I2C_1.です。これらのチェックを外します。チェックできるブロックで残ったのはUART_0とWatchDocだけですね。
さて、各ブロックの設定をしていきます。まずはクロックです。 Clock Management ブロックをダブルクリックしてみます。 ・CLKAがOn-Chip RC Oscillator ・MSS clock sourceがPLLの出力(VCOの出力)。PLLという緑の箱の右横に横になった茶色い台形がありますね。入力を3箇所から選べますが、真ん中を選択します。デフォルトでは上が選ばれています。 ・MSS clock frequencyは80MHz。先程の台形の右横ちょい下に MHz の入力を入れるテキストエリアがあります。ここに 80.000 と入力します。デフォルトでは100MHzになっています。 OKをクリックして次へ進みます。
次にFirmwareタブを選択します。なにやら表みたいなのが出てきましたね。 この表は今回使用するファームウェア(ハードとソフトの橋渡しプログラムのようなものと思ってください)を設定します。 チェックするのは MSS_UART_Driver_0、MSS_Watchdog_Driver_0、Smart_Fusion_CMSIS_PAL_0です。それ以外のはチェックをはずします。 で、CMSIS_PALって何?と思っちゃいますが、SmartFusion Cortex Microcontroller Software Interface Standard - Peripheral Access Layer (CMSIS-PAL).ということで内部のCoretexM3を制御する部分のようです。詳細はSmart_Fusion_CMSIS_PAL_0行を左クリックで選択しておいてから、右クリックするとShow Details...とあるのでそれをクリックすると説明を見ることができます。またOpen Documentationで SmartFusion_CMSIS-PAL_RN.pdfを開き詳細をみることもできます。 またConfigureで、今回使用するSoftConsoleを選択しておきます。(今回はKeilとかIARを選択してはダメです。) 選び終わったら 左上の File->Save polled_uart_sc_MSS でセーブします。(必ずセーブすることを忘れないように!)
次にDesign->Generateで回路生成します。超重要。これを忘れると後々、何で動かんのん?と悩むことになります。 数分かかります。(途中で応答なしになっちゃったりしますけどしばしガマンです。 成功すると、ログウィンドウに ネットリスト、NVMプログラミングファイルが作成されたことが表示されます。 メモリマップを見るには Design->Show Memory Map/Data Sheet を選択すると、入出力部のアドレスが判ります。 注:Logに Error:Unable to create directory:. とか出ますが、問題なく生成されているようです。 Info: Design "polled_uart_sc_MSS" was successfully generated. と表示されればOKです。 作成終了したら、File->ExitでSmartDesign MSS Configuratorを抜けます。
ソフトコンソールで polled_uart_scの左の白三角をクリックすると階層下に、CMSISとかdriveとかpolled_uart_sc_MSSとかpolled_uart_sc_MSS_tmp_cmsis_svd.xmlとかができていますね。
7-2-3. SnartFusion Cプログラム作成さて、ここからいよいよCのプログラミングをします。ソフトコンソールで File->New->Source File を選択します。Source Folder:にはpolled_uart_scとすでに入っているので、Source File:に main.c と入力します。 そしてFinishをクリックします。
するとソフトコンソールに中央のペーンに main.c というタブがヘッダー部分数行入力された状態で開きます。 その行は消しよいので、SmartFusion_UART_SW_flow_tutorial_UG.pdf の P17 にあるCプログラムを入力します。 手で打って行ってもよいですし、ざくっと選択して、コピー、ペーストしても良いです。短いですし、ARMのCを覚えるという意味でも手入力した方が良いかもしれません。 では、どうぞ...。 : : : えー、入りましたでしょうか。以下のような感じですね。 File->Saveで保存しておきます。 折角なのでプログラムをざっと見ておくと
polled_tx_stringとpolled_txの違いは複数行0が来るまで送るか、文字数指定で送るかの違いのようです。
さてここからちょっとライブラリの設定になります。ちょっとややこしいので間違えないように。 この設定ってSmartFusionでARM Cプログラム使うときの おまじないみたいなもんですね。 Project Explorer の polled_uart_scを左クリックで選択したあと右クリックでPropertiesを選びます。 左のペーンからC/C++ buildのSettings をクリックします。右ペーンにSettingsが開くので、Tool SettingタブのGNU C LinkerのMiscellaneousを選択します。結構深いところにありますね。 ここの Linker flags の所に、-T ../CMSIS/startup_gcc/debug-in-actel-smartfusion-esram.ld を入力します。 これはSmartFusionのARM用ライブラリのようです。なのでSmartFusionでARMソフト開発を行うときには必ずここの設定が必要になります。 1つのプロジェクトでは最初に1回設定すれば良いですが、新しいプロジェクトのときはやはりこの設定が必要です。毎度のことながら忘れやすいので注意します。(実際、これ忘れてて、コンパイルできないなぁ、なんでだーってなりました(^-^;); ) 設定し終わったら Apply->OK で閉じます。
さて、いよいよコンパイルですよ〜、ドキドキしますね。 Project->Cleanを選択します。 Clean all project になっているのを確認して、OKをクリック!
これぐらいであれば数秒〜数十秒で完了します。 Consoleタブを選ぶとコンパイル結果がわかります。 スクロールさせてみてエラーがなければOKです。もしエラーがあればその行番号が示されているはずなので、プログラムの修正をします。Saveも忘れずに。再度Project->Cleanを行います。エラーが無くなって最後まで行けば(GNU Listing Generatorの表示)OKです。
7-2-4. FlashProで構成とプログラムの転送さて、プログラムもコンパイルできたところで、実際にボードに転送してみます。まず、書き込みツールであるFlashProをソフトコンソールから呼び出すための設定をします。
次に、メガメガボードの設定です。今までと変えていなければそのままでOKのはずです。 念のために設定は
さて、FlashProを起動してみます。 ツールバーから、 Run -> External Tools -> External Tools Configuration を選択します。左のペーンに先ほど設定した Program -> FlashPro がみえています。 FlashProをクリックしてから、Runをクリックします。FlashProが立ち上がります。Updatesを確認しているようで、有効になるまで少し時間がかかります。
New Project アイコンボタンをクリックします。 Project Name: に polled_uart_fp と入力します。 ProjectLocation: で Browse をクリックするとダイアログが開きます。そこから、C:\Actelprj\SmartFusion\SoftConsole を選びOKをクリックします。自動的に末尾にpolled_uart_fpが付加されて入力されます。 OK をクリックして閉じます。
すこしして下のLogWindowに Created new project 'C:\Actelprj\SmartFusion\SoftConsole\polled_uart_fp\polled_uart_fp.pro' と表示されます。 次に Configure Devices をクリックします。 画面の真ん中にウィンドが開きます。 ここで、Programming file にある、Create ボタンをクリックします。
CreatePDBダイアログが開きます。ここで使用するデバイスとか、プログラムの位置を指定します。 Device:A2F200M3F をプルダウンから選択 Package:484FBGA をプルダウンから選択 Name:polled_uart_fp (すでに入力されているはずです) Location:C:\Actelprj\SmartFusion\SoftConsole\polled_uart_fp (すでに入力されているはずです) OKをクリック
つづいて、FlashPoint-polled_uart_fp.pdb が開きます。 今回必要なのはEmbedded Flash Memory の所だけなので、そこのチェックボックスにチェックを入れます。 Import が有効になるのでクリックします。開いた場所には残念ながら目的のファイルはないのでディレクトリを変えます。 C:\Actelprj\SmartFusion\SoftConsole\polled_uart_sc\polled_uart_sc_MSS\component\work\polled_uart_sc_MSS\MSS_ENVM_0 にMSS_ENVM_0.efc というファイルが目的のファイルです。クリックして、Importをクリックします。しかし、深いところにありますねぇ。 Save PDBをクリックして閉じます。。
先程の Programming file になにやらゾロゾロ表示されましたね。 Created new project 'C:\Actelprj\SmartFusion\SoftConsole\polled_uart_fp\polled_uart_fp.pro' PDB file 'C:\Actelprj\SmartFusion\SoftConsole\polled_uart_fp\polled_uart_fp.pdb' has been loaded successfully. となっていればOKです。 View Programmers アイコンボタンをクリックしてみます。 まんなかにProgrammer List Windowが開きました。ここでProgrammerNameとかProgammerTypeとかが表示されます。もし表示されないようならメガメガボードを接続し忘れているか、うまく認識できていません。正しく接続、認識させて、Refresh/Rescan for Programmers をクリックすると表示されます。 いよいよプログラミングです。 PROGRAM アイコンボタンをクリックします。 数秒後、 programmer '73018' : Finished: Sat Jul 02 23:05:45 2011 (Elapsed time 00:00:01) programmer '73018' : Executing action PROGRAM PASSED. o - o - o - o - o - o のように表示され、Programmer List Windowの Programmer Status に RUN PASSED と緑色の文字が表示されていれば成功です。 これでFlashProは閉じてよいです。File -> Exit で閉じます。Save it ? と聞かれるので はいを選びます。 7-2-5. デバッガーで実行確認さて、UARTの動作をみるためにTeraTermを起動、設定します。すでにデモを行っている場合は設定->シリアルポートで、ボーレートが正しく(57600)なっていることが確認できればOKです。
ちょっとメガメガボードのリセットボタンを押してみます。なにやらザラザラと意味不明な文字が表示されます。「うわ!壊れてる」とか思わないように。まだARMのソフトを動作させていないのでまだUARTの設定とか動作ができていないだけです。 さ、いよいよARMのプログラムを走らせますよ。 SoftConsoleのツールバーから Run -> Debug Configurations を選択します。 左のペーンにいろいろ表示されていますが、 Microsemi Cortex-M3 RAM Target をダブルクリックします。 Name:polled_uart_sc_Debug Project:polled_uart_sc C/C++Application Debug\polled_uart_sc になっているのを確認してDebugをクリックします。
Softconsoleにいろいろウィンドが開きます。また、メガメガボードにプログラムがロードされます。(LEDがキラキラするので判りますね) 次にDebug環境を開ますか(超意訳です。(^^;);)と聞かれるのでYesを選びます。
さらにデバッグ用の各ウィンドが開きます。
Resumeボタン(Debug の右側にある黄色い縦長四角と緑の横三角)かF8キーを押します。 画面にActelロゴと、Welcome to SmartFusion - The intelligent mixed-signal FPGA と表示されましたか。 また、メガメガボードの黄色のLEDがピカピカ点滅し動作していることが判ります。 えっと、これだけ?。ハイ、これだけです。 あ、そこそこ、暴れないように。(笑)
一時停止して、レジスタ値とかを見てみます。 Suspendボタン(Debug の横の黄色縦長四角2本の一時停止ボタン)かRun -> Suspend で止めます。 ボードの黄色LEDの点滅も止まります。 右上のペーンのRegistersをクリックしてみます。Mainをクリックすると現在のレジスタ値が表示されます。 また、Varialbesをクリックすると変数の値をみることができます。右上の最大化をクリックすると画面一杯れ見れます。
Window -> Show View -> Disassenbly で逆アセンブルリストが表示されます。その他 Show View から選択するとそのウィンドウに飛べます。 また Run -> Step Into (F5) や Step Over (F6) を選んでみます。1ステップづつ実行できます。今回のプログラムではwhileループの中に入っているので見かけ上なにも起こらないですね。ちょっと残念。 ちなみに、Step Into は関数が出てきたらその中に入って実行していきます。Step Overは関数が出てきたらその関数を実行して次の行に行きます。(関数の中は一気に実行) 一時停止して、Instruction Steping Mode i→ボタン を押してから、ステップ実行すると、アセンブラのコード毎に実行できます。 一時停止状態から再度動作させるにはResumeをクリックします。(もしくはF8) ブレークポイントをかけるには、main.c のウィンドでブレークポイントを設定したい行を選択してツールバーから Run -> Toggle Brakepoint で設定できます。実行していてその行に来ると一時停止します。Resumeで再実行できます。 最初から走らせたい時。 チュートリアルに書いてなくていろいろ試してみたのですが、どうもDebugペーンで 1 main()の行を選び右クリックでTerminate and Relaunchで良いようです。 またはTerminateで止めてしまって、再度走らせたい時。 Debugペーンで <terminated,ext value:0>〜の行を選び右クリックで Relaunchで良いようです。 ブレークをかけてみたり、main.cのペーンで行を選択して、右クリックするとメニューが出るのでいろいろ試してみます。 わけわかんなくなっても、Terminate(Debug 横の赤い四角ボタン)してRelaunchで復活できます。 終了するには Debug ペーンで、右クリックして Terminate and Remove を選択します。もしくはTerminate で実行を止めて Debug ペーンで、右クリックして Remove All Terminate を選択します。 ツールバーから File -> Exit を選択し、ソフトコンソールを終了します。 またTeraTermも ファイル -> 終了 で終了します。 7-3. おわりに結構長々となりましたが、ARMのプログラムを書いて実際に走らせる事ができました。 ツールに慣れは必要ですが、結構お手軽にソフト開発実行ができると思います。 後は、載っているIPの使用方法(関数とか)をマニュアル見て試していけば結構いろいろな事ができると思います。 次は LiberoIDEを使用したチュートリアルのフローを試してみます。 |
![]() |