RL78/G14 周辺機能紹介タイマ RD ルネサスエレクトロニクス株式会社 ルネサス半導体トレーニングセンター 2013/08/02 Rev. 0.00 00000-A
コンテンツ タイマ RD の概要 PWM 機能のプログラム サンプル紹介 相補 PWM モードのプログラム サンプル紹介 2
タイマ RD の概要 3
タイマ RD の機能 モード 使用チャネル チャネル0, チャネル1 独立で使用 動作モード タイマモードインプットキャプチャ機能 タイマモードアウトプットコンペア機能 タイマモード PWM 機能 チャネル0 チャネル1 組み合わせて使用 リセット同期 PWM モード 相補 PWM モード PWM3 モード 4
PWM 機能の動作概要 チャネル毎に使用チャネルを組み合わせて使用 PWM 機能 リセット同期 PWM 相補同期 PWM PWM3 PWM 出力 f HOCO f CLK /X TRDCLK クロック設定 カウンタ TDR0 TRDGRA0 周期 TRDGRB0 出力変化点 TRDGRC0 TRDIOA0 TRDIOB0 TRDIOC0 2 本 3 本 バッファ TRDGRD0 TRDIOD0 同期動作設定 チャネル0 TRDGRA1 周期 TRDIOA1 3 相計 6 本 ( 正相 逆相 ) f HOCO f CLK /X TRDCLK クロック設定 カウンタ TDR1 TRDGRB1 出力変化点 TRDGRC1 バッファ TRDGRD1 TRDIOB1 TRDIOC1 TRDIOD1 3 本 チャネル 1 5
PWM 機能のプログラム サンプル紹介 6
PWM とは PWM(Pulse Width Modulation: パルス幅変調 ) はパルス波のデューティ比を変化させて変調する変調方法 デューティ比を変化させることで 電圧や電流を制御できる デューティ比 波形例 平均電流 アクティブ期間 非アクティブ期間 小 小さい 大 大きい キャリア周期 デューティ比 = アクティブ期間 / キャリア周期 アクティブ期間が H の場合 7
仕様 タイマRD0のPWM 機能を使用し 周期 100μsのPWM 波形を3 本出力します 出力する信号は以下のとおりです TRDIOB0 端子出力 :Lレベル出力期間(25μs) Hレベル出力期間 (75μs) TRDIOC0 端子出力 :Lレベル出力期間(50μs) Hレベル出力期間 (50μs) TRDIOD0 端子出力 :Lレベル出力期間(75μs) Hレベル出力期間 (25μs) パルス出力強制遮断入力機能は禁止し 1 周期経過ごとに割り込みを発生させます また PWM 波形を連続出力します < 設定条件 > カウントソースに fclk(16mhz) を使用します 周期設定値 出力変化点設定値 3 出力変化点設定値 2 出力変化点設定値 1 PWM 周期 :100μs TRDIOB0 端子出力 TRDIOC0 端子出力 TRDIOD0 端子出力 25μs 50μs 75μs 75μs 50μs 25μs 8
初期設定のフロー _@cstart hdwinit R_Systeminit 初期設定関数 hdwinit() マスカブル割り込み禁止 周辺 I/O リダイレクション機能禁止 main() 周辺機能初期設定 R_Systeminit() CPU 初期設定 R_CGC_Create() _@cend マスカブル割り込み許可 タイマ RD 初期設定 R_TMR_RD0_Create() return return 9
タイマ RD の設定フロー (1/3) R_TMR_RD0_Create タイマ RD へのクロック供給許可 タイマ RD0 のカウント設定 タイマ RD0 割り込み禁止 タイマ RD 割り込み優先レベル設定 タイマ RD モードレジスタ設定 タイマ RD PWM 機能選択 タイマ RD の設定フロー (2/3) TRDGRD0 レジスタ機能 : ジェネラルレジスタ TRDGRC0 レジスタ機能 : ジェネラルレジスタ TRDIOD0 端子 : PWM 機能 TRDIOC0 端子 : PWM 機能 TRDIOB0 端子 : PWM 機能 10
タイマ RD へのクロック供給許可 周辺イネーブル レジスタ 1(PER1) 各周辺ハードウエアへのクロック供給許可 / 禁止を設定する 11
タイマ RD0 のカウント設定 タイマ RD スタートレジスタ (TRDSTR) タイマ RD のカウント動作とカウント開始 / 停止を設定 12
タイマ RD0 割り込み処理禁止 割り込みマスク フラグ レジスタ (MK2H) 対応するマスカブル割り込み処理の許可 / 禁止を設定 13
タイマ RD0 割り込み要求フラグクリア 割り込み要求フラグ レジスタ (IF2H) 対応する割り込み要求の発生または命令の実行によりセット リセット信号発生時または命令の実行によりクリア 割り込みが受け付けられた場合は自動的にクリア 14
割り込み優先レベルの設定 優先順位指定フラグ レジスタ (PR02H, PR12H) PR0xy レジスタと PR1xy レジスタを組み合わせて, 対応するマスカブル割り込みの優先順位レベルを設定 15
タイマ RD モードレジスタ設定 タイマ RD モードレジスタ (TRDMR) ジェネラルレジスタの機能選択や同期の許可 / 禁止を設定 PWM 使用時は必ずジェネラルレジスタ 16
タイマ RD PWM 機能選択 タイマ RD PWM 機能選択レジスタ (TRDPMR) タイマ RD の端子を PWM として使用するか それ以外の機能として使用するかを設定する 17
タイマ RD の設定関数 (1/3) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= 0xfe; TRDMK0 = 1; TRDIF0 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0x00; TRDPMR = 0x07; TRDDF0 = 0x00; TRDOER1 &= 0xf0; TRDOER1 =0x01; TRDOCR = 0x00; TRDCR0 = 0x20; TRDIER0 = 0x01; TRDPOCR0=0x07; TRDGRA0 = 1599; TRDGRB0 = 399; TRDGRC0 = 799; TRDGRD0 = 1199; P1 &= 0x1f; PM1 &= 0x1f; } 18
タイマ RD の設定フロー (2/3) タイマ RD の設定フロー (1/3) パルス強制遮断禁止 全端子パルス強制遮断禁止 タイマ RD 出力設定 PWM 出力端子は出力許可 それ以外の端子は出力禁止 初期出力レベル設定 出力端子は全て非アクティブレベル タイマ RD 制御レジスタ設定 TRDGRA0 レジスタとのコンペア一致で TRD0 レジスタクリア コンペア一致割り込み設定 1 周期経過時に割り込み発生 タイマ RD の設定フロー (3/3) 19
パルス強制遮断禁止 タイマ RD デジタルフィルタ機能選択レジスタ (TRDDF0) PWM 機能では 端子出力の強制遮断の許可 / 禁止 強制遮断時の出力レベルを設定 DFB DFD PENB1 DFA DFC PENB0 TRDIOD 端子パルス強制遮断制御 TRDIOC 端子パルス強制遮断制御 TRDIOB 端子パルス強制遮断制御 0 0 強制遮断禁止 R/W 0 1 ハイインピーダンス出力 1 0 L 出力 1 1 H 出力 これらのモードで対応する端子をタイマRDの出力ポートとして使用しない場合 強制遮断禁止の 00Bに設定してください また カウント停止中に設定してください R/W INTP ELC によって強制遮断 出力を変更 20
タイマ RD 出力設定 タイマ RD 出力マスタ許可レジスタ 1(TRDOER1) タイマ RD で使用する端子からの出力許可 / 禁止を設定 21
初期出力レベル設定 タイマ RD 出力制御レジスタ (TRDOCR) タイマ RD で使用する端子の初期出力を設定 22
タイマ RD 制御レジスタ設定 - カウンタクリア選択 - タイマ RD 制御レジスタ (TRDCR0) カウンタクリア クロックエッジ カウントソースを設定 コンペア一致 TRD0 カウンタ カウンタクリア 23
タイマ RD 制御レジスタ設定 - カウントソース選択 - タイマ RD 制御レジスタ (TRDCR0) カウンタクリア クロックエッジ カウントソースを設定 24
コンペア一致割り込み設定 タイマ RD 割り込み許可レジスタ (TRDIER0) インプットキャプチャ / コンペア一致割り込みの許可 / 禁止を設定 25
タイマ RD の設定関数 (2/3) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= 0xfe; TRDMK0 = 1; TRDIF0 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0x00; TRDPMR = 0x07; TRDDF0 = 0x00; TRDOER1 &= 0xf0; TRDOER1 =0x01; TRDOCR = 0x00; TRDCR0 = 0x20; TRDIER0 = 0x01; TRDPOCR0=0x07; TRDGRA0 = 1599; TRDGRB0 = 399; TRDGRC0 = 799; TRDGRD0 = 1199; P1 &= 0x1f; PM1 &= 0x1f; } 26
タイマ RD の設定フロー (3/3) タイマ RD の設定フロー (2/3) 出力レベル選択 全ての出力はアクティブレベル H PWM 周期設定 PWM 周期 : 100μs PWM 出力変化点設定 ポートレジスタ設定 TRDGRB0 出力変化点 : 25μs TRDGRC0 出力変化点 : 50μs TRDGRD0 出力変化点 : 75μs "0" を出力 出力モード return 27
出力レベル選択 タイマ RD PWM 機能出力レベル制御レジスタ (TRDPOCR0) PWM を出力する場合のアクティブレベルを設定 28
PWM 周期のカウント設定 タイマ RD ジェネラルレジスタ A0(TRDGRA0) TRDGRA0 に PWM の周期を設定 m=1599 m 1 1 PWM 100周期 [ μms ] 1599 ( m 1) ( m 1) 16[ fk MHz] 周期 100μs m+1 カウント 29
PWM 出力変化点のカウント設定 タイマ RD ジェネラルレジスタ B0 C0 D0(TRDGRB0 TRDGRC0 TRDGRD0) PWM 機能では 出力変化点を設定 n 16[MHz] 25[ s] 1 399 o 16[MHz] 50[ s] 1 799 p 16[MHz] 75[ s] 1 1199 Lレベル期間 75μs Lレベル期間 50μs L レベル期間 25μs n+1 o+1 p+1 カウント 30
ポートレジスタ設定 ポート レジスタ (Pxx) ポートの出力ラッチの値を設定 ポート モード レジスタ (PMxx) ポートの入力 / 出力を 1 ビット単位で設定 31
タイマ RD の設定関数 (3/3) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= 0xfe; TRDMK0 = 1; TRDIF0 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0x00; TRDPMR = 0x07; TRDDF0 = 0x00; TRDOER1 &= 0xf0; TRDOER1 =0x01; TRDOCR = 0x00; TRDCR0 = 0x20; TRDIER0 = 0x01; TRDPOCR0=0x07; TRDGRA0 = 1599; TRDGRB0 = 399; TRDGRC0 = 799; TRDGRD0 = 1199; P1 &= 0x1f; PM1 &= 0x1f; } 32
PWM モードの設定例 (1/3) 33
PWM モードの設定例 (2/3) 34
PWM モードの設定例 (3/3) 35
main のフロー main timer_rd0_start タイマ RD カウント開始設定 timer_rd0_start() コンペア一致フラグ A クリア タイマ RD0 割り込み要求フラグクリア タイマ RD0 割り込み許可 タイマ RD0 カウント開始 return 36
タイマ RD のカウント開始関数 void timer_rd0_start(void) { unsigned char work = 0; } work = TRDSR0; TRDSR0 = work & 0x1E; TRDIF0 = 0; TRDMK0 = 0; TRDSTR = 0x01; timer_rd0_start コンペア一致フラグ A クリア タイマ RD0 割り込み要求フラグクリア タイマ RD0 割り込み許可 タイマ RD0 カウント開始 return 37
タイマ RD 割り込み関数 interrupt static void r_tmr_rd0_interrupt(void) { unsigned char work = 0; } work = TRDSR0; TRDSR0 = work & 0x1E; 38
相補 PWM モードのプログラム サンプル紹介 39
相補 PWM とは 正相のPWM 出力信号と逆相のPWM 出力信号の組合せ 短絡防止時間をもつ 正相 逆相 短絡防止時間 PWM 出力信号のアクティブレベルをアクティブローとしたときの例 40
仕様 相補 PWM モードを使用し 350μs 周期の PWM 波形の正相を 3 本 逆相を 3 本の計 6 本 PWM の 1/2 周期ごとの反転出力を 1 本出力します 出力する PWM 波形は 4 種類です 10 パルス出力したタイミングで波形を切り替えます PWM 波形は 波形 1 波形 2 波形 3 波形 2 波形 4 波形 1 の順に繰り返し出力します パルス出力強制遮断入力機能は禁止し 1 周期経過ごとに割り込みを発生させます また PWM 波形を連続出力し 出力レベルのアクティブは L 初期出力レベルは H とします < 設定条件 > カウントソースは fclk(16mhz) を使用します 41
PWM 波形 1 の仕様 正相出力 : 非アクティブレベル H 期間 (50μs) アクティブレベル L 期間 (250μs) 非アクティブレベル H 期間 (50μs) 逆相出力 : アクティブレベル L 期間 (25μs) 短絡防止時間 (25μs) 非アクティブレベル H 期間 (250μs) 短絡防止時間 (25μs) アクティブレベル L 期間 (25μs) 42
初期設定のフロー _@cstart hdwinit R_Systeminit 初期設定関数 hdwinit() マスカブル割り込み禁止 周辺 I/O リダイレクション機能禁止 main() 周辺機能初期設定 R_Systeminit() CPU 初期設定 R_CGC_Create() _@cend マスカブル割り込み許可 タイマ RD 初期設定 R_TMR_RD0_Create() return return 43
タイマ RD の設定フロー (1/4) 44
タイマ RD1 のカウント設定 タイマ RD スタートレジスタ (TRDSTR) タイマ RD のカウント動作とカウント開始 / 停止を設定 45
タイマ RD1 割り込み処理禁止 割り込みマスク フラグ レジスタ (MK2H) 対応するマスカブル割り込み処理の許可 / 禁止を設定 46
タイマ RD0 割り込み要求フラグクリア 割り込み要求フラグ レジスタ (IF2H) 対応する割り込み要求の発生または命令の実行によりセット リセット信号発生時または命令の実行によりクリア 割り込みが受け付けられた場合は自動的にクリア 47
タイマ RD の設定関数 (1/4) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= (uint8_t)~0x03; TRDMK0 = 1; TRDIF0 = 0; TRDMK1 = 1; TRDIF1 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0xE0; TRDFCR = 0x02; TRDDF0 = 0x00; TRDDF1 = 0x00; TRDOER1 = 0x01; TRDCR0 = 0x00; TRDCR1 = 0x00; TRDIER0 = 0x01; TRDIER1 = 0x00; TRDOCR = 0x00; TRD0 = 400; TRDGRA0 = 3198; TRDGRB0 = 799; TRDGRA1 = 799; TRDGRB1 = 799; TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; P1 &= 0x80; PM1 &= 0x80; } 48
タイマ RD の設定フロー (2/4) タイマ RD の設定フロー (1/4) タイマ RD モードレジスタ設定 バッファレジスタの設定 タイマ RD 機能制御レジスタ設定 出力レベル : 初期出力 "H" アクティブレベル "L" ( 正相 逆相ともに ) パルス強制遮断禁止 全端子のパルス強制遮断禁止 タイマ RD 出力設定 TRDIOA0 端子のみ出力禁止 タイマ RD の設定フロー (3/4) 49
タイマ RD モードレジスタ設定 - ジェネラルレジスタの機能選択 - タイマ RD モードレジスタ (TRDMR) ジェネラルレジスタの機能選択や同期の許可 / 禁止を設定 出力変化点を変更するためには これらに対応するバッファレジスタを使う必要がある 50
タイマ RD モードレジスタ設定 - タイマの同期動作設定 - タイマ RD モードレジスタ (TRDMR) ジェネラルレジスタの機能選択や同期の許可 / 禁止を設定 51
タイマ RD 機能制御 - 出力レベル選択 - タイマ RD 機能制御レジスタ (TRDFCR) 出力レベルの選択 PWM 機能を使用したモードの選択 52
タイマ RD 機能制御 - コンビネーションモード選択 - タイマ RD 機能制御レジスタ (TRDFCR) 出力レベルの選択 PWM 機能を使用したモードの選択 バッファレジスタ 53
パルス強制遮断禁止 タイマ RD デジタルフィルタ機能選択レジスタ (TRDDF0 TRDDF1) PWM 機能では 端子出力の強制遮断の許可 / 禁止 強制遮断時の出力レベルを設定 DFB DFD PENB1 DFCK1 DFA DFC PENB0 DFCK0 TRDIOD 端子 TRDIOC 端子 TRDIOB 端子 TRDIOA 端子 パルス強制遮断制御 0 0 強制遮断禁止 R/W 0 1 ハイインピーダンス出力 1 0 L 出力 1 1 H 出力 これらのモードで対応する端子をタイマ RD の出力ポートとして使用しない場合 強制遮断禁止の 00B に設定してください また カウント停止中に設定してください R/W 54
タイマ RD 出力設定 タイマ RD 出力マスタ許可レジスタ 1(TRDOER1) タイマ RD で使用する端子からの出力許可 / 禁止を設定 55
タイマ RD の設定関数 (2/4) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= (uint8_t)~0x03; TRDMK0 = 1; TRDIF0 = 0; TRDMK1 = 1; TRDIF1 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0xE0; TRDFCR = 0x02; TRDDF0 = 0x00; TRDDF1 = 0x00; TRDOER1 = 0x01; TRDCR0 = 0x00; TRDCR1 = 0x00; TRDIER0 = 0x01; TRDIER1 = 0x00; TRDOCR = 0x00; TRD0 = 400; TRDGRA0 = 3198; TRDGRB0 = 799; TRDGRA1 = 799; TRDGRB1 = 799; TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; P1 &= 0x80; PM1 &= 0x80; } 56
タイマ RD の設定フロー (3/4) 57
タイマ RD 制御レジスタ設定 タイマ RD 制御レジスタ (TRDCR0 TRDCR1) カウンタクリア クロックエッジ カウントソースを設定 58
コンペア一致割り込み設定 タイマ RD 割り込み許可レジスタ (TRDIER0 TRDIER1) インプットキャプチャ / コンペア一致割り込みの許可 / 禁止を設定 チャネル01 59
TRDIOC0 端子出力レベル設定 タイマ RD 出力制御レジスタ (TRDOCR) パルスの初期出力レベルを設定 60
タイマ RD の設定関数 (3/4) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= (uint8_t)~0x03; TRDMK0 = 1; TRDIF0 = 0; TRDMK1 = 1; TRDIF1 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0xE0; TRDFCR = 0x02; TRDDF0 = 0x00; TRDDF1 = 0x00; TRDOER1 = 0x01; TRDCR0 = 0x00; TRDCR1 = 0x00; TRDIER0 = 0x01; TRDIER1 = 0x00; TRDOCR = 0x00; TRD0 = 400; TRDGRA0 = 3198; TRDGRB0 = 799; TRDGRA1 = 799; TRDGRB1 = 799; TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; P1 &= 0x80; PM1 &= 0x80; } タイマRDの設定フロー (2/4) タイマRDカウントソース設定コンペア一致割り込み設定 TRDIOC0 端子出力レベル設定タイマRDの設定フロー (4/4) 61
タイマ RD の設定フロー (4/4) 62
相補 PWM のカウント設定値の考え方 1/2 周期 短絡防止時間 63
短絡防止時間の設定 タイマ RD カウンタ 0(TRD0) 相補 PWM モードでは短絡防止時間を設定 400 短絡防止時間 1 fk 1 25μ ps 400 16MHz p p p: 短絡防止時間 25μs 64
PWM 周期設定 タイマ RD ジェネラルレジスタ A0(TRDGRA0) 相補 PWM モードでは PWM 周期を設定 3198 1/2 周期 1 1 PWM 350 周期 m s 3198 ( m ( 2m p 2) 2400) 2 16 fkmhz 65
PWM 出力変化点計算方法 タイマ RD ジェネラルレジスタ B0 A1 B1(TRDGRB0 TRDGRA1 TRDGRB1) 相補 PWM モードでは PWM 出力変化点を設定 799 n: 出力変化点 50μs 799 799 1 1 PWM 出力変化点 50 ns 799 ( n 1) ( n 1) 16 fkmhz 66
バッファレジスタ設定 タイマ RD ジェネラルレジスタ D0 C1 D1(TRDGRD0 TRDGRC1 TRDGRD1 ) バッファレジスタとして使用するため TRDGRB0 TRDGRA1 TRDGRB1 と同じ値を設定 799 67
ポートレジスタ設定 ポート レジスタ (Pxx) ポートの出力ラッチの値を設定 ポート モード レジスタ (PMxx) ポートの入力 / 出力を 1 ビット単位で設定 68
タイマ RD の設定関数 (4/4) void R_TMR_RD0_Create(void) { TRD0EN = 1; TRDSTR &= (uint8_t)~0x03; TRDMK0 = 1; TRDIF0 = 0; TRDMK1 = 1; TRDIF1 = 0; TRDPR10 = 1; TRDPR00 = 1; TRDMR = 0xE0; TRDFCR = 0x02; TRDDF0 = 0x00; TRDDF1 = 0x00; TRDOER1 = 0x01; TRDCR0 = 0x00; TRDCR1 = 0x00; TRDIER0 = 0x01; TRDIER1 = 0x00; TRDOCR = 0x00; TRD0 = 400; TRDGRA0 = 3198; TRDGRB0 = 799; TRDGRA1 = 799; TRDGRB1 = 799; TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; P1 &= 0x80; PM1 &= 0x80; } 69
相補 PWM モードの設定例 (1/3) 70
相補 PWM モードの設定例 (2/3) 71
相補 PWM モードの設定例 (3/3) 72
main のフロー 73
タイマ RD のカウント開始関数 void timer_rd0_start(void) { unsigned char work = 0; } work = TRDSR0; TRDSR0 = work & 0x1E; TRDIF0 = 0; TRDMK0 = 0; TRDSTR = 0x03; timer_rd0_start コンペア一致フラグ A クリア タイマ RD0 割り込み要求フラグクリア タイマ RD0 割り込み許可 タイマ RD0 カウント開始 return 74
タイマ RD0 割り込みのフロー A B A B 75
タイマ RD0 割り込み関数 interrupt static void r_tmr_rd0_interrupt(void) { unsigned char work = 0; } work = TRDSR0; TRDSR0 = work & 0x1E; int_cnt++; if (int_cnt >= 10) { int_cnt = 0x00; output_chg_mode++; if(output_chg_mode >= 5) { output_chg_mode = 0; } switch (output_chg_mode) { case 0: TRDGRD0 = 1999; TRDGRC1 = 1999; TRDGRD1 = 1999; break; case 1: TRDGRD0 = 0; TRDGRC1 = 0; TRDGRD1 = 0; break; A interrupt static void r_tmr_rd0_interrupt(void) { A case 2: TRDGRD0 = 1999; TRDGRC1 = 1999; TRDGRD1 = 1999; break; case 3: TRDGRD0 = 3600; TRDGRC1 = 3600; TRDGRD1 = 3600; break; case 4: TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; break; default: output_chg_mode = 4; TRDGRD0 = 799; TRDGRC1 = 799; TRDGRD1 = 799; break; } } } 76
END ルネサスエレクトロニクス株式会社