...

AN706-00062-1v1-J

by user

on
Category: Documents
25

views

Report

Comments

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
Fly UP