gptのコールバック反応時間

初心者です。

GPTタイマ(1周期:200ns)をPWMモードで利用しています。コールバックの中で、メモリに対する書き込み処理を行います。
ロジックアナライザで上記の処理のタイミングを測ると、GPTの立ち上がりタイミングからメモリの書き込み処理までの間に500ns程のタイムラグが生じており、間に合っていません。
どのようにすれば、応答時間を短くすることができるでしょうか。初心者故、GPTタイマの使い方がそもそも間違っているのか、GPTタイマの限界なのか、見当もついていません。お力添えの程よろしくお願いします。

ターゲットはS7G2です。

Parents
  • 5MHzの速度で割り込み処理されたいということですか?

    S7G2 は 240MHzのCortex-M4だそうですが、200nsの期間では 48クロック分の命令しか実行できないので大したことはやれそうにないですね。

    > どのようにすれば、応答時間を短くすることができるでしょうか。

    割り込み処理の内容を軽くするだとか、割り込みをやめてポーリングにするだとか方法はいくつか考えられます。

  • 早速のご回答有難うございます。

    言葉足らずで、状況をうまく説明できておらず、申し訳ありません。

    GPTのcallbackの最初の命令がメモリへの書き込み(2バイト)なのですが、このメモリ書き込み信号とGPTのクロックを計測しています。クロックの立ち上がりから約500ns経過後にメモリの書き込みが行われており、そもそも1クロック内でコールバック処理が始まりもしない状況なのです。この500nsという値は、試行錯誤でクロックを徐々に遅くし、1クロック内で処理が始まるようにするためにはクロックの周期500nsにまで落とす必要があった事から、500nsという数値を出しています。

    >> どのようにすれば、応答時間を短くすることができるでしょうか。

    上記については、クロックの立ち上がりからcallbackを起動するまでの処理時間を短くしたいという意図で書きました。

    上記が内部でどのように行われているか、知識がありませんが、GPTタイマにcallbackを書いても、IRQを用いて、IRQのcallbackに処理を書いても状況は改善しませんでした。

    >割り込みをやめてポーリングにする

    仰っている意図と同じか、心もとないですが、callbackを利用するのではなく、クロックのポートを観察して、前値=LOWかつ今回値=HIGHの条件判断で、メモリ書き込みを行う処理を書きました。やはりメモリに書き込みに行くまでに、約500nsの遅延が発生しております。

    上記で、「メモリ書き込み」と申している、メモリは「memory mapped io」で、計測している信号はCS(Chip Select?)です。

Reply
  • 早速のご回答有難うございます。

    言葉足らずで、状況をうまく説明できておらず、申し訳ありません。

    GPTのcallbackの最初の命令がメモリへの書き込み(2バイト)なのですが、このメモリ書き込み信号とGPTのクロックを計測しています。クロックの立ち上がりから約500ns経過後にメモリの書き込みが行われており、そもそも1クロック内でコールバック処理が始まりもしない状況なのです。この500nsという値は、試行錯誤でクロックを徐々に遅くし、1クロック内で処理が始まるようにするためにはクロックの周期500nsにまで落とす必要があった事から、500nsという数値を出しています。

    >> どのようにすれば、応答時間を短くすることができるでしょうか。

    上記については、クロックの立ち上がりからcallbackを起動するまでの処理時間を短くしたいという意図で書きました。

    上記が内部でどのように行われているか、知識がありませんが、GPTタイマにcallbackを書いても、IRQを用いて、IRQのcallbackに処理を書いても状況は改善しませんでした。

    >割り込みをやめてポーリングにする

    仰っている意図と同じか、心もとないですが、callbackを利用するのではなく、クロックのポートを観察して、前値=LOWかつ今回値=HIGHの条件判断で、メモリ書き込みを行う処理を書きました。やはりメモリに書き込みに行くまでに、約500nsの遅延が発生しております。

    上記で、「メモリ書き込み」と申している、メモリは「memory mapped io」で、計測している信号はCS(Chip Select?)です。

Children
  • ライブラリか何かで提供されてる割り込み処理の中から呼ばれるよう登録したコールバック関数が割り込み処理の中から呼ばれるまでに 500ns 掛かっているということだと思います。その辺りをスリム化すればレスポンスの向上は期待できますね。

     ポーリングでも 500ns の遅延が起こるということですが、恐らくは割り込み処理が先に呼ばれてそれが終了するまでに 500ns 程掛かっているのではないかと思います。割り込み処理を禁止してみてはどうでしょうか。