お世話になります。
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の変換時間となっていますが、そこはどうなのでしょう。
hiroyuki012 さん
1マイクロ秒は厳しいですね、A/Dコンバータ自体の変換レートが1Mspsあるのでしょうか?もし十分間に合っていたとしてもCPUを介在すると相当のCPUパフォーマンスが減ってしまうということになりはしませんか、私のお勧めするのは、外部バス経由でDMA転送するという方法です適当なパラレルIFのA/DコンバータをCPUの外部バス上に配線してしまえば、CPU内部バス上に影響を与えないので、理想的な処理が出来ると思います、A/Dコンバータの種類を十分選べば、配線は簡単になります、
内部クロックが200MHzでしたら1サイクル5nsですよね。 DTCレジスタがどのようなRAMに配置されているか不明ですが、内蔵RAMであればIバスで1φ R/WともにOKのはずです。
ADCが1us(2ch独立駆動なら500ns)で変換完了するのであれば、十分な時間があると思います。 DTC完了割り込みでDTCレジスタを再設定しても間に合いませんか?
(1us/5ns=200サイクルもかかりますか?)
そもそものS/Nは保たれているのかとか、プローブ効果は影響ないのかとか、いろいろ想像はつきませんが、 本件のボトルネックはADC時間(tCONV)だと思います。
見当違いでしたらご容赦ください。
>@chobichan様
ありがとうございます。SH7216の宣伝としては1usになっているのですが、「AD変換開始遅延時間」や「AD変換完了処理」などがあり、1usで変換処理を終えることは、実際には不可能のようです。カタログの「1us変換」という文言を見て、私も誤解しておりました。
>IKUZO様
ありがとうございます。ADコンバータ自体の変換時間は、1.3us~1.5us(IΦ:200MHz)です。そこで、2us間隔で交互に動作させて見かけ上で1usを実現しようとしています。ご提案のようにパラレル出力のADCを接続して外部RAMにDMA転送するのが、確実な解決方法と思います。ただ、内蔵ADの変換結果をDMA転送する方法で2us間隔のサンプリングは実現できているので、何とか1usにならないか、と考えておりました。
>Kon Nozomu(すと) 様
ありがとうございます。DTC転送情報は内蔵RAMに格納します。また、DTC転送自体は2us間隔であれば可能と考えております。ただDTCを使うとなると65536回が上限なため、1秒間続けることが不可能で、何か別の方法が必要ではないか、と考えているところです。ADC時間は、最大1.5usです。アナログ信号の質については、現在2us間隔でのDMA転送結果に異常が見られませんので、現状で問題ないと思います。
このハードウエアマニュアルはちょっと解りづらいですね。表 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であっていると思います。
1回のDTCでは65535回が限度ですが、ノーマル転送(65535回)を1ブロックとしてとらえて15ブロック+16975回で1000000回転送となります。
先ほどの投稿は上記内容の提案でした。
(DTCノーマル転送の再定義に1usもかかりますか?)