トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

SH2A (SH7216) でタイマ出力が出ない

[電子工作]

現象

ルネサスの 32bit マイコン SH2A シリーズ(実際に経験したのは、SH72167F) の MTU2(S) において、CH3,CH4 で 通常、PWM モードのコンペアマッチ出力ピンに出力が出ない。

PFC で通常の出力ポートに設定すると、H,L 出力はされる。

また、TIOC3A,C にはまったく同じコードで正常に出力されるのに、TIOC3B(S),TIOC3D(S),TIOC4A-D(S) だけ出力されない。

原因

一部のタイマ出力にだけ、余計な出力イネーブルレジスタ(TOER)が存在する。これが初期状態では無効になっている。

対処

使用する出力端子に応じ、下記のコードをタイマ(MTU2,MTU2S 初期化に)追加して有効化する。下記は、MTU2Sの場合の例。MTU2 も同様

// TOER の設定
// 出力端子のTIOC4D、TIOC4C、TIOC3D、TIOC4B、
// TIOC4A、TIOC3B の出力設定の許可/禁止を行います。
// *これらの端子はTOER の各ビットの設定をしないと正しく出力されません。*
// チャネル3、4 において、TOER はチャネル3、4 のTIOR 設定の前に値をセットしてください。

MTU2S.TOER.BIT.OE4A = 1 ;
//MTU2S.TOER.BIT.OE4B = 1 ;
//MTU2S.TOER.BIT.OE4C = 1 ;
//MTU2S.TOER.BIT.OE4D = 1 ;
//MTU2S.TOER.BIT.OE3B = 1 ;	
//MTU2S.TOER.BIT.OE3D = 1 ;

考察

ちょうど POE2 (特定の条件で特定のピンをハイインピーダンス状態にする機能)の対象ピンと被るので、こちらと勘違いする場合がある。

出力できない際に、該当端子がハイインピーダンスでなければ、POE2 は原因から除外できる。

また、SH2A は各ユニットが初期状態でスリープ(省エネ設計?)しているので、STB レジスタで起こしてやる必要がある。

STB.CR3.BIT._MTU2S = 0; /* MTU2Sにクロックを供給 */

タイマレジスタの値がおかしかったり、カウントアップされない場合はこちらもチェック。

そのほか、PFC で該当ピンを TIOCxx の出力に設定してやる必要もある。

PFC.PDCRH3.BIT.PD27MD = 0x5; /* PD27=TIOC4AS(0b101) */
PFC.PDIORH.BIT.B27 = 1 ; /* TIOC4AS is OUT */

MTU2S4 でコンペアマッチ出力をする場合をまとめると、

STB.CR3.BIT._MTU2S = 0; // MTU2Sにクロックを供給 
MTU2S.TSTR.BIT.CST4 = 0 ; // TCNT4 STOP
MTU2S4.TMDR.BIT.MD = 0x0 ; // MTU2S4:NORMAL
MTU2S4.TCR.BIT.TPSC = 0x2 ; // CLK = Pφ div 16 
MTU2S.TOER.BIT.OE4A = 1 ; // *今回のハマりどころ*
MTU2S4.TIOR.BIT.IOA = 0x3 ; // 3 - TIOC4AS:初期値0,TGRA のコンペアマッチでトグル(0b0011)
MTU2S4.TCR.BIT.CCLR = 0x1 ; // 1 - TGRA コンペアマッチでクリア
MTU2S4.TGRA = (コンペアマッチ値) ; // コンペアマッチ値
MTU2S4.TCNT = 0x0000 ; // カウンタを 0 に
MTU2S.TSTR.BIT.CST4 = 1 ; // スタート
PFC.PDCRH3.BIT.PD27MD = 0x5; // PD27=TIOC4AS(0b101)
PFC.PDIORH.BIT.B27 = 1 ; // TIOC4AS is OUTPUT

しかし、ピンにあまりにたくさん機能を割り付けたせいなのか、つくづく面倒くさい設計になっているなぁ。

 カテゴリ : もくしいゲームレシピコンピュータ雑文生活電子工作おいしい店マップ

                  Topページへ | もてないSNS「もくしい」