Stellaris 1day Workshop Student Guide 日本語版 Jan 2010 Notice Creation of derivative works unless agreed to in writing by the copyright owner is forbidden. No portion of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior written permission from the copyright holder. Texas Instruments reserves the right to update this Guide to reflect the most current product information for the spectrum of users. If there are any differences between this Guide and a technical reference manual, references should always be made to the most current reference manual. Information contained in this publication is believed to be accurate and reliable. However, responsibility is assumed neither for its use nor any infringement of patents or rights of others that may result from its use. No license is granted by implication or otherwise under any patent or patent right of Texas Instruments or others. アプリケーション作成に向けて Module Topics アプリケーション作成に向けて ............................................................................................................. 4-1 Stellaris 用ソフトウェア....................................................................................................................... 4-2 ファームウェア開発パッケージ .................................................................................................... 4-2 RTOS.................................................................................................................................................. 4-5 StellarisWare 3rd パーティ・フォルダ ............................................................................................. 4-6 日本の 3rd パーティ ......................................................................................................................... 4-6 Lab 4 サンプルプログラムのビルド、デバッグを行う ................................................................... 4-7 Part1. LED の点滅周期をターミナルからコントロールするプログラムの作成 ...................... 4-8 Part2. StellarisWare のサンプルプロジェクトをビルド、デバッグ...........................................4-16 オプション演習....................................................................................................................................4-18 tiobj2bin ユーティリティを使い.bin ファイルを作成 .................................................................4-18 Stellaris 1day Workshop – For Application Development 4-1 Stellaris 用ソフトウェア ファームウェア開発パッケージ ファームウェア開発パッケージ 各評価キット/リファレンスキットごとに用意 多くのサンプルを同封 ペリフェラル・ドライバ ライブラリ USBライブラリ グラフィックスライブラリ オープンソースのTCP/IP、File System その他ユーティリティ・モジュール グラフィックス・ライブラリのサンプル 基本 オプション・ボタン キャンバス プッシュボタン チェックボックス コンテナ セキュリティ・キーパッド BLDC タッチスクリーン モーター・コントローラ ※このグラフィックス・ライブラリは特定のLCD パネル//コントローラを対象にした このグラフィックス・ライブラリは特定のLCDパネル ソフトウェアではありません。 Stellaris 1day Workshop – For Application Development 4-2 USB ライブラリ USB インターフェイス準拠 Stellaris は、USB デバイスおよび組み込みホスト準拠テストに合格 入手できるサンプル: デバイスの例: ホスト例: マス・ストレージ HID キーボード HID マウス Windows INF ファイルの記述とサポート対象クラス HID キーボード HID マウス CDC シリアル ジェネリック・バルク デバイス・ファームウェアのアップグレード オシロスコープ ベースとなる Windows ドライバを指す config 文字列をセットする PID/VID をセットする プリコンパイルされた DLL が用意されているため開発時間が短縮される デバイス・フレームワークを USBLib に統合 USB ホスト/デバイス オシロスコープのデモンストレーション オシロスコープ配線 オシロスコープ・デモ USB ホスト・モード メモリ・スティックへのデータ・ダンプ 2010/1/26 Stellaris 1day Workshop – For Application Development オシロスコープ・オプション USB デバイス・モード PC によるデモの制御 5 4-3 システム・プログラミング・オプション Stellaris シリアル・フラッシュ・ローダ デバッグ・インターフェイスを必要とすることなく、フラッシュ・プログ ラミングを可能にする小さなプログラム Stellaris MCU 製品はすべて、このローダがフラッシュ・メモリに事 前にロードされた状態で出荷 インターフェイス・オプションには、UART または SSI がある アプリケーション・ノート AN01242 を参照 Stellaris ブート・ローダ アプリケーション・ローダとして機能する小さなプログラム また、Stellaris マイクロコントローラ上で実行中のアプリケーショ ンのアップデート・メカニズムとしても使われる インターフェイス・オプションには、UART(デフォルト)、I2C、SSI、 イーサネット、USB がある アプリケーション・ノート AN01248 を参照 オンチップ・ソフトウェアの機能拡張(ROM) ROMに搭載されているStellarisWare® StellarisWare® DriverLib StellarisWare® ブートローダ その他のフラッシュ・メモリ節約オプション (AESテーブル、CRC) 使い方概要 1. ビルド・オプションにてTARGET_IS_TEMPEST_RB1 またはTARGET_IS_DUSTDEVIL_RA0をプリ・デファイン 2. driverlib/rom.hをインクルード driverlib/rom.hをインクルード 3. ROM_xxx() ROM_xxx() APIを使用 APIを使用 ※すべてのStellaris デバイスにROM ROMが搭載されているわけではありません。 が搭載されているわけではありません。 すべてのStellarisデバイスに Stellaris 1day Workshop – For Application Development 4-4 RTOS SafeRTOS概要 LM3S9B96のROMに搭載 規格 タスク生成 タスク状態 タスクプライオリティ スケジューリング クリティカルセクション ISRプライオリティ メッセージキュー セマフォ イベントフラグ mutex メモリプール 時間管理 使用SRAM freeRTOSをベースとした独自仕様 数量無制限(メモリ依存)、動的生成(スタックは動的生成せず) Ready / Running / Blocked (WAIT) / Suspended 0:最低 < 10:最高 (ROM版での制限)、動的変更可能 プリエンプティブかつタイムスライス(同優先度のラウンドロビン) 割り込み禁止(Disable可能なもののみ)、もしくは スケジューラのサスペンド(ISRの実行が可能) Disable可能 7:最低 < 5:最高 (API実行可能) Disable不可能 4:最低 < 0:最高 (API実行禁止) あり(バッファは動的生成せず) なし(キューを利用した実装が可能) なし なし なし Systick timer を利用。Tick数の取得、一定時間のDelayが可能 524Byte (0x20000000 – 0x0000020C固定) DSP/BIOS6概要 TI DSP向けRTOSをARMコアに対応 規格 スレッド・モデル Swi生成 Swi状態 Swiプライオリティ タスク生成 タスク状態 タスクプライオリティ スケジューリング クリティカルセクション キュー セマフォ イベントフラグ mutex メモリプール 時間管理 使用SRAM 独自仕様 Hwi / Swi / Task / Idle 数量無制限(メモリ依存)、動的生成可能 Inactive / Ready / Running 0:最低 < 31:最高、動的変更不可 数量無制限(メモリ依存)、動的生成可能 Ready / Running / Blocked / Terminated 0:最低 < 31:最高、動的変更可能 プリエンプティブ 各スレッド・スケジューラのDisable、プライオリティの動的変更 あり あり あり あり あり Tick数の取得、一定時間のDelayが可能 スケーラブル(使用するモジュールごとに増加) Stellaris 1day Workshop – For Application Development 4-5 StellarisWare 3rd パーティ・フォルダ 3rdパーティ・フォルダ Stellarisへ移植済みのソフトウェア ※ライセンス等は各ソフトウェアに従いますのでご注意ください 日本の 3rd パーティ 日本の3rdパーティ 関連会社様(抜粋) IARシステムズ株式会社 統合開発環境「EWARM」を始め、ハード評価、ソフト開発に必要な OS、ミドル、開発ツールをトータルに提供 イー・フォース株式会社 Cortex-M3に最適化されたコンパクトタイプのμITRON仕様 RTOS「μC3/Compact」とTCP/IPスタック「μNet3/Compact」 株式会社エーアイコーポレーション RLL機能対応μITRON仕様RTOS「TOPPERS-Pro」、 iPodクラスドライバ対応USBをはじめ各種ミドルウェアの提供 株式会社コンピューテックス SWD、SWVテクノロジー対応JTAGエミュレータ「PALMiCE3」、 「J-STICK」、Flash Programmer「FP-10」、統合開発環境「CSIDE-IDE」 株式会社ソフィアシステムズ ARM KEIL製品正規代理店、ソフィアシステムズ製エミュレータ、 オンボード・フラッシュROMライタ、各種評価ボード、受託開発 Stellaris 1day Workshop – For Application Development 10 4-6 Lab 4 サンプルプログラムのビルド、デバッグを行う Lab4:サンプルプログラムのビルド、デバッグを行う ファームウェア開発パッケージに含まれるユーティリティ “Command Line Processing Module”を使いターミ ナル(UART接続)からLEDの点滅周期をコントロールす るソフトウェアを作成 2. Lab1にて動かしたサンプルのプロジェクトをインポート、 ビルド、デバッグ 1. Command Line Processing Module 例)usb_host_msc API データ型 typedef int (*pfnCmdLine)(int argc, char *argv[]); typedef struct { const char *pcCmd *pcCmd;; pfnCmdLine pfnCmd; pfnCmd; const char *pcHelp *pcHelp;; } tCmdLineEntry 変数 tCmdLineEntry g_sCmdTable[ g_sCmdTable[ ] 関数 int CmdLineProcess (char *pcCmdLine) Int Cmd_help(int argc, []) argc, char *argv *argv[]) { <中略> 中略> return(0); } … tCmdLineEntry g_sCmdTable[] g_sCmdTable[] = { { “help” “ : Display list of commands” help”, Cmd_help, Cmd_help, commands” }, <中略> 中略> { "cat", Cmd_cat, " : Show contents of a text file" }, Cmd_cat, { 0, 0, 0 } }; … Int main(void) main(void) { int iStatus; iStatus; <中略> 中略> ReadLine関数でターミナル の入力を配列g_cCmdBufへ 代入しています ReadLine(); ReadLine(); if(g_cCmdBuf[0] == '¥ '¥0') { continue; } コマンドラインの文字配列のポイン タを渡して実行する。 g_sCmdTableに該当するコマンド の構造体があれば、同構造体の pfnCmdメンバ(関数)を実行する。 iStatus = CmdLineProcess(g_cCmdBuf); CmdLineProcess(g_cCmdBuf); … if(iStatus == CMDLINE_BAD_CMD) { UARTprintf("Bad command!¥ command!¥n"); } ※ 演習で使用する StellarisWare は “C:\StellarisWare” にインストールされているものとして説明します。 Stellaris 1day Workshop – For Application Development 4-7 Part1. LED の点滅周期をターミナルからコントロールする プログラムの作成 1. プロジェクトを作成します。 lab4 という名前のプロジェクトを作成してください。ワークスペースにある lab4 以 外のプロジェクトは閉じておくといいでしょう。 2. 既存のファイルを追加します。 lab4 では lab3 で作成したプログラムをベースに Command Line Processing Module を 使ったルーチンを追加してみます。以下のファイルをプロジェクトに追加してくだ さい。 startup_ccs.c lab3.c driverlib.lib uartstdio.c Stellaris 1day Workshop – For Application Development 4-8 lab3.c は lab4.c に名前を変更してください。プロジェクトビューから lab3.c を右クリ ック→Rename より変更できます。 3. インクルード・サーチパスを追加します。 StellarisWare のライブラリ用ヘッダファイルを使用していますので、lab3 と同様に ビルドオプションにインクルード・サーチパスを追加してください。 Stellaris 1day Workshop – For Application Development 4-9 4. ビルド、ロード、実行し、いったん動作確認します。 ここまでで lab3 と同じプログラムができあがったはずですので、動作確認してくだ さい。 5. Command Line Processing Module のソースファイルを追加します。 Command Line Processing Module のソースファイル cmdline.c は uartstdio.c と同じ く C:\StellarisWare\utils フォルダにありますのでプロジェクトに追加してください。 6. lab4.c に記述を追加します。 追加する記述が少し多めですので追加するコードを C:\stellaris_1day\template\lab4_template.c に用意してあります。書かれているコードを lab4.c の適当な場所へ追加してください。また SysTick の割込み処理関数内の UARTprintf 関数の処理は、コマンド入力をしづらくすると思いますのでコメントア ウトしてください。 処理の流れは以下のようになります。 ① クロックや周辺機能の初期化 ② 割込み許可 ③ ターミナルからの入力読み込み ④ コマンドの実行及びエラー処理 ⑤ ③に戻る 以下 lab4_template.c の解説です。行番号は次ページより掲載のソースにもとづいて います。 1 行目から 6 行目は必要なヘッダファイルのインクルードです。追加するコードの 中でCスタンダードライブラリ関数、ペリフェラル・ドライバ・ライブラリの UART 用関数、Command Line Processing Module ユーティリティの関数を使用してい ます。 11 行目は Command Line Processing Module ユーティリティの CmdLineProcess 関数に 渡すコマンドライン文字列用の配列 g_cCmdBuf[]の宣言です。 13 行目から 97 行目はターミナルからの入力を g_cCmdBuf 配列へ代入する ReadLine 関数(サブルーチン)の記述です。 99 行目から 136 行目はこのプログラムで使えるコマンドのヘルプをターミナルに表 示する関数(サブルーチン)の記述です。 Stellaris 1day Workshop – For Application Development 4 - 10 138 行目から 165 行目はターミナルの入力から SysTick に任意のピリオドを設定する 関数(サブルーチン)の記述です。 167 行目から 174 行目は Command Line Processing Module が参照する構造体の配列 g_sCmdTable[]の宣言です。 ※配列 g_sCmdTable[]は CmdLineProcess 関数から直接参照していますので配列名を 変更してはいけません。 177 行目から 226 行目は main 関数です。<中略>の部分にはクロックや周辺機能の設 定及び割込み許可のコードが入るでしょう。最後の while 文のなかでターミナルか らのコマンド読み込みと CmdLineProcess 関数の実行を行っています。 Stellaris 1day Workshop – For Application Development 4 - 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #include <stdlib.h> #include <string.h> #include "driverlib/uart.h" #include "utils/cmdline.h" #define CMD_BUF_SIZE 64 static char g_cCmdBuf[CMD_BUF_SIZE]; void ReadLine(void) { unsigned long ulIdx, ulPrompt; unsigned char ucChar; g_cCmdBuf[0] = '\0'; ulIdx = 0; ulPrompt = 1; while(1){ if(ulPrompt){ UARTprintf("> %s", g_cCmdBuf); ulPrompt = 0; } // Loop while there are characters that have been received from the // UART. // while(UARTCharsAvail(UART0_BASE)) { // // Read the next character from the UART. // ucChar = UARTgetc(); // // See if this character is a backspace and there is at least one // character in the input line. // if((ucChar == '\b') && (ulIdx != 0)) { // // Erase the lsat character from the input line. // UARTprintf("\b \b"); ulIdx--; g_cCmdBuf[ulIdx] = '\0'; } // // See if this character is a newline. // else if((ucChar == '\r') || (ucChar == '\n')) Stellaris 1day Workshop – For Application Development 4 - 12 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 { // // Return to the caller. // UARTprintf("\n"); return; } // // See if this character is an escape or Ctrl-U. // else if((ucChar == 0x1b) || (ucChar == 0x15)) { // // Erase all characters in the input buffer. // while(ulIdx) { UARTprintf("\b \b"); ulIdx--; } g_cCmdBuf[0] = '\0'; } // // See if this is a printable ASCII character. // else if((ucChar >= ' ') && (ucChar <= '~') && (ulIdx < (sizeof(g_cCmdBuf) - 1))) { // // Add this character to the input buffer. // g_cCmdBuf[ulIdx++] = ucChar; g_cCmdBuf[ulIdx] = '\0'; UARTprintf("%c", ucChar); } } } } int Cmd_help(int argc, char *argv[]) { tCmdLineEntry *pEntry; // // Print some header text. // UARTprintf("\nAvailable commands\n"); UARTprintf("------------------\n"); // // Point at the beginning of the command table. // pEntry = &g_sCmdTable[0]; // Stellaris 1day Workshop – For Application Development 4 - 13 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 // Enter a loop to read each entry from the command table. of the // table has been reached when the command name is NULL. // while(pEntry->pcCmd) { // // Print the command name and the brief description. // UARTprintf("%s%s\n", pEntry->pcCmd, pEntry->pcHelp); The end // // Advance to the next entry in the table. // pEntry++; } // // Return success. // return(0); } int Cmd_systickPeriodSet(int argc, char *argv[]) { int period; if(argc != 2) { UARTprintf("need argument ex) set 0xFFFFFF\n"); return(CMDLINE_BAD_CMD); } else { period = strtol(argv[1], NULL, 0); if(period < 0xfff){ UARTprintf("the period looks too short\n"); return(CMDLINE_BAD_CMD); } else if(period > 0xffffff){ UARTprintf("the period is too long\n"); return(CMDLINE_BAD_CMD); } SysTickPeriodSet((unsigned long)period); UARTprintf("set successfully!\n"); return(0); } } tCmdLineEntry g_sCmdTable[] = { { "help", Cmd_help, " : Display list of commands" }, { "h", Cmd_help, " : alias for help" }, { "?", Cmd_help, " : alias for help" }, Stellaris 1day Workshop – For Application Development 4 - 14 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 { "set", {0,0,0} Cmd_systickPeriodSet, " : Set SysTick Period" }, }; void main(void) { int iStatus; <中略> while(1){ // // Get a line of text from the user. // ReadLine(); if(g_cCmdBuf[0] == '\0') { continue; } // // Pass the line from the user to the command processor. // It will be parsed and valid commands executed. // iStatus = CmdLineProcess(g_cCmdBuf); // // Handle the case of bad command. // if(iStatus == CMDLINE_BAD_CMD) { UARTprintf("Bad command!\n"); } // // Handle the case of too many arguments. // else if(iStatus == CMDLINE_TOO_MANY_ARGS) { UARTprintf("Too many arguments for command processor!\n"); } // // Otherwise the command was executed. Print the error // code if one was returned. // else if(iStatus != 0) { UARTprintf("Command returned error code %d\n", iStatus); } } } Stellaris 1day Workshop – For Application Development 4 - 15 7. ターゲット・コンフィグレーションを作成します。 Lab3 同様、既存の TargetConfiguration.ccxml をプロジェクトに追加してください。 8. ビルド、ロード、実行し動作確認します。 それでは実行してみましょう。実行後ターミナルビューからコマンドを入力し、 LED の点滅周期が変化すれば成功です! Part2. StellarisWare のサンプルプロジェクトをビルド、デ バッグ 9. ワークスペースへ StellarisWare のサンプルプロジェクトをインポートします。 既存の CCS プロジェクトを使用するにはワークスペースへのインポートを行います。 StellarisWare の各サンプルは CCS プロジェクトが用意されています。例として usb_host_msc のプロジェクトをインポートしてみます。 Stellaris 1day Workshop – For Application Development 4 - 16 CCS のメインメニュー、Project→Impoert Existing CCS/CCE Eclipse Project をクリ ックしてください。すると下図のようなダイアログが現れますので、Select root directry フィールドに Browse…ボタンを使って C:\StellarisWare\boards\ek-lm3s9b92\usb_host_msc\ccs 評価キット名 を入力し、Finish をクリックしてください。 10. プロジェクトのソースコードなどを確認します。 プロジェクトビューより usb_host_msc.c をダブルクリックするとソースコードが確 認できます。アウトラインビューを使うと関数や変数の参照がしやすいと思います。 11. ビルド、ロード、実行し動作確認します。 プロジェクトをインポートし、実際に動作させながらコードを参照すると確認もし やすいと思いますのでご活用下さい。 以上で lab4 は終了です。お疲れ様でした。時間に余裕のある方は オプション演習をご覧下さい。 Stellaris 1day Workshop – For Application Development 4 - 17 オプション演習 tiobj2bin ユーティリティを使い.bin ファイルを作成 12. lab4 のビルドオプションに tiobj2bin を実行する設定を追加します。 ビルドオプションの Build Steps タブを前に出し、Post-build step:内の Command フィ ールドに以下のコマンドラインを入力してください。少し長いのでインポートした usb_host_msc プロジェクトのビルドオプションからコピー&ペーストすると入力の 間違いがなくよいでしょう。 "${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd470.exe" "${CG_TOOL_ROOT}/bin/hex470.exe" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe" ※上記コマンドラインは 1 行です(改行なし)。 13. ビルドし.bin ファイルができていることを確認します。 .bin ファイルは C:\stellaris_1day\lab4\Debug フォルダに出来ていると思います。確認 してください。 14. CCS を終了し、LM Flash Programmer にて作成した.bin ファイルを書き込みます。 いくつか.bin ファイルを書込み、動作確認して、lab4 の.bin ファイルが問題ないこと を確認してください。 オプション演習は以上です。お疲れ様でした。 Stellaris 1day Workshop – For Application Development 4 - 18
© Copyright 2024 Paperzz