お世話になります。
SH7216で1us間隔でAD変換して外部RAMに転送することを1秒(1000000回)行おうと思いました。
ですが、以下の理由から不可能と考えております。
・Iφを200MHzとしてもAD取得には1.3usを要するため、ADI0とADI1を交互に動作させる必要がある。
・2MHzのクロックをMTU2の別chに分岐して入力することで、立上りと立下りで1us周期を実現
立上り:MTU2, TRG0Aのインプットキャプチャ割込でADI0を起動してDTCで外部RAMに転送
立下り:MTU2 TRG1Aのインプットキャプチャ割込でADI1を起動してDTCで外部RAMに転送
・DTC転送回数は最大65536回のため、1秒間の動作は不可能。
このように、動作自体は可能であっても回数制限により1us間隔で1秒間のAD取得は不可能と
考えております。
私が何か勘違いをしており、「こうすれば可能だ」というご意見をお持ちの方、
いらっしゃいましたら教えて頂けませんでしょうか。
お忙しいところ恐れ入りますが、よろしくお願い致します。
投稿者です。以前同様の質問をしたのですが、別案を求めたく、今回の質問をしております。
oshiete.goo.ne.jp/.../8932888.html
多重投稿として不快に思われました方がおられましたら、お許し下さい。
SH7216のハードウエアマニュアルを読み始めたばかりなので勘違いしていると思われますが、
> Iφを200MHzとしてもAD取得には1.3usを要するため、
マニュアルにはAφを50Mとしたときに1ch辺り1μsの変換時間となっていますが、そこはどうなのでしょう。
>@chobichan様
ありがとうございます。SH7216の宣伝としては1usになっているのですが、「AD変換開始遅延時間」や「AD変換完了処理」などがあり、1usで変換処理を終えることは、実際には不可能のようです。カタログの「1us変換」という文言を見て、私も誤解しておりました。
>IKUZO様
ありがとうございます。ADコンバータ自体の変換時間は、1.3us~1.5us(IΦ:200MHz)です。そこで、2us間隔で交互に動作させて見かけ上で1usを実現しようとしています。ご提案のようにパラレル出力のADCを接続して外部RAMにDMA転送するのが、確実な解決方法と思います。ただ、内蔵ADの変換結果をDMA転送する方法で2us間隔のサンプリングは実現できているので、何とか1usにならないか、と考えておりました。
このハードウエアマニュアルはちょっと解りづらいですね。表 20.6 A/D 変換時間のAD変換時間の50n+15とか50n+45とかの15や45の説明が見つけられない。
各チャネルの変換時間は50サイクルは解りますが、その後の数字は何をしているのでしょう?
図 20.5 A/D_0 変換器の動作例 2であれば50サイクル毎にDMACへの要求が出そうにも思えますけれど。
変換要求からの待機時間にMIN:11サイクル、変換完了時間に4サイクル、都合15サイクルが1チャネルあたりの変換に加算される時間です。
hiroyuki012さんは1usの変換時間にこのオーバーヘッド(15×20ns(50MHz)=300ns)を加算されているのだと思います。
今回は外部要求からのADCのため、1.3usであっていると思います。
待機時間のTDは外部トリガーで最初の変換時のみ必要な時間で、それ以降は無視できるようです。
変換終了時間って連即変換の時に必要なのだろうか?
連即→連続
>Kon Nozomu(すと)様
ありがとうございます。
ある外部トリガから1us間隔のデータを取得するために、その外部トリガで
1MHzのクロック供給を開始してADTRGに入力することを考えておりました。
(現在は、この機構を2us間隔で動かしています)
表20.5の「A/D変換」が1us (TsplやTendを含まない時間)であれば、
・外部トリガをIRQに入力
・IRQ割込の優先順位を最高に設定
・IRQ割込割込処理内で「ADST = 1」
・外部トリガから「ADST = 1」までの遅延を測定して管理
なども、一つの方法かもしれません。
>ノーマル転送(65535回)を1ブロックとしてとらえて15ブロック+16975回で1000000回転送
>DTCノーマル転送の再定義に1usもかかりますか?
DTC転送終了時に割込を発生させて、その割込処理内でDTC転送設定を
行うということでしょうか。
試してみたいと思います。
>待機時間のTDは外部トリガーで最初の変換時のみ必要な時間で、それ以降は無視できるようです。
外部トリガによるAD変換とDMA転送は、外部トリガが2us間隔であれば動作していますが、
外部トリガを1us間隔にしても2us間隔でしかサンプリングしていないようです。
(変換後のデータとアナログ入力波形を比較して確認しました)
何か設定が間違っているためでしょうか・・・。
>変換終了時間って連続変換の時に必要なのだろうか?
図20.6を見ると、変換完了処理中にADDRの値が変わっていますので、
AD変換結果をADDRに転送している時間ではないでしょうか。
> 図20.6を見ると、変換完了処理中にADDRの値が変わっていますので、
> AD変換結果をADDRに転送している時間ではないでしょうか。
変換結果をデータレジスタに転送しているのは事実だと思うのですが、レジスタ→レジスタ間の転送に4サイクル時間、20ns×4の80nsは、そんなに掛かるのかなぁ?という感じですし、多分転送しながら変換開始するとかの処理のオーバーラップは十分可能なんではないかと勝手に想像していますが、中の人、助けてくれないかなぁ。