
マイコン初心者です。
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に表示
}
}
No.2ベストアンサー
- 回答日時:
こんにちは。
> TIOC1A(PE4)に接続するのではなくて、
> PF7などの汎用の入力で行いたいのです。
> そもそも、そういったことはできないのでしょうか?
できます。むしろ、手法としてはその方が簡単です。
ただし精度は落ちますし、そもそものサンプルプログラムの意味がほぼ無くなりますが。
その場合、おおまかな流れは以下のようになるかと思います。
・MTUを初期化する
・MTUのTCNTをクリアする。カウントはストップのまま。
・PF7が1になるのを待つ
・MTUカウンタをスタートする。
・PF7が0になるのを待つ
・MTUカウンタをストップする。
・TCNTの値を読む → これがパルス幅
No.1
- 回答日時:
こんにちは。
サンプルプログラムの仕様は、
・パルス信号を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
・モジュールスタンバイ
辺りにも注意する必要があるかも知れません。
ご回答ありがとうございます。
TIOC1A(PE4)に接続するのではなくて、
PF7などの汎用の入力で行いたいのです。
そもそも、そういったことはできないのでしょうか?
素人質問ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PIC12F683でLEDをスイッチで点...
-
レジスタマップって何ですか?
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
TCP/IP通信時のサーバーからの受信
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
-
Excel(VBA)でSetTimer関数を使...
-
C# シリアル通信でデータ受信...
-
win10で、正確な待ち時間の作り方
-
VBSの処理中一旦処理を止めて再...
-
VBA、UserFormを前面に出力して...
-
アプリケーションが終了するま...
-
構文エラーについて教えてください
-
vb.netでEXCEL起動がうまくでき...
-
ファイルマッピング関数で失敗
-
移動可能メモリ
-
AIXでのプロセス使用メモリの最...
-
CPU負荷率の安全な上限と計...
-
ACCESS側からEXCELの書式を設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジスタマップって何ですか?
-
組み込みマイコンでのソフトウ...
-
PLCとPCの通信
-
シリアル通信でのデータ取りこぼし
-
古い計量機器からのrs232cを使...
-
USBハブの自作について
-
C言語によってシリアル通信をお...
-
PIC12F683でLEDをスイッチで点...
-
I2C I/OエクスパンダPCA9539動...
-
マイコンからSDカード内のテキ...
-
Octal D-type transparent latc...
-
TCNTとTIFRの意味
-
H83052 シリアル通信 A/D変換...
-
メモリースループットとは?
-
FPGA や CPLD は何に使うん...
-
デジタルマルチメータの自動計...
-
geko201とマイコンのシリアル通...
-
PICマイコンをアセンブラでAD変...
-
機械語のレジスタペアについて
-
FATの故障? 1ファイル内の文字化け
おすすめ情報