フォーラムへの返信
-
投稿者投稿
-
ご認識の通りとなります。
ADCIN14とADCIN15については、同時サンプリングしたい入力信号を使用しないモジュールでサンプリングすることで、同時サンプリングが可能になります。また、ADCIN14とADCIN15のAD変換を行うADCモジュールは
指定することも可能なのでしょうか?はい、可能です。
ADCIN14とADCIN15は全てのADCモジュールにつながっており、ADCモジュール側の設定でADCIN14またはADCIN15をサンプリング/変換することになります。ご理解の通り、TMS320F28377Sは4つのADCモジュールですので、同時サンプリングも4つとなります。
ADCIN14とADCIN15の例外とは、命名規則(ADCINxn)の例外を指しておりまして、信号としては他の入力と同じですので、他の入力と同時サンプリングは可能です。TMS320F28377Sには、4つのADCモジュールを搭載(ADC-A, ADC-B, ADC-C, ADC-D)しています。
このモジュール毎にサンプル回路が1つずつあり、それぞれ独立して動作することが可能です。
それぞれのADCモジュールのサンプリング開始トリガに同じ信号を指定することで、同時サンプリングが可能になります。データシート上で、ADCの入力ピンの名称は、ADCINxnというフォーマットで記載されています。
ADCINxn の x がモジュールを、<span style=”text-decoration: underline;”>n</span> がチャネル番号を示しています。
x がことなる信号でしたら、同時サンプリング可能です。
例)
ADCINA1 – ADCINC2
ADCINA2 – ADCINB2
ADCINC4 – ADCIND1
など例外として、ADCIN14とADCIN15は全てのモジュールに接続されている信号となっていますので、ご注意下さい。
ADC入力端子とADCモジュールとのつながりにつきましては、
データシートの図5-28. Analog Subsystem Block Diagram (176-Pin PTP)
に記載されておりますので、ご確認ください。NACKが検出されたときの処理ですが、ご検討頂いている処理で問題ございません。
お使いのサンプルコードでは、ARDYINT(Register-access ready condition)を有効にしており、ARDYINTはNACINTよりも優先度が高いため、ARDYINTがNACKINTに先立ち検出されます。
ARDYINTの処理ではNACKの受信判定を行っており、NACK受信時にはNACKINTフラグをクリアするとともにSTOP conditionを送信するように処理されております。
ここでNACINTフラグがクリアされるため、割り込みハンドラでI2CISRCを読み出しても、’2’が読み出せることはございません。
NACK受信を上位アプリで検出したい場合は、この割り込みハンドラのNACK検出時に何らかの変数・フラグへNACK検出状態をセットして上位アプリで参照するなど、ソフトウェアの追加をお願いいたします。最大周波数400MHzを超える設定をされた場合は、その設定に従った逓倍を実施します。
PLLで400MHz以内に収めるという処理はございません。PLLがロックしない(initSysPllで無限ループ)、システムクロックが規定(最大200MHz)外となりCPUが誤動作するなど不正動作の原因となりますので、PLL出力周波数には400MHz以内の設定をお願いいたします。
上記の設定例は
10MHzの水晶振動子を用いて
システムPLL出力として400MHzのクロックを生成した例で
宜しいでしょうか?
この後、2分周してシステムクロックとして200MHzとしている
との理解で宜しいでしょうか?ご認識の通り、システムPLLで10MHzを40倍して400MHzを生成し、2分周することで200MHzのシステムクロックとしています。
また、imult・fmult・PLLSYSCLKDIVの設定値の範囲の制限は
ございませんでしょうか?システムPLLの出力周波数には最大値が定義されています。値につきましては、データシート(JAJSEZ6F)の5.9.3.2.2 Internal Clock Frequenciesに記載されておりますのでご確認ください。
TMS320F28377Sでは、PLL出力周波数(f(PLLRAWCLK))は、最大400MHzとなります。
imult/fmult/PLLSYSCLKDIVの値ですが、そのままレジスタに反映される値となっており、それぞれTRMに定義されております。
imult : 2.15.10.6 SYSPLLMULT Register IMULTビット(0 – 127)
fmult : 2.15.10.6 SYSPLLMULT Register FMULTビット
00: Fractional Multiplier = 0
01: Fractional Multiplier = 0.25
10: Fractional Multiplier = 0.5
11: Fractional Multiplier = 0.75
PLLSYSCLKDIV:2.15.10.11 SYSCLKDIVSEL Register PLLSYSCLKDIVビット
1分周(設定値0)から126分周(設定値0x3F)まで設定可能生成される各クロックが許容値範囲内に収まっていれば、
良いと考えたら宜しいのでしょうか?はい、ご認識のとおりです。
C2000シリーズには、任意の倍率に設定可能なPLLが搭載されており、10MHzのクロック入力でも200MHzを生成可能です。
設定方法につきましては、Technical Reference Manual(SPRUHX5)の
2.7 Clocking
2.7.6 Clock Source and PLL Setup
に詳しく記載されておりますので、ご確認ください。C2000Wareのサンプルコードでは、PLL設定の関数が用意されております。
C2000Ware_1_00_05_00\device_support\f2837xs\common\source\F2837xS_SysCtrl.c
void InitSysPll(Uint16 clock_source, Uint16 imult, Uint16 fmult, Uint16 divsel)
この関数を使用する場合は、
clock_source = XTAL_OSC
imult = 40(0x28: IMULT_40)
fmult = 0(0x00: FMULT_0)
を設定いただくと、システムクロックに200MHzが生成されます。SPIモジュールで制御されるCS信号(SPISTEx)は1つしかありませんので、自動でCS信号を制御する場合は1対1になります。
CS信号にGPIOを使用してSPI通信の前後にソフトウェアでCS信号を制御することで、複数のスレーブに対し通信することが可能になります。ご検討のほど、よろしくお願いいたします。
C2000シリーズには、RTC機能は搭載されておりません。
時刻管理が必要な場合は、外部にRTC ICをご使用ください。
ご検討のほど、よろしくお願いいたします。
miyoさん
お問い合わせありがとうございます。
TMS320F28377Dの評価ボードは、上位製品であるTMS320F28379Dへ順次置き換えられており、現在TMS320F28377Dを搭載した評価ボードはございません。また、今後もリリースされる予定はございません。
TMS320F28379Dですが、TMS320F28377Dに対し、CLB(Configurable Logic Block)機能が追加されております。その他の機能、メモリなどは相違ありません。
CLB機能につきましては、EnDatやBiSSのようなアブソリュートエンコーダのプロトコルインタフェースをサポートする機能になります。
なお、CLB機能の利用に関しましては、controlSUITE内のPosition Managerソフトウェアパッケージにより提供されます。直接CLB機能を使用することはできませんのでご注意ください。
詳しい資料は、controlSUITE\lib\app_libs\position_manager\<version>\<protocol>\Doc にドキュメントがございます。以上、ご確認のほど、よろしくお願いいたします。
TMDSEMU100V2U-ARMの後継につきましては、以下の製品になります。
○XDS200 USB エミュレータ
http://www.tij.co.jp/tool/jp/tmdsemu200-uご確認のほど、よろしくお願いいたします。
nabuさん
書き込みにご利用いただいているPCアプリケーションは、Code Composer Studioでしょうか。それともUniflashでしょうか。
Uniflash v4をご利用の場合、デフォルトの書き込み設定では、ご指摘のエラーが発生するとのことです。
Uniflashでは書き込み時にプログラムの内部でGELというスクリプトを使用しています。
このGELスクリプトには、書き込み終了後に内部レジスタXAR0を参照するという記述がされております。
ところがUniflashが書き込み終了時にエミュレータ接続を切断するため、残りのスクリプトにてエラーが発生しているとのことです。スクリプトの記述に関しましては、Code Composer Studioの処理と共通のため、削除することは難しいとのことですが、Uniflashの設定にて書き込み終了後にスクリプトを終了させることで、エラーの表示を抑制することができます。
設定方法)
UniflashのProgramタブの「Run Actions」にある”Run Target After Program Load/Flash Operation”にチェックを入れます。Code Composer Studioをお使いの場合は、現象を確認できておりませんので、もうしばらくお待ち下さい。
以上、ご確認のほど、よろしくお願いいたします。
各演算については、高級言語では時間の定義がされておりませんので、アセンブラ命令レベルでの実行サイクルについて、説明いたします。
なお、数値につきましては、純粋な命令の実行サイクルとなっており、レジスタへのコピーなどのサイクル数は含まれません。F28M35H52C1には、FPUが搭載されておりますので、浮動小数点の加減乗算につきましては、以下の通りとなります。
1)float + float : 1 cycle
2)float – float : 2 cycle
3)float * float : 2 cycle
これらの命令の実行前には、各命令で使用するレジスタへ値が反映されるまでに4cycleの遅延が必要となります。
参考資料)TMS320C28x Extended Instruction Sets Technical Reference Manual浮動小数点の除算および三角関数演算につきましては、ソフトウェアライブラリにて実行されます。
コンパイラにて自動的にライブラリ(Run time support library:RTSライブラリ)の呼び出しが行われますが、RTSライブラリの実行速度については、定義されておりません。
標準ライブラリのほかに、FPU搭載C2000デバイス向けに三角関数および除算を高速化したライブラリ(fastRTS Library)が用意されており、このライブラリでは、以下のように実行サイクル数が定義されております。
4)float / float : 24 cycle
5)sin(float) : 41 cycle
6)cos(float) : 42 cycle
参考資料)C28x Floating Point Unit fastRTS Library整数の演算につきましては、浮動小数点と同様にアセンブラ命令の実行サイクルは以下のとおりです。
7)int + int : 1 cycle
8)int – int : 1 cycle
9)int * int : 1 cycle
参考資料)TMS320C28x CPU and Instruction Set Reference Guide整数の除算につきましては、RTSライブラリが使用されるため、浮動小数点の除算と同様に具体的な数値はありませんでした。
情報として不足しているものもございますが、ご査収のほど、よろしくお願いいたします。
はい、ご認識の通り、F28035をFlash ROMからブートする場合は、
GPIO34/GPIO37はHigh、TRSTはLow
として電源ON・リセット解除をしてください。以上、よろしくお願いします。
-
投稿者投稿