Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
TM
September 2013
TM 2
1. Kinetisシリーズ概要紹介
2. Kinetis L シリーズの低消費電力技術の紹介
3. Kinetis LシリーズのFreedomボードを使用したハンズオン
4. オンライン開発環境「mbed」の紹介
3 TM
50年以上の実績
5,500人以上のエンジニア
6,000件以上の特許群
マイクロコントローラ&デジタル・ネットワーキング・プロセッサの
グローバル・リーダー
マイクロコントローラ
デジタル・ネットワーキング
オートモーティブ MCU
アナログ&センサ
RF
5つのコア製品
グループ
4つのフォーカスマーケット
オートモーティブ
ネットワーキング
インダストリアル
コンスーマ
4 TM
MC6801
First Engine
Control MCU
First 32-bit
68K MCU
1978 1988 1993 1995
2003
2006
2007
2010
First Flash-based 32-bit MCUs
for Single-Chip Connectivity
First 32-bit MCU w/Flash memory
Flexis 8- and 32-bit
MCU Duos
First 90 nm industrial MCUs
ColdFire+ and Kinetis
First ColdFire 32-bit MCU
MPC5500
32-bit RISC MCU
2009 First Dual-Core
Automotive Power
Architecture MCU
2012 Expanding Kinetis portfolio
5 TM
業界最高クラスのARMコア搭載製品ラインナップによる
スケーラビリティとコンパチビリティを提供
Kinetis(キネティス)
マイクロコントローラ Design Potential. Realized
Vybrid(バイブリッド) コントローラソリューション Rich Apps in Real Time.
i.MX(アイドットエムエックス) アプリケーションプロセッサ Your Interface to the World.
QorIQプロセッサ
built on Layerscape
Architecture Accelerating the Network’s IQ
Real-time, highly integrated
solutions with best-in-class 2D
graphics to enable
your system to control,
interface, connect, secure and
scale.
Industry’s most versatile
solutions for multimedia and
display applications, with
multicore scalability and
market-leading power,
performance & integration.
Industry’s most scalable
ultra-low-power, mixed-signal
MCU solutions based on the
ARM Cortex-M4(F) and
Cortex-M0+ architectures.
Industry’s first software-aware,
core-agnostic networking
system architecture for the
smarter, more capable
networks of
tomorrow – end to end.
オートモーティブ オートモーティブ ネットワーキング
インダストリアル インダストリアル インダストリアル
コンシューマ コンシューマ コンシューマ
インダストリアル
コンシューマ
6 TM
Pe
rfo
rma
nc
e
Integration
Kinetis Lシリーズ 超低消費電力 / 低コスト
ARM Cortex-M0+コア
48MHz / 8KB – 256KB
ミックスドシグナル
コネクティビティ & HMI
小ピン・パッケージ
Kinetis Eシリーズ 堅牢 / 5V
ARM Cortex-M0+コア
20MHz / 64KB
256バイト EEPROM
高ノイズ環境対応
高信頼性アプリケーション対応
フリースケール製ツールチェーン + ARMエコシステム・パートナによる IDE / RTOS / ミドルウェア・パッケージ
ARMマイコン最大級のスケーラブルなラインナップと低消費電力、高信頼性、長期製品供給プログラム
Kinetis Kシリーズ 高性能
ARM Cortex-M4(F)コア
50MHz – 150MHz
32KB – 1MB
低電力FlexMemory
ミックスドシグナル
コネクティビティ
HMI & セキュリティ
汎用組込み向け
特定用途向け
Kinetis Wシリーズ RFトランシーバ内蔵
ARM Cortex-M0+コア
およびARM Cortex-M4コア
sub-1 GHz or 2.4 GHz
高性能RFトランシーバ
Kinetis Mシリーズ 高精度メータリング
ARM Cortex-M0+コア
24-bit ADコンバータ
スマートメータ機能を
ワンチップに集積
量産中
量産中
Coming
2013
ES
供給中
ES
供給中
新製品
7 TM
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I K30 Family
72-100MHz
64-512KB
64-144pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I K20 Family
50-120MHz
32KB-1MB
32-144pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I K10 Family
50-120MHz
32KB-1MB
32-144pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I K40 Family
72-100MHz
64-512KB
64-144pin
I I I I I I I I
I I
I I I
I I I I I I I I
I I
I I I K50 Family
72-100MHz
128-512KB
64-144pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I K60 Family
100-150MHz
256KB-1MB
100-256pin
I I I I I I I I
I I
I I I
I I I I I I I I
I I
I I I K70 Family
120-150MHz
512KB-1MB
196-256pin
+ USB
+セグメント
LCD
+セグメント
LCD
+ USB
+ イーサネット, 暗号化
タンパ回路
DRAMコントローラ
+ アナログ測定エンジン
イーサネット, 暗号化
+グラフィックLCD
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I KL3x Family
48MHz
64-256KB
64-121pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I KL2x Family
48MHz
32KB-256KB
32-121pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I KL1x Family
48MHz
32KB-256KB
32-80pin
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I KL4x Family
48MHz
128-256KB
64-121pin
8ビット
MCU
コンパチ
I I I I I I I I
I I I I I I I I
I I
I I I
I I
I I I KL0x Family
48MHz
8KB-32KB
<24-48pin
エントリ
ポイント
ARM
Cortex-M0+
ARM
Cortex-M4
8 TM
32QFN
5 x 5 mm
0.5mm pitch
(K10/20)
(KL0/1/2)
Common Packages
64MAPBGA
5 x 5 mm
0.5mm pitch
(K10/20)
(KL1*/2*/3*/4*)
Kinetis K Series Package
Kinetis L Series Package
48LQFP
7 x 7 mm
0.55mm pitch
(K10/20)
(KL0/1*/2*)
64LQFP
10 x 10 mm
0.5mm pitch
(K10/20/30/40/50)
(KL1/2/3/4)
80LQFP
12 x 12 mm
0.5mm pitch
(K10/20/30/40/50)
(KL1/2/3*/4*)
100LQFP
14 x 14 mm
0.5mm pitch
(K10/20/30/40/50/60)
(KL3/4)
144LQFP
20 x 20 mm
0.5mm pitch
(K10/20/30/40/50/60)
48QFN
7 x 7 mm
0.5mm pitch
(K10/20)
(KL0/1*/2*)
144MAPBGA
13 x 13 mm
1.0mm pitch
(K10/20/30/40/50/60)
256MAPBGA
17 x 17 mm
1.0mm pitch
(K60/70)
121MAPBGA
8 x 8 mm
0.65mm pitch
(K10/20/30/40/50/60)
(KL2/3/4)
32LQFP
7 x 7 mm
0.8mm pitch
(KL0)
35WLCSP
2.55x3x0.56 mm
0.4mm pitch
(KL1*/2*)
25WLCSP
2.3x2.3x0.56 mm
0.4mm pitch
(KL0*)
20WLCSP
2x2x0.56 mm
0.4mm pitch
(KL0)
90WLCSP
3.9x4.4x0.56 mm
0.4mm pitch
(K10/20*)
110WLCSP
3.9x4.4x0.56 mm
0.4mm pitch
(K10/20*)
120WLCSP
5.3x5.3x0.56 mm
0.4mm pitch
(K10/20/60)
143WLCSP
6.5x5.6x0.56 mm
0.4mm pitch
(K61)
24QFN
4 x4x1 mm
0.5mm pitch
(KL0x)
16QFN
3x3x1 mm
0.5mm pitch
(KL02)
Kinetis L Series Only Kinetis K Series Only
TM 9
1. Kinetisシリーズ概要紹介
2. Kinetis L シリーズの低消費電力技術の紹介
3. Kinetis LシリーズのFreedomボードを使用したハンズオン
4. オンライン開発環境「mbed」の紹介
10 TM
世界最高エネルギー効率 高効率コア
&
省電力アーキテクチャ
ローエンドからハイエンドまで幅広いスケラービリティ
Kinetis K シリーズとの互換性とピンコンパチ品の提供
&
多彩なメモリサイズと
パッケージ・ラインナップ
充実した
エコシステム ARM エコシステム
&
フリースケール
システムパートナー
Kinetis L Series The evolution of the entry-level MCU
11 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビットプ・ロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
12 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビット・プロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
13 TM
シングル・サイクル
アクセス I/O ポート • M0コア比50%高速GPIO
•ネスト型ベクタ割込みコントローラ(NVIC)
•外部イベントに対する低レイテンシ、ばらつきのない割込み応答性能
エネルギー効率 • 2段パイプライン
•ダイナミック電力の最適化
•パワーマネジメント機能
•ウェイクアップ割込みコントローラ
マイクロ・トレース
バッファ(MTB) •より高速で正確なデバッグが可能
•非イントルーシブ型
• 2ピンSWDやJTAGからのリード(CPU Stop状態)
プロセッサ能力 • 1.77Coremark/MHzの性能
• Cortex-M0コアとの完全互換
• Cortex-M3/M4コアとの高い互換性によるアップグレード
•わずか56の命令セット
• Thumb命令によるクラス最高のコード密度
14 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビット・プロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
15 TM
• 書き込み時
− Logical AND, OR, XOR
− Bit field insert (BFI)
Peripherals BME Core Accesses
BMEを使用すると・・・
命令数が削減できる 処理時間
コードサイズ の削減
ビット・マニピュレーション・エンジンとは・・・
各ペリフェラルのレジスタ値を読み込むか書き込む時に、同時にビット操作を行うことができるハードウェア・エンジン
サポートされている操作
• 読み込み時
− Load-and-Clear 1 bit (LAC1)
− Load-and-Set 1 bit (LAS1)
− Unsigned Bit Field Extract (UBFX)
16 TM
BMEを使わずに XOR 操作を行う場合(通常のCコードで実装)
GPIOA_PDOR ^= 0x02;
0000005E 0x.... LDR R0,??DataTable6_5 ;; 0x400ff000
00000060 0x6800 LDR R0,[R0, #+0]
00000062 0x2102 MOVS R1,#+2
00000064 0x4041 EORS R1,R1,R0
00000066 0x.... LDR R0,??DataTable6_5 ;; 0x400ff000
00000068 0x6001 STR R1,[R0, #+0]
コードサイズとして12バイト使用
コード上での記述
(Cコードで実装)
実際の処理
17 TM
BMEを使用して XOR 操作を行う場合
//macro used to generate hardcoded XOR address
#define BME_XOR_ADDR(ADDR) (*(volatile uint32_t
*)(((uint32_t)ADDR) | (3<<26)))
BME_XOR_ADDR(&GPIOA_PDOR) = 0x02;
00000014 0x.... LDR R0,??DataTable6_6 ;; 0x4c0ff000
00000016 0x2102 MOVS R1,#+2
00000018 0x6001 STR R1,[R0, #+0]
コードサイズとして6バイト使用
BMEを使用しない場合に比べて50%コードサイズを削減
コード上での
定義と記述
実際の処理
18 TM
XOR操作を行った場合の処理時間比較
通常のCコードで実装 BMEを使用した場合
処理時間は276ns → 166ns と約40%削減
19 TM
BMEを使わずにBit Field Insert 操作を行う場合(通常のCコードで実装)
reg_val = *addr;
mask = ((1 << (fieldwidth+1)) - 1) << bitpos;
reg_val = (reg_val & ~mask)|((wdata) & mask);
*addr = reg_val;
reg_val = *addr;
00000022 0x6804 LDR R4,[R0, #+0]
mask = ((1 << (fieldwidth+1)) - 1) << bitpos;
00000024 0x2501 MOVS R5,#+1
00000026 0x1C5B ADDS R3,R3,#+1
00000028 0x409D LSLS R5,R5,R3
0000002A 0x1E6D SUBS R5,R5,#+1
0000002C 0x4095 LSLS R5,R5,R2
reg_val = (reg_val & ~mask)|((wdata) & mask);
0000002E 0x43AC BICS R4,R4,R5
00000030 0x0022 MOVS R2,R4
00000032 0x002C MOVS R4,R5
00000034 0x400C ANDS R4,R4,R1
00000036 0x4314 ORRS R4,R4,R2
*addr = reg_val;
00000038 0x6004 STR R4,[R0, #+0]
コードサイズとして24バイト使用
実際の処理
Bit field offset “b” Data being written New destination value
0 ----_-xyz abcd_exyz
1 ----_xyz- abcd_xyzh
2 ---x_yz-- abcx_yzgh
3 --xy_z--- abxy_zfgh
4 -xyz_---- axyz_efgh
5 xyz-_---- xyzd_efgh
6 yz--_---- yzcd_efgh
7 z---_---- zbcd_efgh
ビット・フィールド・インサートの例
コード上での記述
(Cコードで実装)
20 TM
BMEを使用してBit Field Insert操作を行う場合 //macro used to generate hardcoded BFI address
#define BME_BFI_ADDR(ADDR, BIT, WIDTH) (*(volatile uint32_t
*)(((uint32_t)ADDR) | (1<<28) | (BIT<<23) | (WIDTH<<19)))
BME_BFI_ADDR(&ADC0_CFG1, 0x05, 0x01) = 0x40;
00000020 0x.... LDR R0,??DataTable6_9 ;; 0x528bb008
00000022 0x2140 MOVS R1,#+64
00000024 0x6001 STR R1,[R0, #+0]
コードサイズとして6バイト使用
BMEを使用しない場合と比べて約75%コードサイズを削減
実際の処理
コード上での
定義と記述
21 TM
Bit Field Insert操作を行った場合の処理時間比較
通常のCコードで実装 BMEを使用した場合
処理時間は608ns → 440ns と25%以上削減
22 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビット・プロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
23 TM
ペリフェラル・ブリッジクロスバ(AXBS-Lite)
• マスタ(コア&DMA)からスレーブ(メモリ&ペリフェラル)へ複数同時アクセスをサポート
クロック&パワーゲーティング
• ペリフェラル・クロックをディセーブルにすることで無駄な電力を削減 (デフォルトでディセーブル)
• ペリフェラルとウェイクアップ・リソースへの電力をカットできるLLSおよびVLLSx
モード
ローパワー・ブート・オプション
• 起動時のスパイクを削減するためのパワーオン・リセットとローパワー復帰時間の設定が可能
ローパワーIOピンコンフィグレーション
• I/Oピンはデフォルトでピンの漏れ電流を削減できるローパワー・コンフィグレーションに設定
→ リセットからIO初期設定までの漏れ電流をカット
24 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビット・プロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
25 TM
Mode Definition
Run MCUは最大周波数で実行可能。Compute Operation(CPUとSRAM. Flash間のアクセスのみ可能で他のバスマスタ/スレーブはStopモードになる機能)をサポート。
VLP Run (VLPR)
MCUの動作周波数がCore/System=4MHz, Bus/Flash=1 MHz に制限される。LVD プロテクションはオフとなり、Flash
の書き込みも禁止となる。Compute Operationをサポート。
Wait 全てのペリフェラルは動作可能。CPUはスリープ状態。
VLP Wait (VLPW)
CPUはスリープ状態となる以外はVLP Runと同様。
Stop
MCUはスタティック状態となり、LVDプロテクション可能。Energy-savingペリフェラルは Asynchronous DMA
(ADMA)とともに動作可能。ペリフェラル毎にクロックを停止させるオプションあり。PLLをアクティブ状態に保持が可能。
VLP Stop (VLPS)
MCUはスタティック状態となり、LVDプロテクションがオフとなる。Energy-savingペリフェラルはADMA機能とともに動作可能。
LL Stop (LLS)
MCUは内部ロジックのパワーを落としてLow Leakageモードに入る。LLWUモジュールで有効にした復帰ソース(LPTMR, RTC, TSI, CMP, 選択されたピン割り込み)で復帰可能。
VLL Stop 3 (VLLS3)
MCUは内部ロジックのパワーを落としてLow Leakageモードに入る。全てのRAMとI/Oの状態は保持される。レジスタは保持されない。LLSモードと同様にLLWUモジュールが復帰ソースを制御する。
VLL Stop 1 (VLLS1)
RAMとレジスタを保持しないこと以外はVLLS3と同等。
VLL Stop 0
(VLLS0)
LPO(1kHz内部オシレータ)がオフとなる。外部クロック使用時にLLWUモジュールによるLPTMR, RTC, TSI, CMPからの復帰が可能。パワーオン・リセットのイネーブル/ディセーブルが選択可能。
一般的なRun, Wait, Stopモードに加えRun, Sleep, Deep Sleepに各パワーオプションを追加し様々なアプリケーションに対するバッテリライフの最大化に貢献
RU
N
SL
EE
P
DE
EP
SL
EE
P
26 TM
Kinetis
消費電力モード 復帰時間
KL25
Idd @ 3.0V and 25℃
消費電力
(左表からの計算値)
Run - 85uA/MHz* 255uW/MHz*
Very Low Power Run - 47uA/MHz** 141uW/MHz**
Wait - 3.7mA @ 48MHz 11.1mW @ 48MHz
Very Low Power Wait - 135uA @ 4MHz 405uW @ 4MHz
Stop 4us 345uA 1035uW
Very Low Power Stop 4us 4.4uA 13.2uW
Low Leakage Stop 4us 1.9uA 5.7uW
Very Low leakage Stop 3 42us 1.4uA 4.2uW
Very Low leakage Stop 1 93us 0.7uA 2.1uW
Very Low leakage Stop 0
(POR Disable / Enable) 95us 176nA / 381nA 528nW / 1143nW
RUN
VLPR
WAIT
VLPW
STOP
LLS
VLLS3
VLLS0
* Compute Operation enabled: 6.4mA @ 48MHz core / 24MHz bus)
** Compute Operation enabled: 300uA @ 4MHz core / 0.8MHz bus)
VLPS
VLLS1
Core&Flash clock enable
Bus clock disable
While(1)loopを実行した場合
27 TM
TM
1.世界最高エネルギー効率 Cortex-M0+ プロセッサ 高効率 32ビット・プロセッサ
CoreMark/mA比較でM0コアより30%アップ
3.豊富なローパワー・モード バッテリライフを最大化するさまざまなアプリケーションに適用可能な柔軟なパワーモード
2.省エネルギー・アーキテクチャ 90nm薄膜ストレージ・テクノロジ
クロック・パワーゲーティング
ローパワー・ブート・オプション
ローパワーIOピンコンフィグレーション
ビット・マニピュレーション・エンジン
ペリフェラル・ブリッジ・クロスバ
ゼロウェイト・ステート・フラッシュメモリ・コントローラ
4.省エネルギー・ペリフェラル ディープスリープ・モード時にコアを起こすことなくオフロードで動作可能なスマート・ペリフェラル搭載
28 TM
Collect Data Compute
DEEPSLEEPモードでの機能
Kinetis L-シリーズ
System
FLASH
RAM
DMA
4-ch User CLK
Control
Peripheral Bus
Standard peripherals
UART
TIMER
Analog
and
More
Tx/RX
IC/OC
Analog
CORE,
Interrupts
RESET
DEEPSLEEPモード・サポート
• UART信号の送受信
• PWM波形の生成 &インプットキャプチャ / アウトプット
• コンペア
• コンパレータ&ADコンバータ
上記のペリフェラルはDMAに
データ転送要求を行うことができ、DMAがSLEEPモードで
データ転送を完了すると再びDEEPSLEEPモードに戻ることができる
29 TM
Peripheral Low Power Functionality
DMA
STOP/VLPSモードでADC, CMP, UART, Timer/PWM, TSI, PORTなどのペリフェラルからのトリガでウェイトモードへ復帰しDMA転送を行ったのち、再びSTOP/VLPSモードへとCPUの介在なしに移行できる
UART STOP/VLPSでも動作可能。割り込み要求、DMAリクエストのトリガもサポート
SPI アドレス・マッチ・ウェイクアップをサポート
STOP/VLPSモードでも先頭1ワードの受信が可能
I2C STOP/VLPSモードでの複数アドレス・マッチ・ウェイクアップをサポート
USB STOP/VLPSモードでの非同期復帰をサポート
LPTPM
(Timer/PWM)
STOP/VLPSモードでも16ビットタイマでのインプット・キャプチャ、アウトプット・コンペア、PWM出力が実行可能
LPTMR
(Timer/Pulse
Counter)
すべてのパワーモードで16ビットタイマとパルスカウンタが使用可能
RTC すべてのパワーモードで32ビット・リアルタイム・カウンタが使用可能
バッテリライフを長くするためにCPUが介在することなく
Deep Sleepモードに入っている時間を最大化できる
インテリジェント・ペリフェラル
30 TM
Peripheral Low Power Functionality
ADC STOP/VLPSモードでの動作をサポート
CMP
(Analog
Comparator) すべてのモードで使用可能
DAC すべてのパワーモードでスタティック・リファレンスをサポート
Segment LCD すべてのパワーモードで表示切り替えと点滅動作をサポート
TSI
(Capacitive
Touch Sense
Interface)
すべてのパワーモードで起動ソースとして使用可能
LLWU
(Low-Leakage
Wake-up Unit)
LLS, VLLSxモードで使用できるウェイクアップ・ピン(8本)、 リセット、 NMIウェイクアップ・ピンといくつかのペリフェラルによる復帰をサポート
バッテリライフを長くするためにCPUが介在することなく
Deep Sleepモードに入っている時間を最大化できる
インテリジェント・ペリフェラル
TM 31
1. Kinetisシリーズ概要紹介
2. Kinetis L シリーズの低消費電力技術の紹介
3. Kinetis LシリーズのFreedomボードを使用したハンズオン
4. オンライン開発環境「mbed」の紹介
32 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
33 TM
• KL25Z128VLK4 (128KB, 80LQFP, USB)
KL05Z32VFM4 (32KB, 32QFN)を実装
• USBでPCと接続するだけで評価開始
• 加速度センサ、タッチセンサやLED搭載
• 低価格で導入できる評価ボード(参考価格 $12.95 / €10 )
• Arduino(アルドゥイーノ)規格に対応
• チップワンストップ, RSコンポーネンツ、DigiKeyから販売
FRDM-KL25Z / FRDM-KLK05Z NEW
GNU
http://www.youtube.com/watch?v=zj0CRBpay24
対応ツール デモ動画
FRDM-KL25Z
FRDM-KL05Z
34 TM
特長 • KL25Z128VLK4を実装
− Cortex-M0+ MCU
− 128KB flash, 16KB SRAM
− 最大動作周波数48MHz
− USB Full Speedをサポート
• OpenSDA – 最新のUSB debug interface
• 3色LED
• TSIによるスライダを実装
• Freescaleの加速度センサ MMA8451QR1
• 柔軟な電源オプション − USBバスパワー
− コイン電池
− 5-12V Vin (I/O header)
− 5V (I/O header)
− 3.3V (I/O header)
• リセットボタン
• Arduino規格に対応
Kinetis L-Series
KL25Z128VLK4
80 LQFP
USB
D+/D-
RESET
I/O Header
TSI
10-pin
Debug
Mini-B
USBKinetis K-Series
K20DX128VFM5
8 MHz
I/O Header
To
uch
Pa
d -
Slid
er
SPI,GPIO à SWD
SPI 8 MHz
UART
PWM x3Mini-B
USB USB
D+/D-
3.3V LDO
Vin
I/O
3.3V
Serial
Flash
I/O
I2C, GPIO
Inertial
Sensor
10-pin
Debug
CR2032
Hashed blocks indicate optional items that will not be populated by default
OpenSDA
5V
Capacitive
Touch Slider
KL25Z
80 LQFP
Inertial
Sensor
MMA8451Q
RGB
LED
Reset
KL25Z
USB
OpenSDA
35 TM
• Embedded Serial Debug
Adapter
‒K20DX128 50MHz CM4 に実装
‒シリアル通信とターゲットMCUとの
デバッグ・インタフェースをサポート
‒K20DX128上のOpenSDA アプリケー
ションを書き換えることで、機能を切り替えることができる
• OpenSDAアプリケーション
‒MSDフラッシュ・プログラマ
‒P&Eデバッグ・アプリケーション
‒CIMSIS-DAPデバッグ・アプリケーション
PC KL25Z
36 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
37 TM
Freedomボードに関する情報は
www.freescale.com/freedom
にまとめられています。
右のページの”Download”タブを開くと
・回路図
・サンプルコード
・クイックスタート・パッケージ
のダウンロード・ページが開きます。
Freedomページで
Kinetis KL1x, KL2x MCU用FRDM-KL25Z
をクリックすると右のページが開きます。
38 TM
右のページより
サンプルコード
KL25_SC
と
クイックスタートパッケージ
FRDM-KL25Z_QSP
をダウンロードしてください。
39 TM
• クイックスタート・パッケージはZipファイルです。
適当なフォルダに解凍して保存してください。
• Zipファイルを解凍すると、exe形式のサンプルコードの
インストーラが入っていますので、こちらを実行してください。
ファイルを実行すると下記の表示がでますので、
“accept”にチェックをいれて“次へ”をクリックしてください
チェックを入れる
次へをクリック
40 TM
サンプルコードの保存先を選択できますので、
任意のディレクトリを選択して
”次へ”をクリックしてください
“次へ”をクリックすると、
右の画面のように
サンプルコードの展開が
開始されます
41 TM
• OpenSDAのシリアル通信・PEMicroのデバッガアプリを使用するためには以下のドライバのインストールが必要です。
• 下記URLよりデバイス・ドライバのインストーラーを
ダウンロードしてください。
http://www.pemicro.com/opensda/
Download PEDrivers_install.exe for manual install.
• Exe形式の実行ファイルがダウンロードできますので、
ダウンロードしたインストーラを実行してください。
42 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
43 TM
OpenSDAアプリを書き換えるために、
リセットボタンを押したままUSBケーブルをFreedomボードのJ7に挿してください。
左記のようにPC上から
“BOOTLOADER”というMSDとして見えるようになります。
デスクトップ上の
TFE_FujiSpeedway>FRDM-KL25Z Quick Start
Package>OpenSDA Applicationsフォルダ内の
”MSD-FRDM-KL25Zxxxxx.s19”
というファイルを“BOOTLOADER”にコピーしてください。
コピーが完了したら、USBを一度抜いて、
もう一度挿してください。
J7
Reset
コピー
44 TM
Freedomボードは購入直後はOpenSDAにMSDアプリケーションが
インストールされています。
まずFreedomボードのJ7 OpenSDA側とPCをUSBケーブルで
接続してください。
Freedomボードが”FRDM-KL25Z”という名前でマスストレージデバイス
としてPCから見えます。
J7
OpenSDA
このマイコンがOpenSDAとして動作します。
デフォルトではこのマイコンにMSDアプリケーションがインストールされています。
45 TM
デスクトップ上の
TFE_FujiSpeedway>FRDM-KL25Z Quick Start Package>Precompiled Examples
というフォルダ内にすでにコンパイル済みの”.srec”という拡張子のサンプルコードがあります。
ここにあるサンプルコードをひとつ選択し、FreedmKL25Zにコピーしてください。
コピーしたアプリケーションがターゲットMCUに自動的に書き込まれます。
ドラッグ&ドロップで書き込めます
まずは出荷時に書き込まれている
”FRDM_KL25Z_OOBE_Demo.srec”
をターゲットMCUに書き込んでください。
46 TM
ターゲットマイコン
KL25Z128VLK4
こちらにも出荷時にはサンプルコードがあらかじめ書き込まれており、電源投入すれば、
そのサンプルコードが動き出します。
あらかじめ書き込まれているサンプルコード
FRDM_KL25Z_OOBE_Demo
概要
電源ON
LEDが角色に点灯
ボードを水平においてスライダを触ると、
LEDの明るさが変わる
ボードを傾けるとLEDの色が変わる
47 TM
ドラッグ&ドロップで書き込めます
blinky_blue.srec
例) blinky_blue.srecを書き込む
ドラッグ&ドロップで書き込めます
blinky_red.srec
例) blinky_red.srecを書き込む
LEDが赤色に点灯します
LEDが青色に点灯します
48 TM
• OpenSDAはシリアル-USB変換機能も持っています。
• ターゲットMCUであるKL25ZとのUART通信がOpenSDA経由でできるようになっています。
− まずは準備として、前ページと同様にターゲットMCU
に”FRDM_KL25Z_OOBE_Demo.srec”を書き込んでください。
ドラッグ&ドロップで書き込めます
49 TM
COM8
1. デバイスマネージャから”OpenSDA CDC Serial
Port”がCOMポートの何番と設定されているか確認してください。
(右の例ではCOM8と設定されています)
デバイスマネージャの開き方
- “コンピュータ”をクリック
- “システムプロパティ”をクリック
- “デバイスマネージャー”をクリック
50 TM
2. 次にターミナルソフト(右の例ではTera Termを使用しています)
を起動し、シリアルを選択し、確認したCOMポートを選んで
OKをクリックしてください。
3. シリアルポートの設定を下記のように設定してください。
(ボーレート19200)
Tera Termの場合は”設定”タブからシリアルポートを選択すると
下記設定画面が現れます。
4. Freedomボードのリセットボタンを押してください。
• 下記のようにマイコンからのUART出力が表示されます
* 他のサンプルプログラムでもシリアル通信を使用していますが、それぞれボーレートの設定が異なりますので注意してください。
クリックして
Tera Termを起動
②
③
④
51 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
52 TM
OpenSDAアプリを書き換えるために、
リセットボタンを押したままUSBケーブルをFreedomボードのJ7に挿してください。
左記のようにPC上から
“BOOTLOADER”というMSDとして見えるようになります。
デスクトップ上の
TFE_FujiSpeedway>FRDM-KL25Z Quick Start
Package>OpenSDA Applications
フォルダ以下の
” DEBUG-APP_Pemicro_v102.SDA”
というファイルを”BOOTLOADER”にコピーしてください。
コピーが完了したら、USBを一度抜いて、
もう一度挿してください。
J7
Reset
コピー
ディレクトリ
53 TM
デスクトップ上
デスクトップ → [TFE_FujiSpeedway] → [kl25_sc_rev6]
→ [klxx-sc-baremetal] → [build] → [iar]
54 TM
新規のプロジェクトを作成
②下記のようなウィンドウが立ち上がるので、プロジェクト名を入力して”Enter”キーを押す
(下の例では”New_Project”と入力)
③プロジェクトが生成されたので”Enter”キーを押す
④新規のプロジェクトが生成されています
①make_new_project.exe
をダブルクリック
ディレクトリ
55 TM
①生成されたプロジェクトのフォルダを開く
③EWARMで作成したプロジェクトが開きますので、XXX_freedomのタブをクリック
④Freedomボード用のプロジェクトのディレクトリが見えるようになります
⑤フォルダを開くとソースと
ヘッダファイルがみえます
* プロジェクトを開く時に下記メッセージが出るかもしれませんが、“OK”をクリックしてください。
②xxx.ewwをダブルクリック
56 TM
①下のタブを開いて、freedomボード用のプロジェクトを開く。
①
②設定をFLASH_128KBに設定する。
②
③プロジェクト名を右クリックもしくはプロジェクト名横の「」をクリックしてオプション画面を表示。
③
57 TM
④カテゴリの「デバッガ」から「設
定」を選択し、ドライバを「PEMicro」に変更し、
「Run to」にチェックをいれる
④
⑤カテゴリの「デバッガ」から「ダウンロード」を選択し、
「ベリファイする」
「フラッシュローダを使用する」
にチェックをいれる。
⑤
④
58 TM
⑥
⑥カテゴリの「デバッガ」、「PE micro」を選択し、
P&Eハードウェアインターフェースから『OpenSDA - USB』
を選択し、”OK”をクリック
59 TM
①ターミナルソフトを起動しておく。
Baud 19200
Data 8bit
Parity none
ストップビット 1bit
フロー制御 なし
* ターミナルソフト(Tera Term)
の起動&設定はP.20参照
60 TM
②作成されたプロジェクトを”make”して”debug”してみる * “debug”を実行するまえに、USBケーブルでfreedomボードをPCに接続してください。
1. make 2. debug
3. Debug画面に切り替わり、リセット、
ステップ実行、ランなどが実行できるようになります。
61 TM
③ターミナルソフトに出力が見えます
上記のFlash sizeまでの出力は
cpuフォルダ にある start.c
内の、
outSRS();
cpu_identify();
で行われています。
62 TM
Uartで受け取った値を
そのまま出力している
ターミナルソフトで叩いたキーボードのデータがそのまま出力される
④Runする ⑤Tera Term上でキーボード入力を行う
作成されたプロジェクトのアプリケーション
main内の下記のwhileを回り続けるだけ
63 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
64 TM
LEDを点灯するためには・・・
1. Port Control Registerを操作して、LEDの接続されているポートをGPIOに設定
2. Port Data Direction Registerを操作して、LEDの接続されているポートをアウトプットに設定
3. Port Data Output Register
Port Set Output Register
Port Clear Output Register
Port Toggle Output Register
のいずれかを使用して、出力をHighかLowに設定
65 TM
• LEDがどのポートに接続されているか確認
− RED LED: PTB18
− GREEN LED: PTB19
− BLUE LED: PTD1
• ポートのファンクションを確認
− PTB18, PTB19, PTD1はデフォルトでGPIOにならないので変更が必要
PTD1
66 TM
1. Port Control Registerを操作して、LEDの接続されているポートをGPIOに設定
PORTx_PCRn
記述例) PTB をALT1(GPIO)に設定
PORTB_PCR18 &= ~PORT_PCR_MUX_MASK; // PORTB_PCRレジスタのMUXを000
PORTB_PCR18 |= PORT_PCR_MUX(1); // MUXを001にセット
* #define PORT_PCR_MUX(x) (((uint32_t)(((uint32_t)(x))<<PORT_PCR_MUX_SHIFT))&PORT_PCR_MUX_MASK)
#define PORT_PCR_MUX_SHIFT 8
#define PORT_PCR_MUX_MASK 0x700u
67 TM
2. Port Data Direction Registerを操作して、LEDの接続されているポートをアウトプットに設定
GPIOx_PDDR
例) GPIOB_PDDR |= (1<<18); // PTB18 をアウトプットに設定
68 TM
3. 出力をHighかLowに設定
− High => LED OFF
− Low => LED ON
GPIOxPDOR(Port Data Output Register)
0: Low
1: High
GPIOxPSOR(Port Set Output Register)
0: Not Change
1: High
GPIOxPCOR(Port Clear Output Register)
0: Not Change
1: Low
GPIOxPTOR(Port Toggle Output Register)
0: Not Change
1: Toggle
例) GPIOB_PSOR = (1<<18); // PTB18をHighに設定
69 TM
新規に作成したプロジェクトでターミナルの入出力が使用できるので、それを利用し下記のようなコードを作成します。
1. 初期化時点では出力をHighに設定(LED OFF)
2. Terminalから
”r” を入力 Red LED をトグル
“g”を入力 Greed LED をトグル
“b” を入力 Blue LED をトグル
70 TM
• 今回は演習用に事前にプロジェクト・ファイルを生成してあります。
PCのデスクトップ上に
「TFE_FujiSpeedway」
というフォルダがありますので、こちらを開いてください
左記のディレクトリに「LED_Project1.eww」
というファイルがありますので、
こちらをダブルクリックして
プロジェクトを開いてください
71 TM
①下のタブを開いて、freedomボード用のプロジェクトを開く。
①
②設定をFLASH_128KBに設定する。
②
③プロジェクト名を右クリックもしくはプロジェクト名横の「」をダブルクリックしてオプション画面を表示。
③
72 TM
④カテゴリの「デバッガ」から
「設定」を選択し、
ドライバを「PE micro」に変更
④
⑤カテゴリの「デバッガ」から
「ダウンロード」を選択し、
「ベリファイする」
「フラッシュローダを使用する」
にチェックをいれる。
⑤
73 TM
⑥
⑥カテゴリの「デバッガ」、「PE micro」を選択し、
P&Eハードウェアインターフェースから『OpenSDA - USB』
を選択し、”OK”をクリック
74 TM
Project > LED_Project1.c
のファイルをダブルクリックすると、
LED_Project1.cが開きます。
赤枠で囲っている部分の
『x』を適切な値に変更していただくと、正しく動作するコードになります。
75 TM
赤枠で囲っている部分の
『x』を適切な値に変更していただくと、正しく動作するコードになります。
76 TM
①ターミナルソフトを起動しておく。
Baud 19200
Data 8bit
Parity none
ストップビット 1bit
フロー制御 なし
* ターミナル・ソフト(Tera Term)
の起動&設定はP.20参照
77 TM
②作成したプロジェクトを”make”して”debug”してみる * “debug”を実行するまえに、USBケーブルでfreedomボードをPCに接続してください。
1. make 2. debug
3. Debug画面に切り替わり、リセット、
ステップ実行、ランなどが実行できるようになります。
78 TM
③Runする
79 TM
④ターミナル・ソフトに下記出力が見えます
ターミナル・ソフト上でキーボードから、
「r」 を押すと 赤LEDが ON/OFF
「g」を押すと 緑LEDが ON/OFF
「b」を押すと 青LEDが ON/OFF
します。
80 TM
int main (void)
{ char ch; #ifdef CMSIS // If we are conforming to CMSIS, we need to call start here start(); #endif printf("\n\rRunning the LED_Project1 project.\n\r"); /* Enter these code for Sample Application */ printf("\n\rPrease push key board\n\r"); printf("\n\r r -> RED_LED is toggled\n\r g -> GREEN_LED is toggled\n\r b -> BLUE_LED is toggled\n\r");
/* Please fill the correct number here. */ /* GPIO Port Init */ /* PTB18 is RED LED */ PORTB_PCR18 &= ~PORT_PCR_MUX_MASK; PORTB_PCR18 |= PORT_PCR_MUX(1); // Set PTB18 as GPIO GPIOB_PDDR |= (1 << 18); // Set PTB18 as Output GPIOB_PSOR = (1 << 18); // Set PTB18 as High /* PTB19 is GREEN LED*/ PORTB_PCR19 &= ~PORT_PCR_MUX_MASK; PORTB_PCR19 |= PORT_PCR_MUX(1); // Set PTB19 as GPIO GPIOB_PDDR |= (1 << 19); // Set PTB19 as Output GPIOB_PSOR = (1 << 19); // Set PTB19 as High /* PTD1 is BLUE LED */ PORTD_PCR1 &= ~PORT_PCR_MUX_MASK; PORTD_PCR1 |= PORT_PCR_MUX(1); // Set PTD1 as GPIO GPIOD_PDDR |= (1 << 1); // Set PTD1 as Output GPIOD_PSOR = (1 << 1); // Set PTD1 as High
81 TM
while(1) { ch = in_char(); out_char(ch); /* Please fill the correct number here */ switch(ch){ case ‘r': GPIOB_PTOR = (1 << 18); // Toggle RED_LED break; case ‘g': GPIOB_PTOR = (1 << 19); // Toggle GREEN_LED break; case 'b': GPIOD_PTOR = (1 << 1); // Toggle BLUE_LED break; default: break; } } } /********************************************************************/
82 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
83 TM
FGPIOとは
Cortex-M0+ で追加された高速I/Oコントロール用のレジスタ
レジスタの構成はGPIOもFGPIOも同じ
FGPIO
GPIO
84 TM
FGPIOを使うには・・・
GPIOx_PTOR FGPIOxPTOR
に変えるだけ
例)
GPIOB_PTOR = (1<<18); // PTB18をトグル
FGPIOB_PTOR = (1<<18); // PTB18をトグル
85 TM
• こちらも演習用に事前にプロジェクトファイルを生成してあります。
PCのデスクトップ上に
「TFE_FujiSpeedway」
というフォルダがありますので、こちらを開いてください
左記のディレクトリに「LED_Project2.eww」
というファイルがありますので、
こちらをダブルクリックして
プロジェクトを開いてください
86 TM
先ほどと同様のコードで、
GPIOの初期化の前後にSysTickのコードが追加してあります。
SysTickタイマを読み込むためのオーバヘッドを測定
SysTickタイマを初期化して、
カウント開始時のカウンタの値を読み込む
カウント終了時のカウンタの値を読み込み、測定したオーバーヘッドを含めて、カウント開始から終了までのサイクル数を計算し、printfで出力
87 TM
• Runさせると以下のような出力が表示されます。
SysTickタイマを読み込むためのオーバヘッドを測定
GPIO Initのサイクル数
0xAE : 174cycle
88 TM
GPIOの初期化の下に、以下のコードが用意してあります。
#if 0 => #if 1
に変更
GPIO → FGPIO
に変更
89 TM
• Runさせると以下のような出力が表示されます。
GPIO Initのサイクル数
FGPIO Initのサイクル数
0xAE : 174cycle
0x9A : 154cycle
90 TM
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
GPIO FGPIO
それぞれPTA4を10回トグルさせ、オシロで波形を観測
1126ns/10 = 112ns/toggle 774ns/10 = 77.4ns/toggle
1/48MHz = 20.833… nS (1サイクルの時間)
確かにFGPIOの方が早いが、
思ったほどスピードが出ない・・・
91 TM
どちらもGPIOをトグルさせるのに3命令も使っている。
GPIO FGPIO
コンパイラオプションを見ると
デフォルトでは最適化のオプションが
“None”
に設定されています。
この設定を
“Low”
に変更して動作させてみます。
92 TM
どちらも1命令でGPIOをトグルさせるようになった。
GPIO FGPIO
93 TM
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
GPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
FGPIOA_PTOR = (1<<4); // Toggle PTA4
GPIO FGPIO
それぞれPTA4を10回トグルさせ、オシロで波形を観測
558ns/10 = 55.8ns/toggle 206ns/10 = 20.6 ns/toggle
FGPIOでアクセスすると
実際に1サイクルでポートの出力が
変更できる。
GPIOでアクセスのときは、
2 cycle/accessなので、
約40nsとなるはずでは?
1/48MHz = 20.833… nS (1サイクルの時間)
94 TM
• コアが動作するためには、
Flashメモリコントローラから命令をフェッチしてこなければならない
• GPIOアクセスの場合は、この命令フェッチとGPIOアクセスが同時には行えない。
• このために、今回のようにGPIO
アクセスを繰り返すような動作の
場合、GPIOアクセス時間がFGPIOアクセス時間の単純に2倍にはならない
FGPIO
GPIO
GPIOを操作
命令をフェッチ
95 TM
1. Kinetisシリーズ開発環境 Freedomプラットフォームの紹介
2. Freedomボード向け情報の紹介
− Freedomボード 回路図、サンプルコード、マニュアルなど
− サンプルコードのインストール
− デバイスドライバのインストール
3. Freedomプラットフォームを体験
− OpenSDAのMSDアプリケーションの使い方
− OpenSDAのシリアル通信の使い方
4. IAR EWARM用の新規プロジェクトの作り方
5. 新規プロジェクトに変更を加えてLEDを光らせる
6. シングルサイクル・アクセスのGPIO(FGPIO)について
7. Bit Manipulation Engine(BME)を使ってみる
96 TM
ビット・マニピュレーション・エンジンとは・・・
−各ペリフェラルのレジスタ値を読み込むか書き込む時に同時にビット操作を行うことができるハードウェア・エンジンです
BMEを使用すると・・・
• 書き込み時
− Logical AND, OR, XOR
− Bit field insert (BFI)
Peripherals BME Core Accesses
サポートされている操作
• 読み込み時
− Load-and-Clear 1 bit (LAC1)
− Load-and-Set 1 bit (LAS1)
− Unsigned Bit Field Extract (UBFX)
命令数が削減できる 処理時間
コードサイズ の削減
97 TM
Flash
SRAM L&U
Peripherals
&
GPIO
BME
FGPIO
0x0000_0000
0x07FF_FFFF
0x1FFF_F000
0x2000_2FFF
KL25の場合
0x4000_0000
0x400F_FFFF
0x4400_0000
0x5FFF_FFFF
0xF800_0000
0xFFFF_FFFF
Logical AND Store
Logical OR Store
Load-and-Clear 1 Bit
Logical XOR Store
Load-and-Set 1 Bit
Bit Field Insert Store
Bit Field Extract Load
0x4400_0000
0x440F_FFFF
Peripherals
&
GPIO
0x4800_0000
0x480F_FFFF
0x4BEF_FFFF
0x4820_0000
Peripherals
&
GPIO
Peripherals
&
GPIO
Peripherals
&
GPIO
0x5000_0000
0x5FFF_FFFF
Peripherals
&
GPIO
0x4C00_0000
0x4C0F_FFFF
0x4C20_0000
0x4FEF_FFFF
Peripherals
98 TM
0 1 0 0 x x - - - - - - Register address
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
01: AND
10: OR
11: XOR
BME_XOR_W(&GPIOA_PDOR, 0x20); /* GPIOA_PDOR ^= 0x20 */
記述例
#define BME_XOR_W(addr, wdata) *(volatile uint32_t*)((uint32_t)addr | BME_XOR_MASK) = wdata;
#define BME_XOR_MASK (3<<26)
99 TM
0 1 0 0 x x b b b b b - Register address
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
10: Clear
11: Set
//clear AIEN and load current AIEN value into CPU Rx register
load_bit = BME_LAC1_W(&ADC0_SC1A, ADC_SC1_AIEN_SHIFT);
記述例
#define BME_LAC1_W(addr, bit) *(volatile uint8_t*)((uint32_t)addr | BME_LAC1_MASK(bit));
#define BME_LAC1_MASK(BIT) (1<<27) | (BIT<<21)
Clear/Setするビットを設定(LSB)
100 TM
0 1 0 1 b b b b b w w w w Register address
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1: BFI &UBFE
/* reg_val = * ADC0_CFG1;
mask = ((1 << (0x02)) - 1) << ADC_CFG1_ADIV_SHIFT;
reg_val = (reg_val & ~mask)|((2<<ADC_CFG1_ADIV_SHIFT) & mask);
* ADC0_CFG1 = reg_val; */
BME_BFI_W(&ADC0_CFG1, 2<<ADC_CFG1_ADIV_SHIFT, ADC_CFG1_ADIV_SHIFT, 0x02);
記述例
#define BME_BFI_W(addr, wdata, bit, width) \
*(volatile uint32_t*)((uint32_t)addr | BME_BFI_MASK(bit,width)) = wdata;
#define BME_BFI_MASK(BIT,WIDTH) (1<<28) | (BIT<<23) | ((WIDTH-1)<<19)
挿入/読込のデータ位置を決める(LSB)
挿入/読込のデータ長(bit)を決める
101 TM
• こちらは先ほどと同じ「LED_Project2」を使用します。
PCのデスクトップ上に
「 TFE_FujiSpeedway 」
というフォルダがありますので、こちらを開いてください
左記のディレクトリに「LED_Project2.eww」
というファイルがありますので、
こちらをダブルクリックして
プロジェクトを開いてください
102 TM
FGPIOの初期化の下に、BMEを使用したGPIOの初期化コードが用意してあります。
#if 0 → #if 1
に変更
103 TM
• Runさせると以下のような出力が表示されます。
GPIO Initのサイクル数
0xAE : 174cycle
FGPIO Initのサイクル数
0x9A : 154cycle
BME Initのサイクル数
0x58 : 88cycle
104 TM
24命令
105 TM
12命令
TM 106
1. Kinetisシリーズ概要紹介
2. Kinetis L シリーズの低消費電力技術の紹介
3. Kinetis LシリーズのFreedomボードを使用したハンズオン
4. オンライン開発環境「mbed」の紹介
107 TM
1. mbedとは
2. mbed用のOpenSDAアプリケーションのインストールと
mbedアカウントの作成
3. 新規のプロジェクトを生成してFreedomボード上で動かしてみる
4. Freedomボード用に公開されているサンプルコードをインポートして動かしてみる
− サンプルコードのインポート
− 加速度センサを使用したサンプルコードをインポートして変更を加えてみる
5. MDK-ARM Liteを使用したオフライン・デバッグ
108 TM
• ブラウザ上で動くオンライン開発環境。
• プログラムの書き込みはストレージとして認識するドライブへ、コンパイラから出力される
(ダウンロード出来る) バイナリファイルを保存することにより書き込み完了となる。
• 一般的なC言語、C++の決まりごとに従って
プログラムを進めればよい。
• mbed ホームページ
www.mbed.org
(例)LEDを点滅させるコード
109 TM
1. mbedとは
2. mbed用のOpenSDAアプリケーションのインストールと
mbedアカウントの作成
3. 新規のプロジェクトを生成してFreedomボード上で動かしてみる
4. Freedomボード用に公開されているサンプルコードをインポートして動かしてみる
− サンプルコードのインポート
− 加速度センサを使用したサンプルコードをインポートして変更を加えてみる
5. MDK-ARM Liteを使用したオフライン・デバッグ
110 TM
1. www.freescale.com/FRDM-
KL25Zにアクセス
2. ページ右下の設計支援情報の
“Get Started With FRDM-KL25Z
and mbed” をクリック
3. Step 1 の mbed.org/handbook/mbed-FRDM-
KL25Z-Getting-Started にアクセス
1
2
3
111 TM
4. SW1を押しながら “SDA”と書いてある方のUSBとPCを接続
5. リムーバルディスク “BOOTLOADER” として認識。D4(緑)が点滅
6. mbed FRDM KL25Z Getting Started のページに置いてある “mbed_if_v2.0_frdm_kl25Z” を ダウンロードし、 BOOTLOADERにコピー
4 SW1
D4
5
6
112 TM
7. 一度、USBを抜き差しすると “MBED”
として認識。
8. mbed.htm を開く
mbedアカウントを持っていない場合
9. Signupをクリック
10. No を選択
7
8
9
10
113 TM
11. 必要事項を記入し、
“私がすることに同意” にチェックをして Signupをクリック
12. アカウントが作成される
13. 右上のCompilerをクリック
14. これでmbedでコンパイルする準備が完了です
11
12
13
他のユーザーからは
こちらの名前で見えます。
114 TM
• http://mbed.org/handbook/CMSIS-DAP-MDK にアクセス
mbedWinSerial_16466.exe
をインストール
115 TM
1. mbedとは
2. mbed用のOpenSDAアプリケーションのインストールと
mbedアカウントの作成
3. 新規のプロジェクトを生成してFreedomボード上で動かしてみる
4. Freedomボード用に公開されているサンプルコードをインポートして動かしてみる
− サンプルコードのインポート
− 加速度センサを使用したサンプルコードをインポートして変更を加えてみる
5. MDK-ARM Liteを使用したオフライン・デバッグ
116 TM
画面左上の”New”をクリック
プロジェクト名を入力してOKをクリック
入力した名前のプロジェクトが生成されます。
Main.cppのファイル名をクリックすると、ソースが見えます。
117 TM
コピー中は緑色のLEDが点滅します。
コピー
Reset ①“Compile”をクリックする
②Binary ファイルが生成される
③生成されたBinaryファイルをMBEDにコピーする
コピーが完了したら、リセットボタンを押すと
青色のLEDが点滅するようになります。
118 TM
LED1(青) => LED2 (緑)
LED3 (赤)
に変えてみる
0.2 (秒)を変更して点滅の周期を変えてみる。
* 各APIの定義はmbedサイト内のHandbookに記載されています
119 TM
1. mbedとは
2. mbed用のOpenSDAアプリケーションのインストールと
mbedアカウントの作成
3. 新規のプロジェクトを生成してFreedomボード上で動かしてみる
4. Freedomボード用に公開されているサンプルコードをインポートして動かしてみる
− サンプルコードのインポート
− 加速度センサを使用したサンプルコードをインポートして変更を加えてみる
5. MDK-ARM Liteを使用したオフライン・デバッグ
120 TM
mbed FRDM KL25Z Examples
http://mbed.org/handbook/mbed-FRDM-KL25Z-Examples
上記のページに、
Freedomボード用の各種サンプルコードが記載されている。
“Import this program”をクリック
することで、簡単にプロジェクトのインポートが可能
Import this program
をクリックすると
左のページのプロジェクトがインポートできます
121 TM
1. サンプルコードをインポートする。http://mbed.org/handbook/mbed-
FRDM-KL25Z-Examplesにアクセス。
2. 加速度センサを使用したサンプルコードをインポートする
3. 別ウィンドウでコンパイラが起動。プロジェクトの名前を確認して
Importをクリック
2
3
122 TM
コピー中は緑色のLEDが点滅します。
コピー
Reset
①“Compile”をクリックする
②Binary ファイルが生成される
③生成されたBinaryファイルをMBEDにコピーする
インポートしたプロジェクトを先ほどと同様にコンパイルして動かしてみる
コピーが完了したらリセットボタンを押すと、プログラムが動き始める。
ボードを傾けると傾きによりLEDの色が変化するのが確認出来る。
123 TM
ターミナルソフトに加速度値を表示するように、下のようにサンプルコードを少し変更
ターミナルソフトを立ち上げ、
コンパイルし、リセットすると
加速度値が表示される。
124 TM
1. mbedとは
2. mbed用のOpenSDAアプリケーションのインストールと
mbedアカウントの作成
3. 新規のプロジェクトを生成してFreedomボード上で動かしてみる
4. Freedomボード用に公開されているサンプルコードをインポートして動かしてみる
− サンプルコードのインポート
− 加速度センサを使用したサンプルコードをインポートして変更を加えてみる
5. MDK-ARM Liteを使用したオフライン・デバッグ
125 TM
Exportできるオフライン環境は、2013年4月現在 Keil uVision4 のみ
Keil uVision4 MDK-ARM Lite
• 評価版は32kb制限あり
• 登録が必要(指名、メールアドレス、会社名、住所、電話番号)
• 参照ページ: http://mbed.org/users/MACRUM/notebook/mbed-kl25z_mtb/
1. プロジェクト名を右クリックし、 Export
Program…を選択
2. Exportをクリック
1
2
126 TM
3. http://mbed.org/users/MACRUM/notebook/uvision4_debug/ にアクセスし、Keil MDK-ARM(v4.70, 約520Mb)を ダウンロード (登録が必要)
4. Keil MDK-ARMのインストール
5. セットアップの最後の方でExample Projectsの追加を聞かれるので、 必要であればチェックを入れる
6. インストールが完了したら、2でExportしたときに出来たZipファイルを解凍し、.uvprojファイルを
ダブルクリックしてIDEを起動
5
6
127 TM
7. Scatterファイルの修正。
FRDM_MMA8451Q_
uvision_kl25z\FRDM
_MMA8451Q\mbed\
KL25Z\ARM にある.sctをダブルクリックで開く(メモ帳など)
8. Initialization fileの設定。
{install}\ARM\Boards\Freescale\FR
DM-KL25Z\Blinky_MTB
\DBG_MTB.ini にある.iniファイルをコピー
7
8
128 TM
9
10 9. どちらかの方法で、ターゲット設定を開く
10. DebugタブとUtilitiesタブで右のように変更
11. Edit…をクリック
11
129 TM
12. IDE上にDBG_MTB.iniが開かれる
13. Configuration Wizardを選択
14. Buffer Positionを0x20001000に変更
14
13
12
130 TM
15
16
17
18
Loadをクリック
“Application running”を確認
Debugをスタート
131 TM
19 オフラインデバッグが可能
View→Trace→Trace Data
でトレース情報が見られる
レジスタ情報
TM