初心者です。
GPTタイマ(1周期:200ns)をPWMモードで利用しています。コールバックの中で、メモリに対する書き込み処理を行います。ロジックアナライザで上記の処理のタイミングを測ると、GPTの立ち上がりタイミングからメモリの書き込み処理までの間に500ns程のタイムラグが生じており、間に合っていません。どのようにすれば、応答時間を短くすることができるでしょうか。初心者故、GPTタイマの使い方がそもそも間違っているのか、GPTタイマの限界なのか、見当もついていません。お力添えの程よろしくお願いします。
ターゲットはS7G2です。
Urkさん
Urk said:このメモリ書き込み信号とGPTのクロックを計測しています。クロックの立ち上がりから約500ns経過後にメモリの書き込みが行われており、そもそも1クロック内でコールバック処理が始まりもしない状況なのです。
このスレッドで興味深いのがどんなアプリケーションを作成しているのかということですね
ナノセコンドオーダーで調整しなければ上手くいかないというような状況は私の場合は余り想定してませんので
少し疑問なのがそのようなナノセコンドオーダーで調整できたとして、CPUに十分な余裕を持たせることができれば問題ないとは思いますが、なにか方向が間違っているような気がします(fujitaさんに怒られそうな気がしますが)
割り込みでトリガしてソフトウェアで書き込むというのはプロの世界?では普通に行うことですかね
割り込みでトリガしてDMACを利用するというのが普通ではないですか、それで大変興味深く伺っています。
fujita nozomu様
ご助言有難うございます。
>割り込みコントローラを設定して割り込みを禁止
についてですが、具体的には「External IRQ Driver」を追加するということでしょうか。ドライバを追加、プログラム中で、open(),disable()を呼び出した範囲では、動作は変わりませんでした。
>__disable_irq()を使用
こちらの関数を呼び出したところ、従来動作していたcallbackが呼び出されなくなりました。GPTのcallbackはIRQで実装されているという事でしょうか。
fijita nozomu様
三十年以上の前の事なので、記憶違いですね。歳なので思わず、言及してしまいました。
IKUZO様
ご助言有難うございます。初心者なもので、そもそも入口が間違っている可能性は大です。
アナログ入出力を5MHzのレートで行いたいだけです。入出力しているタイミングで行いたい条件判断は若干ありますが、ステップ数はわずかです。200nsの間に入力した値を配列にセット(もしくは配列から値を読みだして出力)するだけなので、callbackで処理できると思い、今は迷路にはまっています。
Urk said:コールバック
で
Urk said:アナログ入出力を5MHzのレート
うーむ、うなりますね、ほとんど無理でしょう、
240MHzを過信してはいけません
マニュアルにDMACの項目がありますから勉強してみてください。
IKUZO 様
そうなんですね。そういう意味では、240MHzを信じておりました。クロックで生じた割り込みで、プログラムカウンタやレジスタ等を退避して割り込みルーチン(callback)に飛び込むのに、数百nsも要するとは思いませんでした。
DMACについて勉強します。
DMAを用いて、試作プログラムが動き出しました。クロックの立ち上がりから、memory mapped された アナログ出力に70ns程の遅れで書き込みに行くことを確認できました。一桁違います。
表題の「gptのコールバック反応時間」が問題になるようなら、DMAを用いるべし、という結論ですね。
fujita nozomu様、IKUZO 様 貴重なご助言を頂きました。大変助かりました。有難うございます。