ルネサス
エレクトロニクス株式会社
RX62N 周辺機能紹介 TMR
© 2013 Renesas Electronics Corporation. All rights reserved.
2
コンテンツ
TMRの概要
プログラムサンプル(1)
パルス出力機能(8ビットモード)
プログラムサンプル(2)
インターバルタイマ機能
(16ビット、コンペアマッチカウントモード)
プログラムサンプルのカスタマイズ
© 2013 Renesas Electronics Corporation. All rights reserved.
4
TCNT
TCORA
TMRの動作概要
外部クロック
コンペアマッチ
設定
比較
© 2013 Renesas Electronics Corporation. All rights reserved.
6
プログラムサンプル(1)
パルス出力機能仕様
■パルス出力機能のプログラム例
チャネル0のパルス出力機能を用い出力端子から100KHz(10μs周期)、デューティ
比50%のパルスを出力する。
仕様
・動作モード
パルス出力
・チャネル
チャネル0(8ビットモード)を使用
・クロックソース
PCLK[48MHz]
・カウンタクリア
コンペアマッチA
・カウントスタート
ソフトウェアトリガ
・割り込み
なし
・出力端子
TMO0端子
© 2013 Renesas Electronics Corporation. All rights reserved.
8
パルス出力の動作
MAX = 0xFF
時間
カウンタ
設定値
コンペアマッチでカウンタをクリア
デューティ比50%のパルス
出力端子
電圧
カウンタ
プログラム・フローチャート
パルス出力(H/W)
init_TMR0
TMR0 初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
※CPU内部レジスタ、クロック
レート、およびメモリ内の静的
変数領域はスタートアップ・
ルーチン内で初期化されます。
start_TMR0
TMR0 カウントスタート
リセット・スタート
スタートアップルーチン
main
初期化
カウント開始
© 2013 Renesas Electronics Corporation. All rights reserved.
10
パルス出力機能の初期化フロー
初期化開始
モジュールストップ解除
出力信号の設定
コンスタントレジスタの設定
カウンタクリア条件の設定
初期化終了
モジュールストップコントロールレジスタA(MSTPCRA)
© 2013 Renesas Electronics Corporation. All rights reserved.
12
時間
設定値
出力端子
電圧
カウンタ
カウント値の設定
100KHzのパルスは、
5μsごとに信号がトグルする
5μs
5μs
ビット
値=
コンスタントレジスタ
48
[
MHz
]
×
5
[
µ
s
]
−
1
=
240
−
1
<
8
タイムコンスタントレジスタA(TCORA)
チャネル0
(カウント値
-
1)を設定
カウント値
=
240
239
© 2013 Renesas Electronics Corporation. All rights reserved.
14
タイマコントロールレジスタ(TCR)
TCORA
時間
設定値
出力端子
電圧
カウンタ
5μs
5μs
タイマコントロール/ステータスレジスタ(TCSR)
設定値
出力端子
© 2013 Renesas Electronics Corporation. All rights reserved.
16
パルス出力機能の初期化関数
出力信号の設定
カウント値の設定
カウンタクリア条件の設定
初期化開始
モジュールストップ解除
初期化終了
void init_TMR0(void)
{
MSTP(TMR0) = 0;
//set count
TMR0.TCORA = 5*48-1;
// TCNT0 clear by compare match A
TMR0.TCR.BIT.CCLR = 0x01;
// TMO0 is toggle
TMR0.TCSR.BYTE = 0xE3;
タイマカウンタコントロールレジスタ(TCCR)
0x08
初期状態
カウント停止
© 2013 Renesas Electronics Corporation. All rights reserved.
18
パルス出力機能のカウント開始関数
init_TMR0
TMR0 初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
start_TMR0
TMR0 カウントスタート
main
void start_TMR0(void)
{
// count start
// - CSS internal clock
// - CKS is PCLK
TMR0.TCCR.BYTE = 0x08;
}
パルス出力機能のメイン関数
void main(void)
{
// Initialize timer (TMR0)
init_TMR0();
// TMR0 and TMR1 start
start_TMR0();
while(1){
// CPU sleep
wait();
}
}
init_TMR0
TMR0 初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
start_TMR0
TMR0 カウントスタート
main
© 2013 Renesas Electronics Corporation. All rights reserved.
20
プログラムサンプル(2)
インターバルタイマ機能
プログラムサンプル(2)
インターバルタイマ機能仕様
■インターバルタイマ機能のプログラム例
チャネル0、1のインターバル・タイマ機能を用い1000ms毎にLED1を点滅する。
仕様
・動作モード
インターバルタイマ
・チャネル
チャネル0、1(
16ビット、コンペアマッチカウントモード)を使用
・クロックソース
PCLK[48MHz]
・コンペアマッチ
チャネル0=20msec周期
チャネル1=TMR0のコンペアマッチ50回
(20ms×50=1000ms)
・カウンタクリア
チャネル0=コンペアマッチA
チャネル1=コンペアマッチA
・カウントスタート
ソフトウェアトリガ
・割り込み
チャネル1のコンペアマッチA割り込み
© 2013 Renesas Electronics Corporation. All rights reserved.
22
コンペアマッチカウントモードの動作
MAX = 0xFF
設定値
チャネル0のカウンタ
•
チャネル0と1を組み合わせて使用する
MAX = 0xFF
設定値
チャネル1のカウンタ
20ms
50回
クロックをカウント
チャネル0のコンペアマッチ回数をカウント
プログラム・フローチャート
init_TMR01
TMR0,1初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
※CPU内部レジスタ、クロック
レート、およびメモリ内の静的
start_TMR01
TMR0カウントスタート
init_PORT
LEDの初期化
LED制御
リセット・スタート
スタートアップルーチン
main
RTE
TMR1割り込み関数
(Excep_TMR1_CMI1A)
setpsw_i(組み込み関数)
割り込み許可
初期化
カウント開始
© 2013 Renesas Electronics Corporation. All rights reserved.
24
コンペアマッチカウントモードの初期化フロー
チャネル1のクロックソースの設定
チャネル0,1のカウント値の設定
チャネル0,1のカウンタクリア条件の設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
割り込み要求の許可
ビット
=
=
値
コンスタントレジスタ
48
[
MHz
]
×
20
[
ms
]
−
1
960
K
−
1
>
8
カウント値の設定
【チャネル0
】
1
-117.1875
1
8192
]
ms
[
20
]
MHz
[
48
=
−
×
=
1
50
−
値=
コンスタントレジスタ
【チャネル1】
ビット
≒
117
−
1
<
8
]
s
32[
8192
48[MHz]
]
[
1875
.
0
]
[
時間
=
回
=
µ
誤差
© 2013 Renesas Electronics Corporation. All rights reserved.
26
タイムコンスタントレジスタA(TCORA)
116
チャネル0
(カウント値
-
1)を設定
チャネル0のカウント値
=
117
チャネル1のカウント値
=
50
チャネル1
49
© 2013 Renesas Electronics Corporation. All rights reserved.
28
コンペアマッチカウントモードの初期化関数(1)
void
init_TMR01(void)
{
//
Wakeup
TMR0,TMR1
MSTP(TMR0)
=
0;
//
TCORA
is
20ms
count
//
48000KHz(48MHz)*20/8192
TMR0.TCORA
=
48000*20/8192-1;
//
TCORA
is
50
count
TMR1.TCORA
=
50-1;
//
TCNT0
clear
by
compare
match
A
TMR0.TCR.BIT.CCLR
=
1;
TMR1.TCR.BIT.CCLR
=
1;
//
TCNT0
counts
for
compare
match
of
TCORA
TMR1.TCCR.BIT.CSS
=
3;
//
CMIEA
is
enable
TMR1.TCR.BIT.CMIEA
=
1;
//
CMIA1
is
enable
IEN(
TMR1,
CMIA1
)
=
1;
//
CMIA1
interrupt
Level
is
1
IPR(
TMR1,
CMIA1
)
=
1;
}
チャネル1のクロックソースの設定
チャネル0,1のカウント値の設定
チャネル0,1のカウンタクリア条件の設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
割り込みのタイミング
MAX = 0xFF
設定値
チャネル0のカウンタ
MAX = 0xFF
設定値
チャネル1のカウンタ
クロックをカウント
割り込み
© 2013 Renesas Electronics Corporation. All rights reserved.
30
割り込みコントローラの設定
© 2013 Renesas Electronics Corporation. All rights reserved.
32
割り込み要求許可レジスタm(IERm)(m
=
02h
~
1Fh)
割り込み要因プライオリティレジスタm(IPRm)(m=
00h~8Fh)
© 2013 Renesas Electronics Corporation. All rights reserved.
34
コンペアマッチカウントモードの初期化関数
~割り込みの設定~
void
init_TMR01(void)
{
//
Wakeup
TMR0,TMR1
MSTP(TMR0)
=
0;
//
TCORA
is
20ms
count
//
48000KHz(48MHz)*20/8192
TMR0.TCORA
=
48000*20/8192-1;
//
TCORA
is
50
count
TMR1.TCORA
=
50-1;
//
TCNT0
clear
by
compare
match
A
TMR0.TCR.BIT.CCLR
=
1;
TMR1.TCR.BIT.CCLR
=
1;
//
TCNT0
counts
for
compare
match
of
TCORA
TMR1.TCCR.BIT.CSS
=
3;
//
CMIEA
is
enable
TMR1.TCR.BIT.CMIEA
=
1;
//
CMIA1
is
enable
IEN(
TMR1,
CMIA1
)
=
1;
//
CMIA1
interrupt
Level
is
1
IPR(
TMR1,
CMIA1
)
=
1;
}
チャネル1のクロックソースの設定
チャネル0,1のカウント値の設定
チャネル0,1のカウンタクリア条件の設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
割り込み関数の作成とベクタテーブルの登録
LED制御
RTE
TMR1割り込み関数
(Excep_TMR1_CMI1A)
// TMR1_CMI1A
#pragma interrupt (Excep_TMR1_CMI1A(vect=177))
void Excep_TMR1_CMI1A(void)
{
// Invert P47(LED)
PORT4.DR.BIT.B7 ^= 1;
}
© 2013 Renesas Electronics Corporation. All rights reserved.
36
タイマカウンタコントロールレジスタ(TCCR)
0x0E
初期状態
カウント停止
カウント動作
コンペアマッチカウントモードのカウント開始関数
init_TMR01
TMR0,1初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
start_TMR01
TMR0カウントスタート
init_PORT
LEDの初期化
main
setpsw_i(組み込み関数)
割り込み許可
void start_TMR0(void)
{
// count start
// - CSS internal clock
// - CKS is PCLK/8192
TMR0.TCCR.BYTE = 0x0E;
}
© 2013 Renesas Electronics Corporation. All rights reserved.
38
コンペアマッチカウントモードのメイン関数
void main(void)
{
// Initialize for LED
init_PORT();
// Initialize timer (TMR0,TMR1)
init_TMR01();
// TMR0 and TMR1 start
start_TMR01();
// Interrupt enable (CPU)
setpsw_i();
while(1){
// CPU sleep
wait();
}
}
init_TMR01
TMR0,1初期化
wait(組み込み関数)
割り込み要求待ち、低消費電
力モードへ遷移
start_TMR01
TMR0カウントスタート
init_PORT
LEDの初期化
main
setpsw_i(組み込み関数)
割り込み許可
© 2013 Renesas Electronics Corporation. All rights reserved.
40
16ビットモード(16ビットカウントモード)の動作
16ビットの
比較
外部クロック
チャネル1:下位8ビット
チャネル0:上位8ビット
8ビットモードから16ビットモード(16ビットカウントモード)への変更
void
init_TMR0(void)
{
//
Wakeup
unit
0
of
TMR
MSTP(TMR0)
=
0;
//
set
count
TMR0.TCORA
=
48*5-1;
//
48M*5μ=24*5
//
TCNT0
clear
by
compare
match
A
TMR0.TCR.BIT.CCLR
=
0x01;
//
TMO0
is
toggle
TMR0.TCSR.BYTE
=
0xE3;
}
void start_TMR0(void)
{
// count start
void init_TMR01(void)
{
// Wakeup unit 0 of TMR
MSTP(TMR0) = 0;
// Cascade
TMR0.TCCR.BIT.CSS = 3;
// set count
TMR01.TCORA =48*50-1;
// TCNT0 clear by compare match A
TMR0.TCR.BIT.CCLR = 0x01;
// TMO0 is toggle
TMR0.TCSR.BYTE = 0xE3;
}
void start_TMR01(void)
{
// count start
100KHzのパルス出力
10kHzのパルス出力
カスケード接続
カウントクリア
条件の設定は
チャネル0
16ビットアクセス
ルネサス
エレクトロニクス株式会社
© 2013 Renesas Electronics Corporation. All rights reserved.