フォーラムへの返信
-
投稿者投稿
-
原因は、下記コードの5~7行目(コメント行)当たりと思います。
このコードは、以前 BSSクラスがリセット後に初期値なしグローバル変数が0に初期化されない
問題があって入れたものです。
今回これを外して、スタンドアローンで動作できるようです。ここで確認ですが、
1)BSSの初期値なしデータはリセット後に0に初期化されるように改善されたのでしょうか、
2)これは、判ればの話ですが、私が追加したコードは、以前にお送りしたコマンドファイルの指定で、ロケーション的に
壊していたエリアが有るのでしょうか、よろしくお願いします。
void main( ){
int i;
Uint16 *ebss_Ptr;
Uint16 status;// ebss_Ptr = (Uint16 *)&RamEBssStart;
// i = (int)&RamEBssSize;
// memset(ebss_Ptr, 0, i ); /* WORDでクリアする方法はあるか */
/* memset((Uint32 *)0x9000, 0, 0x1000 ); *//* WORDでクリアする方法はあるか */
bss_init();/* Initalized sections go in Flash */
.econst : >> FLASHF | FLASHG PAGE = 0
.switch : > FLASHD PAGE = 0
cmdファイルは、2年前ぐらいに収録されていたものを編集しています。
CLAのコードをゴーストセグメント化することや、CPU、CLAのデータセグメントの
分割、BSS、初期値ありデータを意識して編集していますが、
本来は、オリジナルを使用できれば使いたいとおもいています。
コマンドファイルは添付します。これを評価目的で設計したのが2年以上前ですので、このように配置しないと
上手くいかなかった考えたと思います。
添付は、メモリーマップ表です。現在のコマンドファイルとの相違は、下記セクションの記述がないことでしょうか、
念のためコマンドファイルも添付します。/* Initalized sections go in Flash */
.econst : >> FLASHF | FLASHG PAGE = 0
.switch : > FLASHD PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
Filter_RegsFile : > RAMGS0, PAGE = 1
SHARERAMGS0 : > RAMGS0, PAGE = 1
SHARERAMGS1 : > RAMGS1, PAGE = 1/* Flash Programming Buffer */
BufferDataSection : > RAMD1, PAGE = 1, ALIGN(4)Attachments:
resetからステップで実行したところ以下の部分で止まっていることが判りました。
コマンドファイルの変更の誤りで、配置されるべきデータが格納されていないのでしょうか、
よろしくお願いします。****************************************************************************
* IF cinit IS NOT -1, PROCESS CINIT INITIALIZATION TABLE *
****************************************************************************
MOV AL,#cinit
MOV AH,#hi16(cinit)
ADDB ACC,#1
B DO_BINIT,EQ ; if cinit < 0 (-1) no init tables先ほどの投稿で割込み要因のNACKは、再コンパイルして正しく検出されていることはわかりました。
NACKが検出された時の対処ですが、I2caRegs.I2CMDR.bit.STP = 1; ストップコンディションの生成
I2caRegs.I2CSTR.all = I2C_CLR_NACK_BIT; ステータスクリア
I2caRegs.I2CFFTX.bit.TXFFRST =1; 送信FIFOをクリアで宜しいでしょうか、
その後、EEPROMのチップが書き込み中であるため、チップビジーで有ることがわかりました。
この場合、サブアドレスを贈るとNACKが返されますが、このナックを割り込みで判定できると思い
I2CIER NACKを有効にしたところI2CISRCが3で検出されました。
思惑としては、2であると予想していました。コメントお願いします。
回答有難うございました。
評価 当初(2年前)、Device_cal()自体がサポートされていなかったようですが、
(正確には、 トリムデータが不備と聞いておりました)
シリコン・リビジョン C はサポートされているのでしょうか、
また、調整にうついてはこの記載ですか?
9.1.12.1 ADC Zero Offset Calibration
Zero offset error is defined as the difference from 0 that occurs when converting a voltage at VREFLO
(single-ended operation) or the difference from (maximum code/2) when converting ADCINxP = ADCINxN
(differential mode). The zero offset error can be positive or negative. To correct this error, an adjustment
of equal magnitude and opposite polarity is written into the ADCOFFTRIM register. The value contained in
this register will be applied before the results are available in the ADC result registers. This operation is
fully contained within the ADC core, so the timing of the results will not be affected and the full dynamic
range of the ADC will be maintained for any trim value.
よろしくお願いします。オペアンプは TI AMC1200 です。
信号が伝達されない件はこちらの評価ボードの半田が上手く載っていませんでした。
大変済みませんでした。最後に気になったのですが、トゲトゲした細いノイズが載り易いのですが、
内蔵のDACの関係があるかわかりませんが、
留意することはありますか
また、AC電源関係に採用を検討していますが、対ノイズ性はいかがでしょうか、
よろしくお願いします。以上、
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = TRIPIN4; とするならば
コンパレータ1と接続するには、以下のような解釈でよいのでしょうか、
EPwmXbarRegs.TRIP4MUX0to15CFG.bit.MUX0 = 1; /* MUX0を有効 */
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 00;
/* 4種類の信号から選択 Table 12-13. ePWM X-BAR Mux Configuration Table */
/* 00は 選択種別の1なのでCMPSS1.CTRIPOUTH コンパレータの正論理出力 */よろしくお願いします。
複数のターゲットファイルが存在していた為とわかりました。
回答有難うございます。
最後に、下記ダウンロードしたオブジェクトをデスアセンブルしたものですが、割り算やルート演算は、FPUもしくはTMUでを使用しているコードで間違いないでしょうか、
判断方法があればコメントお願いします。
メインプロセッサで、FPU、TMUを用いた少数点演算をしている最中に、割込みが発生してハンドラー内で異なった小数演算をしたことにより割り込み処理から戻った時に、影響(メインで計算していた途中のデータ)がでないことゆう認識でよろしいでしょうか、
コンパイルは正常にできました。
しかし、ダウンロードした直後は正常に動作しますが、
デバッガをランチせずに再起動(電源ON-OFF-ON)しますとつ次のように
リセットを繰り返します。なにか、RAMに転送できていないコードがあると思えます。
コンソールのコピー
Type ‘help’ for help.
NODEV>
USB Mass Storage Host program
Type ‘help’ for help.NODEV>
USB Mass Storage Host program
Type ‘help’ for help.NODEV>
以上、
-
投稿者投稿