フォーラムへの返信
-
投稿者投稿
-
satoshiさん
BORの無効化はどのようにすればよいのでしょうか。
VMONCTLレジスタを直接アドレス参照で変更いただくことで、VMONCTLレジスタへアクセスすることができます。
*(Uint16 *)(0x0005D700 + 0x70) = 0x10;
あるいは、f28004x_analogsubsys.hを修正いただき、struct ANALOG_SUBSYS_REGS にVMONCTLレジスタを追加頂く方法もございます。
- VMONCTLレジスタのビット定義
struct VMONCTL_BITS { // bits description
Uint16 rsvd1:8; // 7:0 Reserved
Uint16 BORLVMONDIS:1; // 8 BORL disable on VDDIO.
Uint16 rsvd2:7; // 15:9 Reserved
};union VMONCTL_REG {
Uint16 all;
struct VMONCTL_BITS bit;
};- struct ANALOG_SUBSYS_REGSへの追加
struct ANALOG_SUBSYS_REGS {
:
union ANAREFCTL_REG ANAREFCTL; // Analog Reference Control Register
Uint16 rsvd4[15]; // Reserved
:↓(太文字の箇所を追加・変更してください)
struct ANALOG_SUBSYS_REGS {
:
union ANAREFCTL_REG ANAREFCTL; // Analog Reference Control Register
union VMONCTL_REG VMONCTL; // Voltage Monitor Control Register
Uint16 rsvd4[14]; // Reserved
:レジスタビューでは参照することができませんが、Expressionsビューでアナログサブシステムレジスタ(AnalogSubsysRegs)を設定することで、レジスタ設定値を参照可能になります。
Expressionsビュー内の「Add new expression」をクリックの上、”AnalogSubsysRegs”と入力いただくことで、参照できますので、お試しください。以上、ご確認のほど、よろしくお願いいたします。
amatsu1さん
ご確認ありがとうございます。
「その後デバッカを起動」とは具体的にはどのようなことを指しておりますでしょうか。
CCS上で、F11を押してデバッグ状態にすることを指しております。
引き続き、ご確認のほど、よろしくお願いいたします。TIボードではないですが、弊社の同じ基板で手付かずのものではソフト書き込み・デバッグが可能です。
とございますが、問題の発生するボードは、何かしらの改造後に動作が問題が発生するようになったのでしょうか。
あるいは正常に動作していたときのデバッグ・評価において、動作中の電源挿抜などTMS320F28027デバイスが損傷するような状況はありませんでしたでしょうか。以上、よろしくお願いいたします。
amatsu1さん
Error -1135については、F28027のC28xコアへの接続が何らかの要因により妨げられ、デバッグ用のJTAG通信が正常にできていない状態を示しております。
TI Resource Explorer – Debugging JTAG – C28x the debug probe reported an error上記URLにおいて、Error -1135に関連するE2Eスレッドもいくつか紹介されております。
これらをご一読いただき、当てはまる問題がないかご確認いただけますでしょうか。なお、上記URLからリンクされるE2Eでは、以下の内容の確認を行われておりました。
・問題はTI社の評価ボード(LaunchpadやcontrolCARD)でも発生しますでしょうか。
・TMS320F28027への電源供給(電圧など)は安定しておりますでしょうか。
・クロックは正常に出力されて、TMS320F28027へ供給できておりますでしょうか。
・Boot ModeをSCI-Boot modeまたはWait Modeに変更してから電源を投入し、その後デバッガを起動できますでしょうか。
・デバッガ起動時に、TMS320F28027のTRSTは正しく動作しておりますでしょうか。(LowまたはHighに張り付いていないでしょうか)
・デバッガ起動時または未起動時にXRS信号はどのような挙動になっていますでしょうか。ご確認のほど、よろしくお願いいたします。
satoshiさん
`if(a > b) a = b;
のようなコードをコンパイルすると、
a, bがfloat32の時はMAXF32命令に生成されますが、
a, bがint16の場合はCMPL命令とMOV命令が生成されています。a, bがint16の場合、MAX命令が生成されて欲しいのですが、
どのように設定、コーディング等すればいいのでしょうか。C2000シリーズのコンパイラには、組み込み(Intrinsics)関数がございます。
この中に、MAX命令を出力する関数が用意されておりますので、こちらをご利用いただけますでしょうか。int __max(int dst, int src); // If src > dst, copy src to dst
Intrinsics関数には、上記の他にも色々な最適化に有用な関数が用意されております。
コンパイラのユーザーズガイドのTable 7-6に一覧がございますので、必要に応じてご参照いただけますでしょうか。ご確認のほど、よろしくお願いいたします。
amatsu1さん
ちなみに、演算速度を速める他の方法として、変数のIQ型のグローバル宣言の部分について、
16bitシフトした値をlong型で宣言した方が速くなるような気がしているのですが、
それに関しまして見解をご教示願います。こちらは、_IQ(…)で定数を定義(例:#define MAX_CNTVAL _IQ(414))するよりも、long型の変数として定義(例: long MAX_CNTVAL = (long)(414 << 16)としたほうが実行速度が早くなるのではという質問でしょうか。
C2000のアセンブラで考えた場合、演算対象が定数と変数(メモリアクセス)では実行サイクル数は変わりませんので、どちらの定義でもそれほど変化はないのではと考えております。しかし、コンパイラの最適化(速度有優先、サイズ優先)により、場合によっては違いが出てきますので、一概にどちらが早いということはコメントすることができません。実際に測定いただくことをお薦めいたします。
ご確認のほど、よろしくお願いいたします。
amatsu1さん
①以下のようなコードを書いたところ、演算時間が3.7usでした。
処理時間をさらに早くする方法について、ご教示願います。コードを確認させていただきましたが乗算(__IQmpy)に関しましては、Intrinsic関数をご利用頂いておりますので、これ以上の高速化は難しいです。
コードの後半で、最大値と最小値の判定を行っていますが、次のIntrinsic関数がご利用いただけるのではないかと考えます。
__IQsat( long A, long max, long min );NxtCntVal_Ch1=((NxtCntVal_Ch1 > MAX_CNTVAL) ? MAX_CNTVAL: NxtCntVal_Ch1);
EPwm3Regs.CMPA.all=((NxtCntVal_Ch1 < MIN_CNTVAL) ? MIN_CNTVAL: NxtCntVal_Ch1);__IQsat関数をご利用いただくと、上記2行は「__IQsat(NxtCntVal_Ch1, MAX_CNTVAL, MIN_CNTVAL);」の1行で記述でき、かつアセンブラコードも次の3命令に集約されますので、実行速度の改善につながるものと思います。
MOVL ACC, NxtCntVal_Ch1
MINL ACC, MAX_CNTVAL
MAXL ACC, MIN_CNTVAL②ADCCTL1レジスタのINTPULSEPOSについてですが、SOC0~SOC5のラウンドロビンでSOC5時にINT pulseを発生させる場合、
INTPULSEPOS=0とすると、SOC5開始時にINT pulseが発生するという認識でよろしいでしょうか。INTPULSEPOSビットにつきましては、割込み信号(ADCINTx)の制御ではなく、ADC内部の変換完了信号(EOC)パルスの生成タイミングを設定します。INTPULSEPOS=0の場合は、EOCは各SOC動作時のサンプリング終了後(AD変換前)にEOCパルスが発生し、INTPULSEPOS=1の場合は、各SOC動作時のAD変換終了後にRESULTレジスタへ変換データを格納したあとにEOCパルスが発生します。
データシート(SPRS523)のFigure 6-21.(INTPULSEPOS=1)、Figure 6-22. (INTPULSEPOS=0)にタイミングチャートがございますので、ご確認ください。
※タイミングチャートでは、最初のEOCパルスでCPUへの割込み(ADCINT)を発生させています。EOCパルスは全てのSOC動作で発生しますので、SOC5の変換開始時にADC変換割込みを発生させたい場合は、INTPULSEPOS=0として、INTSELxNyレジスタにEOC5のみを選択していただくことで対応できると思います。
ご確認のほど、よろしくお願いいたします。
amatsu1さん
※新規のお問い合わせにつきましては、新しいトピックにて投稿いただけますでしょうか。
※解決済みのトピックに追加でお問い合わせいただいた場合、対応が遅れる場合がございます。
※お手数ではございますが、ご協力いただけますよう、よろしくお願いいたします。①デバッグ時にHRPWMのキャリブレーション部分でフリーズしてしまうのですが何故でしょうか。
なお、本部分をコメントアウトするとHRPWMが正常に動作します。
また、HRPWMを動作させてからキャリブレーションをするよう順序を変更してもフリーズは起きてしまいました。
while(HR_Calib_status==SFO_INCOMPLETE){
HR_Calib_status=SFO();
}記述内容から、最初のキャリブレーションかと思います。この時点では、HRPWMを動作させる必要はありませんが、クロックの供給は必要です。SysCtrlRegs.PCLKCR0.bit.HRPWMENCLKは’1’に設定頂いておりますでしょうか。
また、リンク頂いているライブラリは、F28027用のライブラリ
<C2000ware>\libraries\calibration\hrpwm\f2802x\lib
の SFO_TI_Build_V6.lib または SFO_TI_Build_V6b.lib をご利用頂いておりますでしょうか。
HRPWMにつきましては、サンプルプロジェクトが以下に用意されております。
<C2000ware>\device_support\f2802x\examples\structs\hrpwm_duty_sfo_v6
<C2000ware>\device_support\f2802x\examples\structs\hrpwm_mult_ch_prdupdown_sfo_v6
こちらのプロジェクトを参考に、設定値をご確認いただけますでしょうか。②PieVectTable.XINT1 =”自分でつけた命令名”;
としておいてから、
interrupt void “自分でつけた命令名”(void){}
を定義しておりますが、本割り込みに入らずに、
DSP2802x_common/sorce/DSP2802x_Default.cのinterrupt void XINT1_ISR(void)
{}に入ってしまいます。何故でしょうか。以下、ご確認いただけますでしょうか。
- PieVectTableはEALLOWプロテクトがかかっています。
PieVectTable.XINT1 =”自分でつけた命令名”; を実行前にEALLOW命令を実行いただいておりますでしょうか。 - PieVectTableはInitPieVectTable()によりデフォルト設定(XINT1_ISR)に設定します。
ユーザー関数を設定後に、InitPieVectTable()を実行されていないでしょうか。
③ブレイクポイントの数ですが、1つ以上打つとエラーが出てしまいます。増やせないでしょうか。
申し訳ありません。TMS320F28027ではハードウェアブレークポイントは2つまでとなっております。FLASH ROM上のソフトウェアに対してブレークポイントを設定する場合は、ハードウェアブレークポイントを利用するしかなく、この数は増やすことができません。1つ以上とございますが、他に設定されている箇所はございませんでしょうか。CCSのViewメニュー→Breakpointsを選択していただくと、設定中のブレークポイントの一覧をご確認いただけます。また、この画面から、ブレークポイントを削除ではなく、チェックボックスのOn/OffによりEnable/Disableを設定することが可能になっております。
④リンカコマンドファイルとしてF28027.cmdを指定している状態で、
#pragma CODE_SECTION(Xint1Isr,”.TI.ramfunc”);としてから、
memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(Uint32)&RamfuncsLoadSize);
とたところ、RamfuncsLoad Sizeが外部で宣言されてないというようなエラーが出た為、
以下のように変えました。
extern Uint16 RamfuncsLoadEnd;→Uint16 RamfuncsLoadSize;
エラーが出ずに、正常に動作しているように見えるのですが、問題ないでしょうか。
なお、CCS8.2を使用しております。CCS8.2に付属しているF28027.cmdでは、
LOAD_END(_RamfuncsLoadEnd)
と定義されておりますが、C2000wareのF28027.cmdでは、
LOAD_SIZE(_RamfuncsLoadSize)
にて定義されております。
C2000wareのリンカコマンドファイル(F28027.cmd)をお使いの場合は修正いただいた内容で問題ございません。以上、ご確認のほど、よろしくお願いいたします。
am79q021さん
CCSは現在version9までリリースされておりますが、BLE-STACKのインストール方法の資料アップデートはございません。
CCSv6とCCSv9の差につきまして、各種設定の方法については、ほぼ変わりありませんので、CCSv9でも同じ手順でインストールしていただけるものと考えております。
ご確認のほど、よろしくお願いします。
- この返信は5 年、 7 ヶ月前に Yojiro さんが編集しました。
am79q021さん
CCSをMacOSへオフラインインストールを実施する際に、管理者権限のアカウントで実施されておりますでしょうか。管理者権限を持っていないアカウントでインストールされる場合、以下のコマンドによりファイル属性を変更してインストールする必要があるとのことです。
xattr -r -d com.apple.quarantine ccs_setup_7.1.0.00016.app
(ファイル名はインストールされるファイル名に変更ください)変更されない場合はオフラインファイルが参照できず、オンラインインストーラとして動作するとのことです。
以下、CCSのダウンロードサイトに記載されております注意文を記載させていただきますので、合わせてご確認ください。
Mac Users Please note that only microcontroller and connectivity devices are supported on Mac. Processors devices are not support. See MacOS Host Support CCSv8 for more information. <span style=”text-decoration: underline;”>Also if you do not have adminstrative rights on your Mac then you will need to run the installer with a command that looks like this: xattr -r -d com.apple.quarantine ccs_setup_7.1.0.00016.app (replace the filename with the version you are using). If you do not do that then MacOS will copy the executable to another folder and run it from there, as a result the installer will not be able to find the offline files and will run as a web installer.</span>
http://processors.wiki.ti.com/index.php/Category:Code_Composer_Studio_v7#Download
ご確認のほど、よろしくお願いいたします。
mickey.mouse様
CLAにフィードバック用のコードを記述しましたが、メインプロセッサーの様に
RUN→Clock メニューを使うように簡単にステート数を測定できないでしょうか、
よろしくお願いします。CLAはメインプロセッサにある動的な実行ステート数の測定機能には対応しておりません。
実行時間を計測するには、お手数ですがGPIOを使用してオシロスコープなどで実時間を測定していただけますでしょうか。演算で 商(/)を求めるなど昔にはCLA Math Libraryがあったと思いますが、
こちらの定義が無くても演算の速度は変わらないでしょうか、CLA Math Libraryを定義しない場合、標準ライブラリが使用されますが、標準ライブラリはC言語で記述されており、CLAのパフォーマンスを十分に活用できません。そのため、CLA Math Libraryを使用していただいたほうが、演算速度は早くなります。
標準ライブラリのベンチマークはございませんが、CLA Math Libraryを使用いただいた場合のベンチマークがCLA Math LibraryのUser’s Guide 「6章 Benchmarks」にございますので、参考にしていただけたらと思います。
CLA Math LibraryのUser’s Guideは、C2000Wareの .\libraries\math\CLAmath\c28\docs にございますので、ご確認ください。以上、ご確認のほど、よろしくお願いいたします。
hatoさん
申し訳ありませんが、CC3135のUARTまたはSPIのバイナリレベルのコマンドインタフェース仕様は資料として公開されておりません。
SimpleLink SDK WiFi Pluginに制御コマンドを抽象化した関数I/Fが定義されておりますので、こちらのプラグインをベースに移植していただくことになります。
関数I/F仕様や移植方法につきましては、
CC3x20, CC3x35 SimpleLink™ Wi-Fi Programmer’s Guide
または
TI-Resource Explorer – SimpleLink SDK WiFi Pluginに記載されておりますので、ご参照いただけますでしょうか。
ご確認のほど、よろしくお願いいたします。
satoshiさん
データシートに記載されている図5-50のCTRIPxはCOMPxINVが0(そのまま出力)、COMPCTL[CTRIPxSEL]がASYNCH(0)のときの値になります。
COMPHYSの設定は、コンパレータ回路(COMPH/COMPL)のみに関わってくる部分で、コンパレータはヒステリシス設定に従い、0または1を出力します。COMPxINVやデジタルフィルタはヒステリシス制御後の出力結果に反映されます。
ご確認のほど、よろしくお願いいたします。
MSP430F5529 LaunchpadとMSP430WareのRTC_Aサンプルプロジェクト(rtc_a_ex1_calendermode)で、動作中のデバッガ接続を確認いたしましたが、RTCのカウンタレジスタは継続した数値が確認できました。従いまして、こちらの方法でも、レジスタが初期化されるということはございません。
確認いただいているファームウェアにつきまして、一度上記サンプルプロジェクトのファームウェアにてご確認いただけないでしょうか。
また、このサンプルプロジェクトでは、ウォッチドッグタイマを停止していたので、停止処理を削除して確認したところ、カウンタレジスタは設定値以外の値となっておりました。
問題の切り分けのために、ウォッチドッグタイマを停止していただくか、タイムアウト時間を大きくしていただきご確認いただけないでしょうか。ご確認のほど、よろしくお願いします。
kkkさん
ご利用のマイコンはMSP430でよろしいでしょうか。
MSP430の場合は、デバッガ接続時にリセットせずに処理を継続させた状態でCCSを起動することが可能です。
そのためには、以下の設定を行ってください。
- 新規にTarget Configuration Fileを作成します
- CCSの「View」メニュー→「Target Configurations」を選択して、Target Configurationsビューを表示します
- Target Configurationsビューの上部にある”New Target Configuration File”ボタンをクリックして、作成ダイアログを表示します
- 固有のファイル名を指定して、”Finish”ボタンをクリックします。これにより、Target Configurationsビューのリストに指定したファイルが表示されるとともに、Editビューに詳細情報入力画面が表示されます
- ご利用のデバイスを選択して、ファイルを保存します
- Target Configuration Fileの設定を変更します
- Target Configurationsビューのリストから先程作成したファイルを選択し、右クリックメニューから”Properties”を選択します。この操作でプロパティダイアログが表示されます。
- プロパティダイアログの”Program/Memory Load Options”画面にて、次の項目のチェックボックスを外します
・ Connection Options→Halt the target on a connect
・ Reset the target on a program load or restart
- 同ダイアログの”Auto Run and Launch Options”画面にて、次の項目のチェックボックスを外します
・ Auto Run Options → On a program load or restart
・ Auto Run Options → On a reset
- “Apply and Close”ボタンをクリックして、設定を保存します
- デバッガの起動
- 実装基板とPCをエミュレータ(MSP-FET)で接続してください。
- Target Configurations ビューのリストから先程のファイルを選択し、右クリックメニューから”Launch Selected Configuration”を選択します。
この操作により、PCとエミュレータの通信が開始され、CCSはデバッグビューになりますが、まだマイコンとは接続されていません - そのまま、Menuボタンにある”Connect Target”ボタン(下図の矢印)をクリックします。
この操作により、エミュレータとマイコンが接続されますが、上記の設定により実行状態を維持します。下図のDisconnected:UnknownがConnecting: Runningに変われば、接続しています。
- Pauseボタンが有効になりますので、Pauseボタンにより一時停止いただければ、メモリ確認、レジスタ確認が可能となります。
なお、この状態ではプログラム情報が読み込まれていませんので、ソースコードの表示が行えません。(レジスタアドレス情報はTarget Configuration Fileのデバイス情報から取得されます)
「Run」メニュー→ Load → Load Symbols からマイコンに書き込まれているoutファイルを指定いただくと、シンボル情報のみロードされ、ソースコードが表示されます。
ご確認のほど、よろしくお願いいたします。
amatsu1さん
①>TMS320F28027のTUEについては、
TUEとは何でしょうか?TUEとは、総合未調整誤差(Total Un-adjusted Error:TUE)のことになります。ADCのデータシートでは、エラーに関して、オフセットやゲイン・INLなど個別に記載されています。これらのエラーを全て掛け合わせたときに発生しうる総システム誤差の比率を表すものになります。
以下のサイトに詳しい内容が記載されておりますので、ご参照いただけますでしょうか。- TI社技術情報:ADC精度Part2: 総合未調整誤差(TUE)について
http://e2e.ti.com/blogs_/japan/b/analog/archive/2016/12/15/adc-part-2-tue
②>起動時に一度Device_cal関数を実行した場合では、±45.0LSBとなります。リファレンス入力も含めて周期的なキャリブレーションを実施いただくことで、±9.2LSBとなります。
TRM(テクニカルリファレンスマニュアル)を拝見しますと、P54の中ほどにDevice_calはBoot時と通常動作時に自動的に呼び出されるとございます。すなわち、特に何もせずとも±9.2LSBを実現できると考えて宜しいでしょうか?以前の投稿にも記載しておりますが、Device_cal関数を呼び出すだけでは、±45.0LSBになります。
以下のE2Eスレッドの「Requirements:」に記載されているように、定期的(数秒に1回程度)に外部のリファレンス電源などを使用してゲインのキャリブレーションを実施していただくことで初めて±9.2LSBを実現することができます。
http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/587441/2157843#2157843③HRPWM使用時、PCLKCR0のHRPWMENCLKは1にしなくても良いのでしょうか?
HRPWM仕様時は、PCLKCR0のHRPWMENCLKは1に設定してください。
④VSSAとVSSが接続かつVDDAとVDDIOが接続の状態でADを使用するとき、internal reference voltageとexternal reference voltageのどちらが良いでしょうか。
データシートのTable 6-26. ADC Electrical Characteristicsに記載されている通り、External ReferenceのほうがInternal referenceより変換誤差が少なくなります。また上記に記載しておりますゲインのキャリブレーションも検討される場合は、External Referenceをお薦めいたします。
⑤TRM P143,144のPIE MUXed Perpheral Interrupt Vector Tableにて、ADCINT1,2が違うアドレスで2箇所あるのは何故でしょうか。
PIEベクタテーブル(INTx.y)のなかで、x,yの数値が小さいほど割り込みの優先度が高くなっています。
設計依存にはなるのですが、ADC変換完了割込みを最優先で処理したい場合には、INT1.1/INT1.2という最優先で処理されるベクタに割り当てられています。システム設計において必要に応じて使い分けていただくことになります。⑥TRM P333にはHRPWMの使用推奨条件が250kHz以上と記載がありますが、ソフトウェア開発入門 P126には60kHz以上と記載があります。どちらが正しいでしょうか。
この記述ですが、一般論として250kHz以下のPWM周期では高分解能PWMは必要ないということが記載されており、使用条件を記述しているものではございません。Table 4-1ではPWM周期20kHzの例も記載されております。
またデータシートでもHRPWMに関しての最低周波数の記載もございませんので、必要に応じてHWPWMをご利用いただければと思います。ご確認のほど、よろしくお願いいたします。
-
投稿者投稿