rx62n 周辺機能紹介 cmt - renesas e-learning...
TRANSCRIPT
00000-A
ルネサス半導体トレーニングセンター
Rev. 1.00
ルネサス エレクトロニクス株式会社
© 2013 Renesas Electronics Corporation. All rights reserved.
2013/08/02
RX62N 周辺機能紹介 CMT コンペアマッチタイマ
© 2013 Renesas Electronics Corporation. All rights reserved. 2
コンテンツ
CMTの概要
プログラムサンプル プログラムサンプルのカスタマイズ
© 2013 Renesas Electronics Corporation. All rights reserved. 3
CMTの概要
© 2013 Renesas Electronics Corporation. All rights reserved. 4
CMTの仕様
CMT CMT0
CMT1
ユニット 0
CMT2
CMT3
ユニット 1
16ビットタイマ
チャネル
© 2013 Renesas Electronics Corporation. All rights reserved. 5
CMTの動作概要
設定
比較
© 2013 Renesas Electronics Corporation. All rights reserved. 6
プログラムサンプル
© 2013 Renesas Electronics Corporation. All rights reserved. 7
サンプル・プログラム仕様
■CMTのプログラム例
CMT0を用い500ms毎にLEDを点滅する。
仕様
・チャネル チャネル0を使用 ・クロックソース PCLK[48MHz] ・割り込み コンペアマッチ割り込み
© 2013 Renesas Electronics Corporation. All rights reserved. 8
プログラム・フローチャート
init_CMT0 CMT0 初期化
wait(組み込み関数) 割り込み要求待ち、低消費電
力モードへ遷移
※CPU内部レジスタ、クロックレート、およびメモリ内の静的変数領域はスタートアップ・ルーチン内で初期化されます。
start_CMT0 CMT0 カウントスタート
init_PORT LEDの初期化
LED点滅
リセット・スタート
スタートアップルーチン
main
RTE
CMT0割り込み関数 (Excep_CMTU0_CMT0)
setpsw_i(組み込み関数) 割り込み許可
割り込み要求(H/W)
初期化
カウント開始
© 2013 Renesas Electronics Corporation. All rights reserved. 9
コンペアマッチカウントモードの初期化フロー
内部クロックの設定
コンスタントレジスタの設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
割り込み要求の許可
© 2013 Renesas Electronics Corporation. All rights reserved. 10
モジュールストップコントロールレジスタA(MSTPCRA)
ユニット0使用可
© 2013 Renesas Electronics Corporation. All rights reserved. 11
ビット 値=コンスタントレジスタ 161M241]ms[500]MHz[48 >−=−×
ビット = 161-468751512
]ms[500]MHz[48<=−
×
カウント値の設定
© 2013 Renesas Electronics Corporation. All rights reserved. 12
コンペアマッチタイマコントロールレジスタ(CMCR)(1)
© 2013 Renesas Electronics Corporation. All rights reserved. 13
コンペアマッチタイマコンスタントレジスタ(CMCOR)
(カウント値 - 1)を設定
カウント値 = 46875
46874
© 2013 Renesas Electronics Corporation. All rights reserved. 14
コンペアマッチカウントモードの初期化関数(1)
void init_CMT0(void) { // Wakeup unit 0 MSTP(CMT0) = 0; // Clock select is PCLK/512 CMT0.CMCR.WORD = 0x0083; // Counts for 500ms(48000kHz(48MHz) *500ms/512) CMT0.CMCOR = 48000*500/512-1; // CMI0 interrupt is enabled CMT0.CMCR.WORD |= 0x0080 | 0x0040; // CMI0 interrupt request is enabled IEN(CMT0,CMI0) = 1; // CMI0 interrupt priority level is 1 IPR(CMT0,CMI0) = 1; }
内部クロックの設定
コンスタントレジスタの設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
© 2013 Renesas Electronics Corporation. All rights reserved. 15
コンペアマッチタイマコントロールレジスタ(CMCR) (2)
© 2013 Renesas Electronics Corporation. All rights reserved. 16
割り込みコントローラの設定
割り込みコントローラ CPUへ
IPR(優先レベル)
IER(許可)
© 2013 Renesas Electronics Corporation. All rights reserved. 17
割り込み要求許可レジスタm(IERm)(m = 02h ~ 1Fh)
IER03
© 2013 Renesas Electronics Corporation. All rights reserved. 18
割り込み要因プライオリティレジスタm(IPRm)(m= 00h~8Fh)
コンペアマッチ割り込み:IPR04
© 2013 Renesas Electronics Corporation. All rights reserved. 19
コンペアマッチカウントモードの初期化関数(2)
void init_CMT0(void) { // Wakeup unit 0 MSTP(CMT0) = 0; // Clock select is PCLK/512 CMT0.CMCR.WORD = 0x0083; // Counts for 500ms(48000kHz(48MHz) *500ms/512) CMT0.CMCOR = 48000*500/512-1; // CMI0 interrupt is enabled CMT0.CMCR.WORD |= 0x0080 | 0x0040; // CMI0 interrupt request is enabled IEN(CMT0,CMI0) = 1; // CMI0 interrupt priority level is 1 IPR(CMT0,CMI0) = 1; }
内部クロックの設定
コンスタントレジスタの設定
初期化開始
モジュールストップ解除
割り込みコントローラの割り込み許可
割り込み優先レベルの設定
割り込み許可
初期化終了
© 2013 Renesas Electronics Corporation. All rights reserved. 20
割り込み関数の作成とベクタテーブルの登録
LED点滅
RTE
CMT0割り込み関数 (Excep_CMTU0_CMT0)
// CMTU0_CMT0 #pragma interrupt (Excep_CMTU0_CMT0(vect=28)) void Excep_CMTU0_CMT0(void) { // Invert P47(LED1) PORT4.DR.BIT.B7 ^= 1; }
© 2013 Renesas Electronics Corporation. All rights reserved. 21
コンペアマッチカウントモードのカウント開始関数
void start_CMT0(void) { // Start CMT0 CMT.CMSTR0.BIT.STR0 = 1; }
init_CMT0 CMT0 初期化
wait(組み込み関数) 割り込み要求待ち、低消費電
力モードへ遷移
start_CMT0 CMT0 カウントスタート
init_PORT LEDの初期化
main
setpsw_i(組み込み関数) 割り込み許可
© 2013 Renesas Electronics Corporation. All rights reserved. 22
コンペアマッチタイマスタートレジスタ0(CMSTR0)
© 2013 Renesas Electronics Corporation. All rights reserved. 23
コンペアマッチカウントモードのメイン関数
void main(void) { // LED Initialization init_PORT(); // CMT0 Initialization init_CMT0(); // CMT0 count start start_CMT0(); // Interrupt enable (CPU) setpsw_i(); while(1){ // CPU sleep wait(); } }
メイン関数
init_CMT0 CMT0 初期化
wait(組み込み関数) 割り込み要求待ち、低消費電
力モードへ遷移
start_CMT0 CMT0 カウントスタート
init_PORT LEDの初期化
main
setpsw_i(組み込み関数) 割り込み許可
© 2013 Renesas Electronics Corporation. All rights reserved. 24
プログラムサンプルのカスタマイズ
© 2013 Renesas Electronics Corporation. All rights reserved. 25
周期の変更
void init_CMT0(void) { // Wakeup unit 0 MSTP(CMT0) = 0; // Clock select is PCLK/512 CMT0.CMCR.WORD = 0x0083; // Counts for 500ms(48000KHz(48MHz)*500/512) CMT0.CMCOR = 48000*500/512-1;
void init_CMT0(void) { // Wakeup unit 0 MSTP(CMT0) = 0; // Clock select is PCLK/512 CMT0.CMCR.WORD = 0x0083; // Counts for 100ms(48000KHz(48MHz)*100/512) CMT0.CMCOR = 48000*100/512-1;
500ms周期
100ms周期
ルネサス エレクトロニクス株式会社 © 2013 Renesas Electronics Corporation. All rights reserved.
END