アプリ版:「スタンプのみでお礼する」機能のリリースについて

マイコン初心者です。

SH7144でPIOに接続された信号のパルス幅を測定したいです。
ネットで検索をしてH8-3048のサンプルプログラムを見つけたのですが、
SH7144への変更のしかがたが分かりません。
どなたか分かる方がいましたらお教えください。
初心者ですので、具体的に教えていただけると助かります。

ちなみに、下記がネットで見つけたH8-3048でのプログラムです。
宜しくお願いいたします。

/* メイン関数************************************************/
int main(void){

long counter;

P1.DDR = 0xff; // port1出力に設定 表示LED
PA.DDR = 0x00; // portA入力に設定 パルス入力用

ITU1.TCR.BYTE = 0x23; // GRAインプットキャプチャ,カウンタクリアGRA clock 1/8
ITU1.TIOR.BYTE = 0xCD; // GRA立下り,GRB立ち上がりインプットキャプチャ
ITU.TSTR.BIT.STR1 = 0; // カウント停止状態

while(1){
while(PA.DR.BIT.B4 == 0){} // 入力パルス立ち上がり検知
ITU.TSTR.BIT.STR1 = 1; // ITU1 TCNTカウント開始
while(ITU1.TSR.BIT.IMFA == 0){} // GRAキャプチャ,パルス立下り検知
ITU1.TSR.BIT.IMFA = 0; // フラグをクリア
ITU.TSTR.BIT.STR1 = 0; // ITU1 TCNTカウント停止
counter = ITU1.GRA; // カウント値の取得
P1.DR.BYTE = counter >> 4; // 8bitシフトさせP1に表示
}
}

A 回答 (2件)

こんにちは。



> TIOC1A(PE4)に接続するのではなくて、
> PF7などの汎用の入力で行いたいのです。
> そもそも、そういったことはできないのでしょうか?

できます。むしろ、手法としてはその方が簡単です。
ただし精度は落ちますし、そもそものサンプルプログラムの意味がほぼ無くなりますが。

その場合、おおまかな流れは以下のようになるかと思います。

・MTUを初期化する
・MTUのTCNTをクリアする。カウントはストップのまま。
・PF7が1になるのを待つ
・MTUカウンタをスタートする。
・PF7が0になるのを待つ
・MTUカウンタをストップする。
・TCNTの値を読む → これがパルス幅
    • good
    • 0

こんにちは。



サンプルプログラムの仕様は、
・パルス信号をTIOCA1(PA4)から入力
・タイマカウンタはクロックの8分周(元のクロック数は不明)
・レジスタにはパルスの立ち下がり→GRA、立ち上がり→GRBに
 キャプチャするように設定しているが、実際は立ち上がりを
 PA4ポーリング、立ち下りをGRAインプットキャプチャしている。
 (パルスのHi期間を測定)
・取得したパルス幅を、1/16してP1(LED?)に表示する。

てな感じだと思います。
このサンプルプログラムを参考にするならば、パルス信号線はTIOCxxに接続されている必要があります。
接続していれば、変更は、H8-3048のITU1を、SH7144のMTUxに置き換えるだけです。

最も楽に変更を終えたいなら、パルス信号線はTIOC1A(PE4)に接続するのが良いです。
TIOC1Aにつないでいれば、
 PA4 → PE4
 ITU1 → MTU1
と置き換えられますので、両者のデータシートを首っ引きで見比べて、レジスタの
設定を置き換えていけば、動作すると思います。(多分)

あまり深く見ていないので分かりませんが、相手がSH7144ですと、
・PFC
・モジュールスタンバイ
辺りにも注意する必要があるかも知れません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

TIOC1A(PE4)に接続するのではなくて、
PF7などの汎用の入力で行いたいのです。
そもそも、そういったことはできないのでしょうか?
素人質問ですみません。

お礼日時:2012/07/23 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!