CCWO Embedded Space

CCWOの日々の開発を発信するブログ

Renesas RX621 PWM

PB0をMTIOC9Aに設定し、PWMモード1を用いてPWMを出力していきます。
hardware_setup.cにて以下のMTU2_initialize関数を作成し、HardwareSetup関数で呼びましょう。

MTU2_initialize

void MTU2_initialize(void)
{
	// MTU9 = PWM Mode 1
	MSTP(MTU9) = 0;			// Wake up MTU9
	MTU9.TCR.BIT.TPSC = 4;	// PCLK/256
	MTU9.TCR.BIT.CKEG = 1;	// Count rising edge
	MTU9.TCR.BIT.CCLR = 1;	// Compare Match TGRA
	MTU9.TMDR.BIT.MD = 2;	// PWM mode 1
	MTU9.TMDR.BIT.BFA = 0;	// TGRA, TGRC normal mode
	MTU9.TMDR.BIT.BFB = 0;	// TGRB, TGRD normal mode
	MTU9.TIORH.BIT.IOA = 6;	// Initial High compare match High
	MTU9.TIORH.BIT.IOB = 5;	// Initial High compare match Low
	MTU9.TGRA = 29999;		// 1KHz
	MTU9.TGRB = 14999;		// Duty 50%
	MTU9.TCNT = 0;			// Clear Count
	MTUB.TSTR.BIT.CST3 = 1;	// Count Start
}

これでビルドをし、PB0から1kHz50%のPWMが出ていれば成功です。
それでは、MTU9(PWM)の設定手順を見ていきます。

  1. モジュールスタート(消費電力低減機能の解除)
  2. ピンの設定
  3. MTU9の設定
  4. ユーザ関数の定義

1.モジュールスタート

MSTP(MTU9) = 0;			// Wake up MTU9

消費電力低減機能を解除します。RX631のようにアクセスロックはないので、そのまま解除します。
MSTPCTRレジスタがiodefine.hでMSTP(****)というようにデファインされているのでこれを使用します。

2.ピンの設定
MTU9のMTIOC9Aを設定すると自動的に出力されます。

3.MTU9の設定
f:id:CCWO:20160822180250p:plain
データシートp.940の図18.26を参考に設定していきます。
f:id:CCWO:20160822180418p:plain
また、動作はデータシートの図18.27を参考にします。今回の設定ではTGRBの値をそのままDuty比に変換したいため、MTIOC9AのHighとLowが入れ替わっています。

MTU9.TCR.BIT.TPSC = 4;	// PCLK/256
MTU9.TCR.BIT.CKEG = 1;	// Count rising edge
MTU9.TCR.BIT.CCLR = 1;	// Compare Match TGRA
MTU9.TMDR.BIT.MD = 2;	// PWM mode 1
MTU9.TMDR.BIT.BFA = 0;	// TGRA, TGRC normal mode
MTU9.TMDR.BIT.BFB = 0;	// TGRB, TGRD normal mode
MTU9.TIORH.BIT.IOA = 6;	// Initial High compare match High
MTU9.TIORH.BIT.IOB = 5;	// Initial High compare match Low
MTU9.TGRA = 29999;		// 1KHz
MTU9.TGRB = 14999;		// Duty 50%
MTU9.TCNT = 0;			// Clear Count
MTUB.TSTR.BIT.CST3 = 1;	// Count Start

まずMTU2にはMTU0~11までのユニットがあります。今回はPWMモード1を使用できるMTU9を用いて、MTIOC9AからPWMを出力します。
また、各ユニットは持っている機能と出力できるピンが指定されているので、設定するときは注意しましょう。
(MTU2という周辺機能にMTU0~11があるのですが、思いっきりMTU2が被っててわかりにくいですよね(´・_・`))
レジスタの設定を見ていきましょう。MTU9ユニット内のレジスタを設定していきます。
TCRレジスタの
TPSC: 4→カウント周期をPCLK/256に
CLEG: 1→立ち上がりエッジでカウント
CCLR: 1→TGRAとTCNTがコンペアマッチしたときにTCNTをクリア
TMDRレジスタの
MD: 2→PWMモード1に
BFA,BFB: 0→TGRA~Dはノーマルモード
TIORHレジスタの
IOA: 6→初期値HighコンペアマッチでHighに
IOB: 5→初期値HighコンペアマッチでLowに
MTU9.TGRAレジスタを1kHzとなるように設定
MTU9.TGRBレジスタをDuty比50%になるように設定
TSTRレジスタの
CST3: 1→MTU9のカウントスタート
となっています。

4.ユーザ関数の定義
今回はユーザ関数は作成しないので省略。

これでMTU9にてPWMの設定が完了しました。

20160822の記事