Comments
Description
Transcript
AN706-00062-1v1-J
本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されております。 標準入出力を利用したコンソールの 文字列入出力方法 32-BIT MICROCONTROLLER FM3 ファミリ アプリケーションノート APPLICATION NOTE ARM is the registered trademark of ARM Limited in the EU and other countries. Cortex is the trademark of ARM Limited in the EU and other countries. Publication Number AN706-00062 Revision 1.1 Issue Date January 31, 2014 A P P L I C A T I O N N O T E AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E 目次 目次 ...................................................................................................................................... 3 対象製品 ............................................................................................................................... 6 1 はじめに ...................................................................................................................... 10 2 概要 ............................................................................................................................. 11 2.1 コンソールについて ............................................................................................. 11 2.2 方法および特長 .................................................................................................... 11 2.2.1 デバッグインタフェースを使用する方法および特長 .................................... 11 2.2.2 UART を使用する方法および特長 ................................................................. 12 2.3 3 文字列入出力 ........................................................................................................ 13 2.3.1 IAR EWARM の文字列入出力ウィンドウによる文字列入出力 ...................... 13 2.3.2 KEIL MDK-ARM の文字列入出力ウィンドウによる文字列入出力................. 14 2.3.3 PC のターミナルソフトによる文字列入出力 ................................................ 15 文字列入出力の仕組み ................................................................................................. 16 3.1 Cortex-M3 のブロック .......................................................................................... 16 3.2 デバッグインタフェースを利用した文字列入出力 ............................................... 17 3.2.1 3.2.1.1 セミホスティング(IAR EWARM)............................................................ 18 3.2.1.2 SWO(IAR EWARM, KEIL MDK-ARM) .................................................... 18 3.2.2 3.3 文字列の出力(printf) ...................................................................................... 18 文字列の入力(scanf) ...................................................................................... 19 3.2.2.1 セミホスティング(IAR EWARM)............................................................ 19 3.2.2.2 グローバル変数(KEIL MDK-ARM) .......................................................... 19 UART を利用した文字列入出力 ........................................................................... 20 3.3.1 UART により文字列出力する方法(printf) ...................................................... 20 3.3.2 UART により文字列入力する方法(scanf) ...................................................... 20 3.4 文字列の入出力処理の流れ .................................................................................. 21 3.4.1 IAR EWARM の場合 ...................................................................................... 21 3.4.2 KEIL MDK-ARM の場合 ................................................................................. 22 4 動作確認環境 ............................................................................................................... 23 5 特徴 ............................................................................................................................. 24 6 5.1 文字列出力の処理時間.......................................................................................... 24 5.2 環境および方法による差異 .................................................................................. 25 環境設定と動作 ........................................................................................................... 26 6.1 サンプルソフトウェアのプロジェクト構成 ......................................................... 26 6.2 デバッグインタフェースを使用する場合の環境設定と動作 ................................ 28 January 31, 2014, AN706-00062-1v1-J 3 A P P L I C A T I O N 6.2.1 デバッグインタフェースを使用する場合の環境設定手順(1) ................. 28 6.2.1.2 デバッグインタフェースを使用する場合の環境設定手順(2) ................. 29 6.2.1.3 デバッグインタフェースを使用する場合の環境設定手順(3) ................. 31 6.2.1.4 デバッグインタフェースを使用する場合の環境設定手順(4) ................. 31 6.2.1.5 デバッグインタフェースを使用する場合の環境設定手順(5) ................. 32 6.2.1.6 デバッグインタフェースを使用する場合の環境設定手順(6) ................. 33 6.2.1.7 デバッグインタフェースを使用する場合の環境設定手順(7) ................. 35 IAR EWARM の動作 ...................................................................................... 36 6.2.2.1 デバッグインタフェースを使用する場合の動作(1) ................................ 36 6.2.2.2 デバッグインタフェースを使用する場合の動作(2) ................................ 37 6.2.2.3 デバッグインタフェースを使用する場合の動作(3) ................................ 37 6.2.3 KEIL MDK-ARM の環境設定 .......................................................................... 38 6.2.3.1 低水準入出力処理の実装 ........................................................................ 38 6.2.3.2 デバッグインタフェースを使用する場合の環境設定手順(1) ................. 40 6.2.3.3 デバッグインタフェースを使用する場合の環境設定手順(2) ................. 41 6.2.3.4 デバッグインタフェースを使用する場合の環境設定手順(3) ................. 42 6.2.3.5 デバッグインタフェースを使用する場合の環境設定手順(4) ................. 43 6.2.3.6 デバッグインタフェースを使用する場合の環境設定手順(5) ................. 44 6.2.4 KEIL MDK-ARM の動作 ................................................................................. 45 6.2.4.1 デバッグインタフェースを使用する場合の動作(1) ................................ 45 6.2.4.2 デバッグインタフェースを使用する場合の動作(2) ................................ 46 6.2.4.3 デバッグインタフェースを使用する場合の動作(3) ................................ 47 UART を使用する場合の環境設定と動作 ............................................................. 48 6.3.1 低水準入出力処理の実装 ............................................................................... 48 6.3.1.1 IAR EWARM 用の低水準入出力処理の実装 ........................................... 48 6.3.1.2 KEIL MDK-ARM 用の低水準入出力処理の実装 ...................................... 50 6.3.1.3 UART へのアクセス関数の実装(IAR EWARM, KEIL MDK-ARM 共通)... 51 6.3.2 IAR EWARM の環境設定 ............................................................................... 53 6.3.2.1 UART を使用する場合の環境設定手順(1) .............................................. 53 6.3.2.2 UART を使用する場合の環境設定手順(2) .............................................. 54 6.3.2.3 UART を使用する場合の環境設定手順(3) .............................................. 54 6.3.2.4 UART を使用する場合の環境設定手順(4) .............................................. 55 6.3.3 4 IAR EWARM の環境設定 ............................................................................... 28 6.2.1.1 6.2.2 6.3 N O T E KEIL MDK-ARM の環境設定 .......................................................................... 56 6.3.3.1 UART を使用する場合の環境設定手順(1) .............................................. 56 6.3.3.2 UART を使用する場合の環境設定手順(2) .............................................. 57 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7 N O T E 6.3.4 PC とボード間の接続 .................................................................................... 58 6.3.5 ターミナルソフトの設定 ............................................................................... 58 6.3.6 動作 ............................................................................................................... 59 printf を使用しない場合の文字列の出力方法 ............................................................... 60 7.1 概要 ...................................................................................................................... 60 7.2 環境設定 ............................................................................................................... 61 7.2.1 IAR EWARM の環境設定 ............................................................................... 61 7.2.1.1 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(1) ............................................................................................................... 61 7.2.1.2 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(2) ............................................................................................................... 62 7.2.1.3 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(3) ............................................................................................................... 63 7.2.1.4 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(4) ............................................................................................................... 64 7.2.1.5 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(5) ............................................................................................................... 65 7.2.1.6 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(6) ............................................................................................................... 66 7.2.2 KEIL MDK-ARM の環境設定 .......................................................................... 67 7.2.2.1 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(1) ............................................................................................................... 67 7.2.2.2 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(2) ............................................................................................................... 68 7.2.2.3 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(3) ............................................................................................................... 69 7.2.2.4 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(4) ............................................................................................................... 70 7.2.2.5 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設 定手順(5) ............................................................................................................... 71 7.3 動作 ...................................................................................................................... 72 7.3.1 IAR EWARM の動作 ...................................................................................... 72 7.3.2 KEIL MDK-ARM の動作 ................................................................................. 73 8 ファイル構成 ............................................................................................................... 74 9 参考ドキュメント ........................................................................................................ 76 改版履歴 ............................................................................................................................. 77 January 31, 2014, AN706-00062-1v1-J 5 A P P L I C A T I O N N O T E 対象製品 本アプリケーションノートに記載されている内容の対象製品は、下記のとお りです。 (TYPE0) シリーズ名 品種型格 (パッケージサフィックスは除く) MB9B100A MB9BF102NA,MB9BF104NA,MB9BF105NA,MB9BF106NA, MB9BF102RA,MB9BF104RA,MB9BF105RA,MB9BF106RA MB9B300A MB9BF304NA,MB9BF305NA,MB9BF306NA, MB9BF304RA,MB9BF305RA,MB9BF306RA MB9B300B MB9BF304NB,MB9BF305NB,MB9BF306NB, MB9BF304RB,MB9BF305RB,MB9BF306RB MB9B400A MB9BF404NA,MB9BF405NA,MB9BF406NA, MB9BF404RA,MB9BF405RA,MB9BF406RA MB9B500A MB9BF504NA,MB9BF505NA,MB9BF506NA, MB9BF504RA,MB9BF505RA,MB9BF506RA MB9B500B MB9BF504NB,MB9BF505NB,MB9BF506NB, MB9BF504RB,MB9BF505RB,MB9BF506RB (TYPE1) シリーズ名 品種型格 (パッケージサフィックスは除く) MB9A110 MB9AF111L,MB9AF112L,MB9AF114L, MB9AF111M,MB9AF112M,MB9AF114M,MB9AF115M,MB9AF116M, MB9AF111N,MB9AF112N,MB9AF114N,MB9AF115N,MB9AF116N MB9A110A MB9AF111LA,MB9AF112LA,MB9AF114LA, MB9AF111MA,MB9AF112MA,MB9AF114MA,MB9AF115MA,MB9AF116MA, MB9AF111NA,MB9AF112NA,MB9AF114NA,MB9AF115NA,MB9AF116NA MB9A310 MB9AF311L,MB9AF312L,MB9AF314L, MB9AF311M,MB9AF312M,MB9AF314M,MB9AF315M,MB9AF316M, MB9AF311N,MB9AF312N,MB9AF314N,MB9AF315N,MB9AF316N MB9A310A MB9AF311LA,MB9AF312LA,MB9AF314LA, MB9AF311MA,MB9AF312MA,MB9AF314MA,MB9AF315MA,MB9AF316MA, MB9AF311NA,MB9AF312NA,MB9AF314NA,MB9AF315NA,MB9AF316NA 6 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E (TYPE2) シリーズ名 MB9B110T 品種型格 (パッケージサフィックスは除く) MB9BF116S,MB9BF117S,MB9BF118S, MB9BF116T,MB9BF117T,MB9BF118T MB9B210T MB9BF216S,MB9BF217S,MB9BF218S, MB9BF216T,MB9BF217T,MB9BF218T MB9B310T MB9BF316S,MB9BF317S,MB9BF318S, MB9BF316T,MB9BF317T,MB9BF318T MB9B410T MB9BF416S,MB9BF417S,MB9BF418S, MB9BF416T,MB9BF417T,MB9BF418T MB9B510T MB9BF516S,MB9BF517S,MB9BF518S, MB9BF516T,MB9BF517T,MB9BF518T MB9B610T MB9BF616S,MB9BF617S,MB9BF618S, MB9BF616T,MB9BF617T,MB9BF618T MB9BD10T MB9BFD16S,MB9BFD17S,MB9BFD18S, MB9BFD16T,MB9BFD17T,MB9BFD18T (TYPE3) シリーズ名 MB9A130L 品種型格 (パッケージサフィックスは除く) MB9AF131K,MB9AF132K, MB9AF131L,MB9AF132L MB9A130LA MB9AF131KA,MB9AF132KA, MB9AF131LA,MB9AF132LA (TYPE4) シリーズ名 MB9B110R 品種型格 (パッケージサフィックスは除く) MB9BF112N,MB9BF114N,MB9BF115N,MB9BF116N, MB9BF112R,MB9BF114R,MB9BF115R,MB9BF116R MB9B310R MB9BF312N,MB9BF314N,MB9BF315N,MB9BF316N, MB9BF312R,MB9BF314R,MB9BF315R,MB9BF316R MB9B410R MB9BF412N,MB9BF414N,MB9BF415N,MB9BF416N, MB9BF412R,MB9BF414R,MB9BF415R,MB9BF416R MB9B510R MB9BF512N,MB9BF514N,MB9BF515N,MB9BF516N, MB9BF512R,MB9BF514R,MB9BF515R,MB9BF516R January 31, 2014, AN706-00062-1v1-J 7 A P P L I C A T I O N N O T E (TYPE5) シリーズ名 品種型格 (パッケージサフィックスは除く) MB9A110K MB9AF111K,MB9AF112K MB9A310K MB9AF311K,MB9AF312K (TYPE6) シリーズ名 MB9A140N 品種型格 (パッケージサフィックスは除く) MB9AF141L,MB9AF142L,MB9AF144L, MB9AF141M,MB9AF142M,MB9AF144M, MB9AF141N,MB9AF142N,MB9AF144N MB9A140NA MB9AF141LA,MB9AF142LA,MB9AF144LA, MB9AF141MA,MB9AF142MA,MB9AF144MA, MB9AF141NA,MB9AF142NA,MB9AF144NA MB9A340N MB9AF341L,MB9AF342L,MB9AF344L, MB9AF341M,MB9AF342M,MB9AF344M, MB9AF341N,MB9AF342N,MB9AF344N MB9A340NA MB9AF341LA,MB9AF342LA,MB9AF344LA, MB9AF341MA,MB9AF342MA,MB9AF344MA, MB9AF341NA,MB9AF342NA,MB9AF344NA MB9AA40N MB9AFA41L,MB9AFA42L,MB9AFA44L, MB9AFA41M,MB9AFA42M,MB9AFA44M, MB9AFA41N,MB9AFA42N,MB9AFA44N MB9AA40NA MB9AFA41LA,MB9AFA42LA,MB9AFA44LA, MB9AFA41MA,MB9AFA42MA,MB9AFA44MA, MB9AFA41NA,MB9AFA42NA,MB9AFA44NA MB9AB40N MB9AFB41L,MB9AFB42L,MB9AFB44L, MB9AFB41M,MB9AFB42M,MB9AFB44M, MB9AFB41N,MB9AFB42N,MB9AFB44N MB9AB40NA MB9AFB41LA,MB9AFB42LA,MB9AFB44LA, MB9AFB41MA,MB9AFB42MA,MB9AFB44MA, MB9AFB41NA,MB9AFB42NA,MB9AFB44NA 8 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E (TYPE7) シリーズ名 MB9A130N 品種型格 (パッケージサフィックスは除く) MB9AF131M,MB9AF132M, MB9AF131N,MB9AF132N MB9AA30N MB9AFA31L,MB9AFA32L, MB9AFA31M,MB9AFA32M, MB9AFA31N,MB9AFA32N (TYPE8) シリーズ名 MB9A150R 品種型格 (パッケージサフィックスは除く) MB9AF154M,MB9AF155M,MB9AF156M, MB9AF154N,MB9AF155N,MB9AF156N, MB9AF154R,MB9AF155R,MB9AF156R (TYPE9) シリーズ名 MB9B120M 品種型格 (パッケージサフィックスは除く) MB9BF121K,MB9BF122K,MB9BF124K, MB9BF121L,MB9BF122L,MB9BF124L, MB9BF121M,MB9BF122M,MB9BF124M MB9B320M MB9BF321K,MB9BF322K,MB9BF324K, MB9BF321L,MB9BF322L,MB9BF324L, MB9BF321M,MB9BF322M,MB9BF324M MB9B520M MB9BF521K,MB9BF522K,MB9BF524K, MB9BF521L,MB9BF522L,MB9BF524L, MB9BF521M,MB9BF522M,MB9BF524M January 31, 2014, AN706-00062-1v1-J 9 A P P L I C A T I O N 1 N O T E はじめに 本アプリケーションノートは、Spansion 製マイコン FM3 ファミリを用いて、標準入出力 関数である printf による文字列出力および scanf による文字列入力を ・マイコンのデバッグインタフェースを経由し、デバッガの文字列入出力ウィンドウで可 能とする方法 ・マイコンのハードウェアリソース(UART)を経由し、PC のターミナルソフトで可能とす る方法 の 2 通りについて説明します。 また、printf を使用しない場合の文字列の出力方法についても説明します。 10 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 2 N O T E 概要 2.1 コンソールについて コンソールはコンピュータを操作するために使う入出力装置のセットのことを言い、 コンピュータから出力されたデータの表示およびキーボードから入力されたデータの コンピュータへの入力を行います。本アプリケーションノートに添付するサンプルソ フトウェアはコンソールとして ・デバッガの文字列入出力ウィンドウ ・PC のターミナルソフト の 2 種類を使用します。 2.2 方法および特長 本章では標準入出力関数である printf による文字列出力、scanf による文字列入力を ・デバッグインタフェースを使用し、デバッガの入出力ウィンドウにおいて可能とす る方法および特長 ・UART を使用し、PC のターミナルソフトにおいて可能とする方法および特長 について説明します。 2.2.1 デバッグインタフェースを使用する方法および特長 デ バ ッ グ イ ン タ フ ェ ー ス を 使 用 す る 方 法 は IAR Embedded Workbench for ARM(EWARM)および KEIL MDK-ARM それぞれ以下のとおりです。 ◆IAR EWARM セミホスティング経由または SWO(※1)経由による文字列の出力(printf) セミホスティング経由による文字列の入力(scanf) ◆KEIL MDK-ARM SWO(※1)経由による文字列の出力(printf) グローバル変数による文字列の入力(scanf) (※1)SWO:Serial Wire Output、SWV(Serial Wire Viewer)用のポート デバッグインタフェースを使用する場合、FM3 マイコンの UART などのリソースを 使用することなく、デバッガの文字列入出力ウィンドウによる文字列の入出力ができ るため、デバッガによる評価において有効な手段となります。 January 31, 2014, AN706-00062-1v1-J 11 A P P L I C A T I O N 2.2.2 N O T E UART を使用する方法および特長 UART は FM3 マイコンの Multi-Function Serial(MFS、※)を使用します。なお、UART による文字列の入出力は PC のターミナルソフトにより文字列を入出力する場合など に利用します。デバッガを使用しない環境においても動作が可能なため、単体での評 価において有効な手段となります。 (※)MFS については「32bit マイクロコントローラ FM3 ファミリ ペリフェラルマニュ アル 通信マクロ編」[6]を参照してください。 デバッグインタフェース、UART どちらを使用する場合も、文字列の入出力(printf, scanf)処理には標準入出力ライブラリを使用するため、容易に実装できます。 12 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 2.3 N O T E 文字列入出力 2.3.1 IAR EWARM の文字列入出力ウィンドウによる文字列入出力 IAR EWARM において、文字列入出力ウィンドウを「ターミナル I/O」と称します。 IAR EWARM のターミナル I/O を図 1 に示します。出力と入力のウィンドウが別に なっており、出力ウィンドウに printf による文字列が出力され、入力ウィンドウに scanf で入力したい文字列を入力します。 printfによる文字列出力 scanfによる文字列入力 図 1 IAR EWARM のターミナル I/O January 31, 2014, AN706-00062-1v1-J 13 A P P L I C A T I O N 2.3.2 N O T E KEIL MDK-ARM の文字列入出力ウィンドウによる文字列入出力 KEIL MDK-ARM において、文字列入出力ウィンドウを「Debug (printf) Viewer」と称し ます。KEIL MDK-ARM の Debug (printf) Viewer を図 2 に示します。同一ウィンドウで 文字列の入出力ができるため、ターミナルソフトと同等の動作をします。 printfによる文字列出力、scanfによる 文字列入力が同一ウィンドウで可能 図 2 KEIL MDK-ARM の Debug (printf) Viewer 14 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 2.3.3 N O T E PC のターミナルソフトによる文字列入出力 UART などのシリアルインタフェースを使用した PC のコンソールとしては、Tera Term、ハイパーターミナルなどのターミナルソフトが使用されます。PC のターミナル ソフトの例を図 3 に示します。なお、図 3 は Tera Term の例です。 printfによる文字列出力、scanfによる文字列入力を PCのターミナルソフトから行う 図 3 PC のターミナルソフトの例 January 31, 2014, AN706-00062-1v1-J 15 A P P L I C A T I O N 3 N O T E 文字列入出力の仕組み 3.1 Cortex-M3 のブロック FM3 マイコンは ARM の Cortex-M3 コアを使用しています。 Cortex-M3 のブロック(デ バッグ関連部分)を図 4 に示します。 Cortex-M3 Core ETM ETM Trace Port (5pins) DWT ITM TPIU SWV (1pin) ICE Bus Matrix DAP ETM DWT ITM TPIU DAP SWV SWD printfによる文字列出力に使用 JTAG or SWD printfによる文字列出力 scanfによる文字列入力に使用 Embedded Trace Macrocell Data Watchpoint and Trace Instrumentation Trace Macrocell Trace Port Interface Unit Debug Access Port Serial Wire Viewer Serial Wire Debug 図 4 Cortex-M3 のブロック(デバッグ関連部分) Cortex-M3 は ICE とのデバッグインタフェースとして JTAG または SWD のどちらか を使用できます。また、ビューワ機能(SWV)用のポートが 1pin、ETM のトレースイン タフェース用のポートが 5pin で構成されています。 printf による文字列出力は JTAG および SWD におけるデータ出力または SWV のい ずれかを使用し、scanf による文字列入力は JTAG および SWD におけるデータ入力を 使用します。 16 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 3.2 N O T E デバッグインタフェースを利用した文字列入出力 FM3 マイコンのデバッグ通信において JTAG では TCK、TMS、TDO、TDI の 4 本を 使用し、SWD では SWCLK と SWDIO の 2 本を使用します。 なお、SWD の場合には図 4 に示した SWV のポートをトレースデータの出力として 使用できます。本ポートは SWO と称します。 printf で指定した文字列は JTAG では TDO、SWD では SWDIO または SWO を使用 して出力され、scanf では JTAG では TDI、SWD では SWDIO を使用して文字列を入力 します。JTAG の場合の文字列入出力を図 5、SWD の場合の文字列入出力を図 6 に示 します。 JTAG printfで指定した文字列が TDOから出力され、ICEを 通しデバッガのコンソール 上に出力される ICE デバッガのコンソールに 入力した文字列がICEか らTDIを通して入力され、 scanfで処理する TCK TMS TDO TDI FM3 デバッグ通信に4本使用する 図 5 JTAG の場合の文字列入出力 SWD デバッガのコンソールに 入力した文字列がICEか らSWDIOを通して入力さ れ、scanfで処理する ICE SWCLK SWDIO (TCK) (TMS) SWO (TDO) printfで指定した文字列 がSWDIOまたはSWOか ら出力され、ICEを通しデ バッガのコンソール上に 出力される FM3 デバッグ通信に2本使用する 図 6 SWD の場合の文字列入出力 January 31, 2014, AN706-00062-1v1-J 17 A P P L I C A T I O N 3.2.1 N O T E 文字列の出力(printf) 3.2.1.1 セミホスティング(IAR EWARM) デバッグインタフェースは JTAG または SWD どちらも使用できます。 ブレークポイント命令(BKPT 0xAB)を使用し、JTAG の場合は TDO、SWD の場合 は SWDIO から出力します。 ソフトウェアで処理し、データ出力(TDO および SWDIO)を兼用するため、SWO を使用する場合と比較して処理が遅く、他の処理に対する影響が大きくなります。 3.2.1.2 SWO(IAR EWARM, KEIL MDK-ARM) デバッグインタフェースは SWD を使用します。 ITM スティミュラスポート 0(※1)へデータを書き込むことにより、SWO から出力 します。 ハードウェアで処理し、ITM には FIFO(※2)があり、また、SWO を printf 専用に 使用するため処理が速く、他の処理に対する影響が少なく済みます。 (※1)ITM スティミュラスポートは 32 本あるが、SWO から出力するためにポート 0 を使用する。 (※2)FIFO は 24 バイト 18 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 3.2.2 N O T E 文字列の入力(scanf) 3.2.2.1 セミホスティング(IAR EWARM) デバッグインタフェースは JTAG または SWD どちらも使用できます。 ブレークポイント命令(BKPT 0xAB)を使用し、JTAG の場合は TDI、SWD の場合は SWDIO から入力します。 3.2.2.2 グローバル変数(KEIL MDK-ARM) デバッグインタフェースは SWD を使用します。SWDIO から入力したデータを、 ITM_RxBuffer(volatile 型の符号あり 32 ビット変数、※)にセットします。なお、 ITM_RxBuffer へのデータセットはデバッガが行います。 (※)変数名は必ず「ITM_RxBuffer」にしてください。なお、詳細は「CMSIS Debug Support」[3]を参照してください。 January 31, 2014, AN706-00062-1v1-J 19 A P P L I C A T I O N 3.3 N O T E UART を利用した文字列入出力 標準入出力ライブラリが呼び出す関数に、UART の低水準入出力処理を実装します。 IAR EWARM の場合は__write 関数および__read 関数、KEIL MDK-ARM の場合は fputc 関数および fgetc 関数に実装します。 3.3.1 UART により文字列出力する方法(printf) UART レジスタの SSR における TDRE ビットが 1 になるまで待ち、TDR へ指定の 文字列をセットすると、UART の出力ポート(SOT)より出力します(※1、※2)。IAR EWARM の場合は__write 関数、KEIL MDK-ARM の場合は fputc 関数に実装します。 3.3.2 UART により文字列入力する方法(scanf) UART の入力ポート(SIN)より文字列が入力されると、UART レジスタの RDR にデー タがセットされると共に SSR における RDRF ビットが 1 にセットされます。したがっ て、RDRF ビットが 1 であることを確認し、RDR から文字列を取得します(※1、※2)。 IAR EWARM の場合は__read 関数、KEIL MDK-ARM の場合は fgetc 関数に実装します。 (※1) SSR Serial Status Register TDRE Transmit Data Register Empty TDR Transmit Data Register RDRF Received Data Register Full RDR Received Data Register (※2) UART の動作およびレジスタなどについては「32bit マイクロコントローラ FM3 ファミリ ペリフェラルマニュアル 通信マクロ編」[6]を参照してください。 20 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 3.4 N O T E 文字列の入出力処理の流れ IAR EWARM の場合 3.4.1 printf は標準入出力ライブラリにおける__write 関数(※)が、scanf は__read 関数(※) が低水準の入出力処理を行います。なお、UART を使用する場合は、__write 関数と __read 関数を別途用意し、UART へアクセスする処理を実装します。コンパイル時に 標準入出力ライブラリにある__write 関数、__read 関数をオーバライドし、置き換えま す。デバッグインタフェースを使用した場合の文字列の入出力処理の流れを図 7 に、 UART を使用した場合の入出力処理の流れを図 8 に示します。 セミホスティング経由で文字列出力する(printf)場合 printf() SWO経由で文字列を出力する(printf)場合 scanf() printf() 標準入出力ライブラリ 出力する文字列 が1文字ずつ入力 __write() 標準入出力ライブラリ 出力する文字列 が1文字ずつ入力 UARTより取得した 文字数をリターン __read() __write() BKPT 0xABを実行し バッファに取得 BKPT 0xABを 実行し出力 JTAG or SWD SWV BKPT 0xABを実行し バッファに取得 SWD SWO デバッガ(ターミナルI/O) UARTより取得した 文字数をリターン __read() ITMスティミュラスポート0に 文字列をセット TDIまたはSWDIO TDOまたはSWDIO scanf() SWDIO デバッガ(ターミナルI/O) 図 7 デバッグインタフェースを使用した場合の文字列の入出力処理 printf() scanf() 標準入出力ライブラリ 出力する文字列 が1文字ずつ入力 __write() UARTより取得した 文字数をリターン __read() UARTの送信レジスタへ 文字列をセット UARTの受信レジスタから 文字列を取得しバッファにセット UART SOT SIN ターミナルソフト 図 8 UART を使用した場合の文字列の入出力処理の流れ (※)__write 関数、__read 関数については「IAR C/C++ 開発ガイド」[1]の「パート 1. ビルドツール」の「デバッグライブラリの低レベル関数」を参照してください。 January 31, 2014, AN706-00062-1v1-J 21 A P P L I C A T I O N 3.4.2 N O T E KEIL MDK-ARM の場合 printf は fputc 関数(※)が、scanf は fgetc 関数(※)が低水準の入出力処理を行います。 なお、fputc 関数、fgetc 関数は必ず別途用意する必要があります。デバッグインタ フェースを使用した場合の文字列の入出力処理の流れを図 9 に、UART を使用した場 合の文字列の入出力の流れを図 10 に示します。 printf() scanf() 標準入出力ライブラリ 出力する文字列が 1文字ずつ入力 fputc() グローバル変数(ITM_RxBuffer)より 取得した受信文字列をリターン fgetc() デバッガがデバッグ情報を元に グローバル変数(ITM_RxBuffer) に文字列をセット ITMスティミュラスポート0に 文字列をセット SWV SWD SWDIO SWO デバッガ(Debug (printf) Viewer) 図 9 デバッグインタフェースを使用した場合の文字列の入出力処理の流れ printf() scanf() 標準入出力ライブラリ 出力する文字列 が1文字ずつ入力 fputc() UARTより取得した 文字列をリターン fgetc() UARTの送信レジスタへ 文字列をセット UARTの受信レジスタから 文字列を取得 UART SOT SIN ターミナルソフト 図 10 UART を使用した場合の文字列の入出力処理の流れ (※) fputc 関数、fgetc 関数については「MDK-ARM Primer」[4]の「Create Application」 の「Configure Cortex-M Target」の「Library Retarget File」を参照してください。 22 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E 動作確認環境 4 本アプリケーションノートに記載した内容の動作確認環境を表 1 に示します。 表 1 動作確認環境 項目 内容 使用マイコン MB9BF506R 動作周波数 コア:80MHz 周辺:40MHz 動作電圧 +3.3V OS 使用しない 統合開発環境 IAR IAR Embedded Workbench for ARM 6.30.4 KEIL MDK-Lite Version 4.22a(※) コンパイル最適化 なし(ありに設定しても動作可能) (※) MDK-Lite は MDK-ARM のエディション名 January 31, 2014, AN706-00062-1v1-J 23 A P P L I C A T I O N N O T E 特徴 5 文字列出力の処理時間 5.1 IAR EWARM, KEIL MDK-ARM において、文字列出力の処理時間について測定した結果 を表 2 および表 3 に示します。なお、 「4 動作確認環境」に示す以外の条件は下記のとお りです。 文字数:10 文字 “0123456789” 50 文字 “01234567890123456789012345678901234567890123456789” SWO クロック:固定設定(IAR EWARM/ KEIL MDK-ARM 共に 1MHz) UART ボーレート:115200bps デバッグインタフェース(SWO)使用時:printf および ITM スティミュラスポートへの文 字列出力関数(「7 printf を使用しない場合の文字列の出力方法」を参照)の処理時間を 測定(その他は printf の処理時間のみを測定) UART 使用時:最後の文字列出力完了(送信バスアイドル)までの時間を測定 表 2 はデバッグインタフェースを使用した場合の文字列出力の処理時間および実効レー ト、表 3 は UART を使用した場合の文字列出力の処理時間および実効レートを示します。 表 2 デバッグインタフェースを使用した場合の文字列出力の処理時間と実効レート 出力 IAR EWARM 文字数 セミホスティング 10 325ms 246bps 50 1634ms 245bps SWO(ITM スティミュラスポート への文字列出力関数,※1) SWO 経由(printf, ※1) IAR EWARM KEIL MDK-ARM IAR EWARM KEIL MDK-ARM 123.1µs 650109bps 133.7µs 598243bps 111.0µs 720721bps 110.0µs 727273bps 923.3µs 933.7µs 912.0µs 906.0µs 433214bps(※2) 428397bps(※2) 438596bps(※2) 441501bps(※2) (※1) SWO CLK を固定設定(1MHz) (※2) ITM スティミュラスポートの FIFO(24 バイト)がフルになるため、10 文字出力の場 合よりも遅くなる。 表 3 UART を使用した場合の文字列出力の処理時間と実効レート 出力 文字数 24 IAR EWARM KEIL MDK-ARM 10 869.60µs 91996bps (約 80%) 869.58µs 91998bps (約 80%) 50 4.33960ms 92174bps (約 80%) 4.33958ms 92175bps (約 80%) 備考 ()内はボーレート設定に対する効率 ボーレート設定は 115200bps AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 5.2 N O T E 環境および方法による差異 前章の文字列出力の処理時間を含め、各環境および方法のインタフェース(I/F)、処理、 使用ポート、容量、50 文字出力処理時間/レートについてまとめた内容を表 4 に示しま す。 表 4 各環境および方法の I/F、処理、使用ポート、容量、50 文字出力処理時間/レート 環境および方法 I/F 処理 容量 使用 (バイト、※2) ポート ROM RAM IAR EWARM JTAG/ printf セミホスティン SWD グ scanf 備考 50 文字出力 処理時間/ レート 1634ms 245bps (※3) TDO 716 8 TDI 2274 16 - SWO CLK 固定設定 1MHz(※4、※5) SWO CLK 固定設定 1MHz(※4、※6) printf SWO 616 0 923.3µs 433214bps (※1) SWO 82 0 912.0µs 438596bps scanf SWDIO 2274 16 - printf SWO 260 8 KEIL MDK-ARM SWD SWO (※1) 933.7µs 428397bps SWO CLK 固定設定 1MHz(※4、※5) SWO 80 0 906.0µs 441501bps SWO CLK 固定設定 1MHz(※4、※6) 12 - IAR EWARM SWO SWD scanf SWDIO 2200 JTAG/ printf SWD scanf SOT 702 0 4.33960ms 92174bps SIN 2436 8 - KEIL MDK-ARM JTAG/ printf UART SWD scanf SOT 460 8 4.33958ms 92175bps SIN 2316 8 - IAR EWARM UART ボーレート:115200bps ボーレート:115200bps (※1) ITM スティミュラスポートへの文字列出力関数(「7 printf を使用しない場合の文字 列の出力方法」を参照) (※2) printf, scanf に関わる実装(標準入出力ライブラリと追加関数)および ITM スティミュ ラスポートへの文字列出力関数の実装による増加分。 (※3) ソフトウェア処理で、TDO を兼用で使用するため遅い。 (※4) ハードウェア処理で、SWO を文字列出力専用に使用するため速い。 (※5) サンプルソフトウェアは自動設定。 (※6) サンプルソフトウェアには実装していません。 January 31, 2014, AN706-00062-1v1-J 25 A P P L I C A T I O N N O T E 環境設定と動作 6 6.1 サンプルソフトウェアのプロジェクト構成 本アプリケーションノートに添付するサンプルソフトウェアのプロジェクト構成を 表 5 に示します。 表 5 本アプリケーションノートに添付するサンプルソフトウェアのプロジェクト構成 開発環境 IAR EWARM プロジェクト名 UseSemihost UseSWO UseUart UseSWO KEIL MDK-ARM UseUart 26 内容 RAM 実行 文字入出力:デバッグ I/F(printf:セミホスティング) デバッグ I/F:JTAG RAM 実行 文字入出力:デバッグ I/F(printf:SWO) デバッグ I/F:SWD ROM 実行 文字入出力:UART デバッグ I/F:JTAG(SWD にも設定可能) RAM 実行 文字入出力:デバッグ I/F(printf:SWO) デバッグ I/F:SWD ROM 実行 文字入出力:UART デバッグ I/F:JTAG(SWD にも設定可能) AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E 以降の章で説明する環境設定は各プロジェクトにおいて設定しています。 表 6 に各プロジェクトに対する環境設定の参照を示します。 表 6 サンプルソフトウェアの各プロジェクトの環境設定の参照 開発環境 プロジェクト名 UseSemihost UseSWO IAR EWARM UseUart KEIL MDK-ARM January 31, 2014, AN706-00062-1v1-J UseSWO UseUart 環境設定の参照 6.2.1.1 6.2.1.2 (1) 6.2.1.3 6.2.1.4 6.2.1.5 6.2.1.7 6.2.1.1 6.2.1.2 (2) 6.2.1.3 6.2.1.5 6.2.1.6 6.2.1.7 6.3.1.1 6.3.1.3 6.3.2 6.2.3 6.3.1.2 6.3.1.3 6.3.3 27 A P P L I C A T I O N 6.2 N O T E デバッグインタフェースを使用する場合の環境設定と動作 6.2.1 IAR EWARM の環境設定 IAR EWARM ではセミホスティング経由または SWO 経由で文字列の出力(printf)がで き、セミホスティング経由で文字列の入力(scanf)ができます。 6.2.1.1 デバッグインタフェースを使用する場合の環境設定手順(1) EWARM を起動しプロジェクトファイルを開いたら、[プロジェクト(P)]メニューの [オプション(O)]を選択します。 図 11 のデバッグインタフェースを使用する場合の環境設定(1) 28 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.1.2 N O T E デバッグインタフェースを使用する場合の環境設定手順(2) (1)セミホスティング経由(printf) [一般オプション]の[ライブラリ設定]タブを選択し、printf による文字列の出力に セミホスティングを使用する場合は、[低レベルインタフェースのライブラリ実装 (B)]の設定を「セミホスティング(S)」、[stdout/stderr]の設定を「セミホスティング 経由」に設定し、OK を押します。 図 12 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(2-1) January 31, 2014, AN706-00062-1v1-J 29 A P P L I C A T I O N N O T E (2)SWO 経由(printf) [一般オプション]の[ライブラリ設定]タブを選択し、printf による文字列の出力に SWO を使用する場合は、[低レベルインタフェースのライブラリ実装(B)]の設定を 「セミホスティング(S)」、[stdout/stderr]の設定を「SWO 経由」に設定し、OK を 押します。 図 13 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(2-2) 本設定については「IAR 技術情報」[2]の「Cortex-M3/M4 での CoreSight トレース 技術の使用」 および「Cortex-M3/M4 での CoreSight トレース技術の使用 例 5: SWO 経由の Printf」を参照してください 30 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.1.3 N O T E デバッグインタフェースを使用する場合の環境設定手順(3) [一般オプション]の[ライブラリオプション]タブを選択し、Printf フォーマッタ、 Scanf フォーマッタを「自動」に設定します。なお、「自動」以外にも設定可能です が、最適な設定とするために本設定を推奨します。 図 14 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(3) 6.2.1.4 デバッグインタフェースを使用する場合の環境設定手順(4) 「6.2.1.2 デバッグインタフェースを使用する場合の環境設定手順(2)」においてセミ ホスティング経由に設定した場合は[J-Link/J-Trace]の接続タブにおいて、インタ フェースは「JTAG(J)」、 「SWD(S)」のどちらも選択できます。なお、SWO 経由に設 定した場合は強制的に SWD に設定されるため選択できません。 JTAG(J), SWD(S)どちらも選択可能 図 15 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(4) January 31, 2014, AN706-00062-1v1-J 31 A P P L I C A T I O N 6.2.1.5 N O T E デバッグインタフェースを使用する場合の環境設定手順(5) コンパイル後ターゲットへプログラムを書き込み、デバッガを起動します。なお、 プログラムは RAM へ書き込みます(RAM 実行)。 コンパイル ターゲットへプログラムを書込み後、デバッガを起動 図 16 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(5) 32 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.1.6 N O T E デバッグインタフェースを使用する場合の環境設定手順(6) (1)「6.2.1.2 デバッグインタフェースを使用する場合の環境設定手順(2)」において(2) の SWO 経由を設定した場合は、デバッガを起動後、[SWO]をクリックします。 図 17 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(6-1) January 31, 2014, AN706-00062-1v1-J 33 A P P L I C A T I O N N O T E (2) SWO 設定ウィンドウにおいて、下記のように設定します。 ・[CPU クロック]はターゲットの動作周波数に設定します。 ・[SWO クロック]は「自動検出」にチェックします(デフォルト)。なお、本チェッ クを外した場合は、直下のウィンドウに数値を指定すると、SWO クロックを設 定できます。 ・[ITM 事象ポート]の[有効なポート]および[転送先のターミナル I/O ウィンドウ]は [0]にチェックを入れます。 (注) ITM 事象ポートとは、ITM スティミュラスポートのことをいいます。 図 18 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(6-2) 本設定については「IAR 技術情報」[2]の「Cortex-M3/M4 での CoreSight トレース 技術の使用 例 5: SWO 経由の Printf」を参照してください 34 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.1.7 N O T E デバッグインタフェースを使用する場合の環境設定手順(7) [表示(V)]メニューの[ターミナル I/O(I)]を選択し(図 19)、ターミナル I/O ウィンド ウをオープンします(図 20)。以上で設定完了です。 図 19 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(7-1) 図 20 IAR EWARM のデバッグインタフェースを使用する場合の環境設定(7-2) January 31, 2014, AN706-00062-1v1-J 35 A P P L I C A T I O N 6.2.2 N O T E IAR EWARM の動作 本アプリケーションノートに添付する、サンプルソフトウェアの動作を説明します。 6.2.2.1 デバッグインタフェースを使用する場合の動作(1) 実行開始後、ターミナル I/O ウィンドウの出力ウィンドウに printf で設定した文字 列が出力されます。 図 21 IAR EWARM のデバッグインタフェースを使用する場合の動作(1) 36 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.2.2 N O T E デバッグインタフェースを使用する場合の動作(2) scanf についてはターミナル I/O ウィンドウの入力ウィンドウに文字列を入力しま す。サンプルソフトウェアは数値文字列(符号なし 32 ビット)を入力する例となって います。したがって、数値(0~4294967295)とリターンを入力します。 図 22 IAR EWARM のデバッグインタフェースを使用する場合の動作(2) 6.2.2.3 デバッグインタフェースを使用する場合の動作(3) サンプルソフトウェアでは scanf で取得した数値文字列を printf により出力します。 図 23 IAR EWARM のデバッグインタフェースを使用する場合の動作(3) January 31, 2014, AN706-00062-1v1-J 37 A P P L I C A T I O N 6.2.3 N O T E KEIL MDK-ARM の環境設定 KEIL MDK-ARM では SWO 経由で文字列の出力(printf)ができ、グローバル変数によ り文字列の入力(scanf)ができます。 低水準入出力処理の実装 6.2.3.1 KEIL MDK-ARM の環境においては printf による文字列出力、scanf による文字列入 力を行うために、図 24 に示す低水準入出力処理のソースコードを実装します。 #pragma import(__use_no_semihosting_swi) struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { return(SER_PutChar(ch)); } int fgetc(FILE *f) { int key; key = SER_GetChar(); if (key == '¥r') { SER_PutChar('¥n'); } else { SER_PutChar(key); } } セミホスティング機能を外す宣言 なお、KEILではセミホスティング機能は使用できない セミホスティング機能を外した場合に必要な宣言 printfの文字列出力の際にライブラリから呼び出される scanfの文字列入力の際にライブラリから呼び出される なお、入力された文字列をコンソールへ返す(エコー) リターンが入力された場合は改行に変更して出力する これら関数において実際の入出力処理を組み込む (SER_PutChar:出力、SER_GetChar:入力、※) return (key); int ferror(FILE *f) { return EOF; } printfの文字列終了の際にライブラリから呼び出される void _ttywrch(int ch) { sendchar(ch); } コンソールに文字を書き込む なお、サンプルソフトウェアでは呼び出されない void _sys_exit(int return_code) { label: goto label; /* endless loop */ } ライブラリの終了関数 なお、サンプルソフトウェアでは呼び出されない 図 24 KEIL MDK-ARM における低水準入出力処理のソースコード(1) ( ※ ) 図 24 に 示 す 実 装 に つ い て は 「 MDK-ARM Primer 」 [4] に お け る 「 Create Application」の「Configure Cortex-M Target」の「Library Retarget File」を参照 してください。なお、SER_PutChar, SER_GetChar 関数は、UART へのアクセス 処理の実装を考慮し分けています(図 25 参照)。 38 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E さらに、図 25 に示すソースコードを実装します。なお、SER_PutChar 関数の実 装については「ULINK2 User’s Guide」[5]における「µVision Windows」の「Debug (printf) Viewer」を参照してください。また、SER_SetChar 関数で使用している ITM_CheckChar 関数、ITM_ReceiveChar 関数については「CMSIS Debug Support」 [3]を参照してください。 #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define DEMCR #define TRCENA (*((volatile unsigned long *)(0xE000EDFC))) 0x01000000 volatile int32_t ITM_RxBuffer = ITM_RXBUFFER_EMPTY; int SER_PutChar (int iChar) { if (DEMCR & TRCENA) { while (ITM_Port32(0) == 0); } ITM_Port8(0) = c; } return (iChar); ITMスティミュラスポートへのアクセスマクロ デバッグ例外およびモニタ制御レジスタアドレスと トレース許可ビットマスクデータ 受信データ格納用の指定グローバル変数 CMSISでは実体が宣言されていないため、 ここで宣言する。 ITMトレース許可のチェック ITMスティミュラスポート0が 使用可能になるまで待つ ITMスティミュラスポート0にデータをセット SWOよりデータが出力される int SER_GetChar (void) { int iChar; while (0 == ITM_CheckChar()); iChar = ITM_ReceiveChar(); } return (iChar); データ受信待ち(CMSISのITM_CheckChar関数) 受信するとITM_RxBufferにデータがセットされる データ受信(CMSISのITM_ReceiveChar関数) 受信データをITM_RxBufferから引出し 図 25 KEIL MDK-ARM における低水準入出力処理のソースコード(2) January 31, 2014, AN706-00062-1v1-J 39 A P P L I C A T I O N 6.2.3.2 N O T E デバッグインタフェースを使用する場合の環境設定手順(1) MDK-ARM を起動しプロジェクトファイルを開いたら、[Project]メニューの[Option for Target ...]を選択します。 図 26 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(1) 40 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.3.3 N O T E デバッグインタフェースを使用する場合の環境設定手順(2) Option for Target ...ウィンドウの[Debug]タグの[Settings]を押し(図 27)、Cortex-M Target Driver Setup ウィンドウを開き、[Debug]タグの[SWJ]にチェックを入れ[Port] を「SW」に設定します(図 28)。デバッグインタフェースが SWD に設定されます。 図 27 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(2-1) 図 28 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(2-2) January 31, 2014, AN706-00062-1v1-J 41 A P P L I C A T I O N 6.2.3.4 N O T E デバッグインタフェースを使用する場合の環境設定手順(3) Cortex-M Target Driver Setup ウィンドウの[Trace]タグを開き、下記の設定にします。 ・[Core Clock]にはターゲットの動作周波数を設定します。 ・[Trace Enable]にチェックを入れます。 ・SWO クロックは[AutoSelect]にチェックすることを推奨します(デフォルト、最適 設定とするため)。なお、本チェックを外した場合は、[SWO Clock Prescaler](プリ スケーラ)の値を変えることにより SWO クロックを設定できます(SWO クロック = 動作周波数/プリスレーラ)。 ・[ITM Stimulus Ports]の[Enable]は[ 0]をチェックします。 ・[Privilege] にはチェックを入れる必要はありません。 図 29 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(3) 42 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.3.5 N O T E デバッグインタフェースを使用する場合の環境設定手順(4) コンパイル(ビルド or リビルド)後に [デバッグ開始]を押し、デバッグを開始しま す(RAM 実行)。 コンパイル(ビルド) コンパイル(リビルド) デバッグ開始 図 30 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(4) January 31, 2014, AN706-00062-1v1-J 43 A P P L I C A T I O N 6.2.3.6 N O T E デバッグインタフェースを使用する場合の環境設定手順(5) デバッガを起動後、[View]メニューの[Serial Windows]の[Debug (printf) Viewer]を 選択し(図 31)、 Debug (printf) Viewer ウィンドウを開きます(図 32)。 以上で設定完了です。 図 31 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(5-1) 図 32 KEIL MDK-ARM のデバッグインタフェースを使用する場合の環境設定(5-2) 44 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.4 N O T E KEIL MDK-ARM の動作 本アプリケーションノートに添付する、サンプルソフトウェアの動作を説明します。 6.2.4.1 デバッグインタフェースを使用する場合の動作(1) 実行開始後、Debug (printf) Viewer ウィンドウに printf で設定した文字列が出力さ れます。 図 33 KEIL MDK-ARM のデバッグインタフェースを使用する場合の動作(1) January 31, 2014, AN706-00062-1v1-J 45 A P P L I C A T I O N 6.2.4.2 N O T E デバッグインタフェースを使用する場合の動作(2) scanf については Debug (printf) Viewer ウィンドウに文字列を入力します。サンプ ルソフトウェアは数値文字列を入力(符号なし 32 ビット)する例となっています。し たがって、数値(0~4294967295)とリターンを入力します。なお、サンプルソフト ウェアでは scanf における入力文字列を Debug (printf) Viewer へ出力(エコー)するよ うにしています。 図 34 KEIL MDK-ARM のデバッグインタフェースを使用する場合の動作(2) 46 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.2.4.3 N O T E デバッグインタフェースを使用する場合の動作(3) サンプルソフトウェアにおいては scanf により取得した数値文字列を printf により 出力します。IAR EWARM とは異なり、同一ウィンドウで文字列の入出力ができるた め、ターミナルソフトと同等の動作となります。 図 35 KEIL MDK-ARM のデバッグインタフェースを使用する場合の動作(3) January 31, 2014, AN706-00062-1v1-J 47 A P P L I C A T I O N 6.3 N O T E UART を使用する場合の環境設定と動作 printf および scanf による入出力に UART を使用する場合には、低水準入出力処理に UART へのアクセス処理を実装する必要があります。なお、UART へのアクセス処理は IAR EWARM、KEIL MDK-ARM どちらの場合も、指定の API 関数に実装します。 低水準入出力処理の実装 6.3.1 6.3.1.1 IAR EWARM 用の低水準入出力処理の実装 IAR EWARM では標準入出力ライブラリにある__write 関数および__read 関数を別 途用意すると、コンパイルの際にオーバライドし、置き換えます。したがって、UART の低水準処理を行う場合は__write 関数および__read 関数をユーザ側で用意し、これ ら関数内で UART へのアクセスをするように実装します。 __write 関数は printf より、 __read 関数は scanf より呼び出されます。__write 関数のソースコードを図 36 に、 __read 関数のソースコードを図 37 に示します。 size_t __write(int handle, const unsigned char * buffer, size_t size) { size_t nChars = 0; if (buffer == 0) { /* * This means that we should flush internal buffers. Since we * don't we just return. (Remember, "handle" == -1 means that all * handles should be flushed.) */ return 0; } /* This template only writes to "standard out" and "standard err", * for all other file handles it returns failure. */ if (handle != _LLIO_STDOUT && handle != _LLIO_STDERR) { return _LLIO_ERROR; } for (/* Empty */; size != 0; --size) { SER_PutChar(*buffer); ++buffer; ++nChars; } } 指定バイト数分のデータを UARTへ出力します return nChars; 図 36 __write 関数のソースコード 48 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E size_t __read(int handle, unsigned char * buffer, size_t size) { /* Remove the #if #endif pair to enable the implementation */ int nChars = 0; /* This template only reads from "standard in", for all other file * handles it returns failure. */ if (handle != _LLIO_STDIN) { return _LLIO_ERROR; } for (/* Empty */; size > 0; --size) { int c = SER_GetChar(); /* Echo */ if (c == '¥r') { /* Convert return code to new line */ SER_PutChar('¥n'); } else { SER_PutChar(c); } } } UARTより取得した文字列をバッファ (パラメータ)にセットします また、入力された文字列をUARTへ 出力(エコー)します リターンが入力された場合は改行に 変更して出力します *buffer++ = c; ++nChars; return nChars; 図 37 __read 関数のソースコード January 31, 2014, AN706-00062-1v1-J 49 A P P L I C A T I O N 6.3.1.2 N O T E KEIL MDK-ARM 用の低水準入出力処理の実装 KEIL MDK-ARM では「6.2.3.1 低水準入出力処理の実装」における図 24 と同じ ソースコードを実装します。 #pragma import(__use_no_semihosting_swi) struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { return(SER_PutChar(ch)); } int fgetc(FILE *f) { int key; key = SER_GetChar(); if (key == '¥r') { SER_PutChar('¥n'); } else { SER_PutChar(key); } } return (key); int ferror(FILE *f) { return EOF; } void _ttywrch(int ch) { sendchar(ch); } void _sys_exit(int return_code) { label: goto label; /* endless loop */ } 図 38 KEIL MDK-ARM における低水準入出力処理のソースコード 50 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.3.1.3 N O T E UART へのアクセス関数の実装(IAR EWARM, KEIL MDK-ARM 共通) 6.3.1.1 章および 6.3.1.2 章で示した関数とは別に、UART へのアクセス関数を実装し ます。なお、IAR EWARM、KEIL MDK-ARM どちらも同じソースコードになります。 図 39 に示す SER_init 関数は MFS の ch.0 に対する UART 初期化関数であり、printf, scanf を使用する前に呼び出します(サンプルソフトウェアにおいては FM3 マイコン MB9BF506R の MFS ch.0 を UART として使用しています)。 void SER_init (void) { uint32_t u32ReloadValue; FM3_GPIO->PFR2 = FM3_GPIO->PFR2 | 0x0006; FM3_GPIO->EPFR07 = FM3_GPIO->EPFR07 | 0x00000140; MFS ch.0をUARTとして使用するためのポート設定 FM3_MFS0_UART->SMR = 0x01; FM3_MFS0_UART->SCR = 0x00; MFS ch.0のモードをUARTモードに設定 ボーレート、UARTの設定前にシリアル制御停止 switch (FM3_CRG->APBC2_PSR & 0x03) { case 0: u32ReloadValue = 1; break; case 1: u32ReloadValue = 2; break; case 2: u32ReloadValue = 4; break; default: u32ReloadValue = 8; } } UARTで使用されるAPBバス2の プリスケール値をチェックし CPUクロックに対する分周比を設定 u32ReloadValue = ((__HCLK / u32ReloadValue) / 115200) - 1; FM3_MFS0_UART->BGR = u32ReloadValue & 0x7FFF; ボーレートジェネレータへのリロード値を計算 ボーレートジェネレータへリロード値を設定 (EXT=0 : 内部クロック使用) FM3_MFS0_UART->ESCR = 0x00; FM3_MFS0_UART->SCR = 0x03; FM3_MFS0_UART->SSR_f.REC = 1; UARTの各設定(データビット数、パリティ等) 送受信機能を許可 受信エラーフラグ(パリティ/オーバーラン/フレーミング)を クリア 図 39 UART の初期化関数(SER_init)のソースコード January 31, 2014, AN706-00062-1v1-J 51 A P P L I C A T I O N N O T E 図 40 に示す SER_PutChar 関数は MFS ch.0 の UART 出力関数で、SER_GetChar 関数は MFS ch.0 の UART 入力関数です。これら関数は文字列入力処理関数(IAR EWARM:__write 関数および__read 関数、KEIL MDK-ARM:fputc 関数および fgetc 関数)より呼び出される低水準の出力および入力の関数です。 int SER_PutChar(int c) { while (FM3_MFS0_UART->SSR_f.TDRE == 0); FM3_MFS0_UART->TDR = (uint16_t)c; return (c); } 送信データレジスタ(TDR)へセット可能になるまで待つ 送信データレジスタ(TDR)へデータをセット(送信) int SER_GetChar(void) { int ch; } while (FM3_MFS0_UART->SSR_f.RDRF == 0); データが受信されるまで待つ if((1 == FM3_MFS0_UART->SSR_f.FRE) || (1 == FM3_MFS0_UART->SSR_f.PE) || (1 == FM3_MFS0_UART->SSR_f.ORE) ) { FM3_MFS0_UART->SSR_f.REC = 1; } 受信エラーをチェックし、エラーの場合は エラーフラグをクリアする ch = (int)FM3_MFS0_UART->RDR; 受信データを引き出す(※1) return (ch); 図 40 UART の出力関数(SER_PutChar)および入力関数(SER_GetChar)のソースコード (※1) 本アプリケーションノートに添付するサンプルソフトウェアにおいては、受信エ ラーの場合でも受信データレジスタの内容を有効としています。 なお、受信エラーの場合でも受信データレジスタからデータを読み出すまで RDRF は 1 にセットされたままとなり、次の受信ができません。 (※2)本アプリケーションノートに添付するサンプルソフトウェアにおいては、図 25、 図 39 および図 40 に示すソースコードをまとめ、コンパイルオプションにより各 開発環境および各プロジェクトで使用できるようにしています。 52 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.3.2 N O T E IAR EWARM の環境設定 6.3.2.1 UART を使用する場合の環境設定手順(1) 標準入出力ライブラリを使用するために、[一般オプション]の[ライブラリ設定]タ ブを選択し、図 41 のように設定します。なお、[stdout/stderr]の設定は「セミホス ティング経由」または「SWO 経由」のどちらも選択できます。 どちらも選択可能 図 41 IAR EWARM の UART を使用する場合の環境設定(1) January 31, 2014, AN706-00062-1v1-J 53 A P P L I C A T I O N 6.3.2.2 N O T E UART を使用する場合の環境設定手順(2) [一般オプション]の[ライブラリオプション]タブは「6.2.1.3 デバッグインタフェー スを使用する場合の環境設定手順(3)」と同様に図 42 に示す設定にします。 図 42 IAR EWARM の UART を使用する場合の環境設定(2) 6.3.2.3 UART を使用する場合の環境設定手順(3) 「6.3.2.2UART を使用する場合の環境設定手順(2)」でセミホスティング経由とした 場合は [J-Link/J-Trace]の接続タブでインタフェースを「JTAG(J)」、 「SWD(S)」のど ちらも選択できます。なお、SWO 経由に設定した場合は強制的に SWD に設定され るため選択できません。 JTAG(J), SWD(S)どちらも選択可能 図 43 IAR EWARM の UART を使用する場合の環境設定(3) 54 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.3.2.4 N O T E UART を使用する場合の環境設定手順(4) コンパイル後ターゲットへプログラムを書き込み、デバッガを起動します。なお、 プログラムは Flash へ書き込みます(ROM 実行)。 コンパイル ターゲットへプログラムを書込み後、デバッガを起動 図 44 IAR EWARM の UART を使用する場合の環境設定(4) January 31, 2014, AN706-00062-1v1-J 55 A P P L I C A T I O N 6.3.3 N O T E KEIL MDK-ARM の環境設定 6.3.3.1 UART を使用する場合の環境設定手順(1) Cortex-M Target Driver Setup ウィンドウの[Debug]タグの[Port]の設定は「JTAG」、 「SW」(SWD)のどちらも選択できます。なお、[SWJ]には必ずチェックしてください。 「JTAG」, 「SW」(SWD)どちらも選択可能 図 45 KEIL MDK-ARM の UART を使用する場合の環境設定(1) 56 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.3.3.2 N O T E UART を使用する場合の環境設定手順(2) コンパイル(ビルド or リビルド)後に Flash 書込みを実行し、続けて[デバッグ開始] を押して、デバッグを開始します(ROM 実行)。 コンパイル(ビルド) コンパイル(リビルド) Flash書込み デバッグ開始 図 46 KEIL MDK-ARM の UART を使用する場合の環境設定(2-2) January 31, 2014, AN706-00062-1v1-J 57 A P P L I C A T I O N 6.3.4 N O T E PC とボード間の接続 PC とボード間には ICE の接続に加え、PC のターミナルソフト(Tera Term など)を使 用するためにボードの UART 出力と PC 間を RS232C または USB(USB の場合はボー ド側に USB-UART ブリッジドライバなどが必要となります)で接続をします。なお、 Release 版の場合には Flash へプログラムを書込み後、ICE を接続せずに実行できます。 ICE RS232C ケーブルなど 図 47 PC とボード間の接続 6.3.5 ターミナルソフトの設定 PC のターミナルソフト(図 48 は Tera Term の例で PC の COM1 に接続した場合)を 下記の設定にします。 ボーレート:115200 データビット数:8 ビット パリティ:なし ストップビット:1 ビット フロー制御:なし 図 48 ターミナルソフトの設定 58 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 6.3.6 N O T E 動作 UART を使用する場合の動作は IAR EWARM、KEIL MDK-ARM どちらの場合も同様 です。デバッガを起動後、ターミナルソフトにおいて図 49 に示す動作をします。 起動するとターミナルソフトのウィンドウに printfで設定した文字列が出力されます scanfが実行されるため、ターミナルソフトのウィンドウに文 字列を入力します サンプルは数値文字列を入力(符号無32bit)するように なっています したがって、数値(0~4294967295)とリターンを入力します なお、サンプルではscanfにおける入力文字列をターミナル ソフトへ出力(エコー)するようにしています サンプルにおいてはscanfにより取得した数値をprintfに より出力します 図 49 UART を使用する場合の動作 January 31, 2014, AN706-00062-1v1-J 59 A P P L I C A T I O N N O T E printf を使用しない場合の文字列の出力方法 7 概要 7.1 デバッガの文字列入出力ウィンドウへ文字列を出力する場合に、標準出力関数であ る printf を使用せずに、ITM スティミュラスポートへ文字列のデータを出力する処理を 直接使用することにより、SWO より文字列を出力しデバッガの文字列入力ウィンドウ へ文字列を出力することができます。例えば「%d」などのフォーマット指定子を使用 しない場合に良いと考えられます。また、標準出力ライブラリを使用しないため、そ の分の容量を削減できます。 ITM スティミュラスポートへの文字列出力関数の例を図 50 に示します。本関数を 「DPrintf(“文字列”);」のように呼び出すと指定した文字列をデバッガの文字列入出力 ウィンドウへ出力します。本関数では CMSIS の ITM_SendChar 関数を使用しており、 IAR EWARM および KEIL MDK-ARM どちらにおいても使用可能です。本関数を使用し た場合の処理時間などについては「5.1 の処理時間」および「5.2 環境および方法によ る差異」を参照してください。なお、本章の説明はサンプルソフトウェアには含まれ ていません。 void DPrintf (char *cpData) { if (NULL != cpData) { while (‘¥0’ != *cpData) { ITM_SendChar((uint32_t)*cpData); } } } 文字列の末尾まで実施 ITMスティミュラスポート0にデータをセット SWOよりデータが出力される cpData++; ポインタを次へ移動 図 50 ITM スティミュラスポートへの文字列出力関数の例 ITM スティミュラスポートへの文字列出力関数の処理の流れを図 51 に示します。 ITMスティミュラスポートへの文字列出力関数 ITMスティミュラスポート0に 文字列を出力 SWV SWO デバッガ(ターミナルI/O) 図 51 ITM スティミュラスポートへ文字列出力関数の処理の流れ 60 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2 N O T E 環境設定 7.2.1 IAR EWARM の環境設定 7.2.1.1 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(1) EWARM を起動しプロジェクトファイルを開いたら、[プロジェクト(P)]メニューの [オプション(O)]を選択します。 図 52 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(1) January 31, 2014, AN706-00062-1v1-J 61 A P P L I C A T I O N 7.2.1.2 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(2) [一般オプション]の[ライブラリ設定]タブを選択し、 [低レベルインタフェースのラ イブラリ実装(B)]の設定を「セミホスティング(S)」、[stdout/stderr]の設定を「SWO 経由」に設定し、OK を押します。本設定は ITM スティミュラスポートへの文字列出 力関数を使用する場合、デバッグインタフェースを SWD にしなければならないため の設定です。 図 53 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(2) 62 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2.1.3 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(3) コンパイル後ターゲットへプログラムを書き込み、デバッガを起動します。 コンパイル ターゲットへプログラムを書込み後、デバッガを起動 図 54 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(3) January 31, 2014, AN706-00062-1v1-J 63 A P P L I C A T I O N 7.2.1.4 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(4) デバッガを起動後、[SWO]をクリックします。 図 55 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(4) 64 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2.1.5 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(5) SWO 設定ウィンドウにおいて、図 56 のように設定します。 なお、本設定は「6.2.1.6 デバッグインタフェースを使用する場合の環境設定手順(6)」 の(2)と同様です。 図 56 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(5) January 31, 2014, AN706-00062-1v1-J 65 A P P L I C A T I O N 7.2.1.6 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(6) [表示(V)]メニューの[ターミナル I/O(I)]を選択し(図 57)、ターミナル I/O ウィンド ウをオープンします(図 58)。以上で設定完了です。 図 57 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(6-1) 図 58 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(6-2) 66 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2.2 N O T E KEIL MDK-ARM の環境設定 7.2.2.1 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(1) MDK-ARM を起動しプロジェクトファイルを開いたら、[Project]メニューの[Option for Target ...]を選択します。 図 59 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(1) January 31, 2014, AN706-00062-1v1-J 67 A P P L I C A T I O N 7.2.2.2 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(2) Option for Target ...ウィンドウの[Debug]タグの[Settings]を押し(図 60)、Cortex-M Target Driver Setup ウィンドウを開き、[Debug]タグの[SWJ]にチェックを入れ[Port] を「SW」に設定します(図 61)。デバッグインタフェースが SWD に設定されます。 図 60 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(2-1) 図 61 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(2-2) 68 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2.2.3 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(3) Cortex-M Target Driver Setup ウィンドウの[Trace]タグを開き、のように設定にし ます。なお、本設定は「6.2.3.4 デバッグインタフェースを使用する場合の環境設定 手順(3)」と同様です。 図 62 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(3) January 31, 2014, AN706-00062-1v1-J 69 A P P L I C A T I O N N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 7.2.2.4 順(4) コンパイル(ビルド or リビルド)後に ROM 実行の場合は Flash 書込みを実行し、 続けて[デバッグ開始]を押して、デバッグを開始します。RAM 実行の場合は Flash への書込みは実行する必要はありません。 コンパイル(ビルド) コンパイル(リビルド) Flash書込み デバッグ開始 図 63 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手順(4) 70 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.2.2.5 N O T E ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定手 順(5) デバッガを起動後、[View]メニューの[Serial Windows]の[Debug (printf) Viewer]を 選択し(図 64)、 Debug (printf) Viewer ウィンドウを開きます(図 65)。 以上で設定完了です。 図 64 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定(5-1) 図 65 ITM スティミュラスポートへの文字列出力関数を使用する場合の環境設定(5-2) January 31, 2014, AN706-00062-1v1-J 71 A P P L I C A T I O N 7.3 N O T E 動作 7.3.1 IAR EWARM の動作 実行開始後、ターミナル I/O ウィンドウの出力ウィンドウに ITM スティミュラス ポートへの文字列出力関数(DPrintf)で設定した文字列が出力されます。 図 66 ITM スティミュラスポートへの文字列出力関数を使用する場合の動作 72 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N 7.3.2 N O T E KEIL MDK-ARM の動作 実行開始後、Debug (printf) Viewer ウィンドウに ITM スティミュラスポートへの文字 列出力関数(DPrintf)で設定した文字列が出力されます。 図 67 ITM スティミュラスポートへの文字列出力関数を使用する場合の動作 January 31, 2014, AN706-00062-1v1-J 73 A P P L I C A T I O N 8 N O T E ファイル構成 本アプリケーションノートに添付するサンプルソフトウェアのファイル構成は下記の とおりです。 +---common :共用ヘッダファイルディレクトリ +---mb9b500r.h :ペリフェラル定義ヘッダファイル +---system_mb9bf50x.c :システム設定ソースファイル +---system_mb9bf50x.h :システム設定定義ヘッダファイル +---example +---ARM +---Flash :サンプルディレクトリ :KEIL 用プロジェクトディレクトリ :Flash ロード用ファイルディレクトリ +---FLASH_DEBUG_README.txt :Flash ロード Readme テキスト +---MB9BFx06_512.FLM +---Debug_SRAM0_0x8000.ini :RAM 実行用初期化ファイル +---mb9bf50xr_sample.uvopt :オプションファイル +---mb9bf50xr_sample.uvproj :プロジェクトファイル +---Serial.h :低水準シリアル入出力処理ヘッダファイル +---Serial.c :低水準シリアル入出力処理ソースファイル +---Retarget,c :低水準入出力処理ソースファイル +---startup_mb9bf50x.s :スタート UP アセンブラファイル +---IAR +---config +---flashloader :IAR 用プロジェクトディレクトリ :コンフィグレーションファイルディレクトリ :Flash ローダディレクトリ +---MB9BF506.board :Flash ローダ設定指定ファイル +---FlashMB9BF506.flash :Flash ローダ設定ファイル +---FlashMB9BF50x.mac :Flash ローダ起動マクロファイル +---FlashMB9BF506.out :Flash ローダ本体 +---mb9bf506.icf :リンカ設定ファイル(ROM 実行用) +---mb9bf506_ram.icf :リンカ設定ファイル(RAM 実行用) +---Ram_VTOR.mac :起動マクロファイル(RAM 実行用) +---reset.mac :起動マクロファイル(ROM 実行用) +---settings +---mb9bf50xr_sample.dni 74 :Flash ロード用ファイル :デバッガ設定ファイルディレクトリ :デバッガ初期化ファイル +---mb9bf50xr_sample.dep :依存関係情報ファイル +---mb9bf50xr_sample.ewd :プロジェクト設定ファイル +---mb9bf50xr_sample.ewp :プロジェクトファイル AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E +---mb9bf50xr_sample.eww :ワークスペースファイル +---Serial.h :低水準シリアル入出力処理ヘッダファイル +---Serial.c :低水準シリアル入出力処理ソースファイル +---write.c :低水準出力処理ソースファイル +---read.c :低水準入力処理ソースファイル +---startup_mb9af13x.s :スタート UP アセンブラファイル +---source :サンプルソースディレクトリ +---mcu.h :MCU 依存ヘッダファイル +---main.c :サンプルメインルーチンソースファイル +---Readme.txt January 31, 2014, AN706-00062-1v1-J :サンプル Readme テキスト 75 A P P L I C A T I O N 9 N O T E 参考ドキュメント [1] IAR C/C++ 開発ガイド IAR EWARM のヘルプより参照してください。 [2] IAR 技術情報 Cortex-M3/M4 での CoreSight トレース技術の使用 http://www.iar.com/Global/KK_pages/Developers_Toolbox/Building_and_Debugging/Us ing_CoreSight_Trace_Techniques_on_Cortex-M3-M4/Using_CoreSight_Trace_Techni ques_on_Cortex-M3-M4.pdf.pdf Cortex-M3/M4 での CoreSight トレース技術の使用 例 5: SWO 経由の Printf http://www.iar.com/Global/KK_pages/Developers_Toolbox/Building_and_Debugging/Us ing_CoreSight_Trace_Techniques_on_Cortex-M3-M4/Example_5_Printf_via_SWO.pdf [3] CMSIS Debug Support KEIL MDK-ARM のインストールディレクトリの下記ドキュメントを参照してください。 ¥Keil¥ARM¥CMSIS¥Documentation¥CMSIS_DebugSupport.htm ただし、バージョンなどにより異なる場合があります。 [4] MDK-ARM Primer KEIL MDK-ARM のヘルプにおける µVision_Help より参照してください。 [5] ULINK2 User’s Guide KEIL MDK-ARM のヘルプにおける µVision_Help より参照してください。 [6] 32bit マイクロコントローラ FM3 ファミリ ペリフェラルマニュアル 通信マクロ編 http://www.spansion.com/document-search.aspx (本 URL のドキュメント検索でキーワード「MN706-00024」にて検索してください) ※URL は予告なく変更される可能性があります。 - 以上 – 76 AN706-00062-1v1-J, January 31, 2014 A P P L I C A T I O N N O T E 改版履歴 版数 日付 内容 1.0 版 2013/1/8 新規作成 1.1 版 2014/1/31 社名変更および記述フォーマットの変換 January 31, 2014, AN706-00062-1v1-J 77 A P P L I C A T I O N N O T E 免責事項 本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が 確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における 核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また は損害についても、Spansion は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願 いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。 商標および注記 このドキュメントは、断りなく変更される場合があります。本資料には Spansion が開発中の Spansion 製品に関する情報が 記載されている場合があります。Spansion は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする 権利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全 性, 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、ま た、明示, 黙示または法定されているあらゆる保証をするものでもありません。Spansion は、このドキュメントに含まれる 情報を使用することにより発生したいかなる損害に対しても責任を一切負いません。 Copyright © 2013-2014 Spansion Inc. All rights reserved. ® ® ® TM TM 商標:Spansion , Spansion ロゴ (図形マーク), MirrorBit , MirrorBit Eclipse , ORNAND 及びこれらの組合せは、米国・ 日本ほか諸外国における Spansion LLC の商標です。第三者の社名・製品名等の記載はここでは情報提供を目的として表記 したものであり、各権利者の商標もしくは登録商標となっている場合があります。 78 AN706-00062-1v1-J, January 31, 2014