ホーム フォーラム Texas Instruments マイコン C2000 電源ON後のXINTF機能使用(CSアクセス付近)でDSP動作停止発生

このトピックには6件の返信が含まれ、2人の参加者がいます。6 年、 2 ヶ月前 knabe さんが最後の更新を行いました。

7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #3158 返信

    knabe
    参加者

    電源ON後のXINTF機能使用(CSアクセス付近)でDSP動作停止発生

    デバイス型番:TMS320-F28335

    お手数を掛けますが、以下の問題に対する知見があれば教えて下さい。

    TMS320-F28335を採用した試作基板で外部インターフェース機能(XINTF)を使用しているが、
    電源OFF⇒ONすると数回に1回(10%程度)の頻度でDSP停止(以降の処理に進まず)が発生します。
    発生箇所をGPIOを使用して調査すると、XINTF機能の初期化(ウェイト設定など)を行った後に、
    各機能(ADC、DACなど)のレジスタ設定処理付近(ChipSelect信号出力付近)でDSPが停止
    している様子で、再度リセット信号入力を行わないと復旧出来ない状態になってしまいます。
    #whileループなど無限ループやメモリアクセス違反、該当エラッタなど無い事は確認済み

    CCS-Ver7デバッガでは同一の発生していないのですが、外部インターフェース機能(XINTF)
    の初期化(ウェイト設定など)を行わずに、各機能(ADC、DACなど)の初期化でレジスタ設定
    (ChipSelect信号出力)を行う事で発生する動作異常(プログラムカウンタ暴走)に挙動が
    似ていることから、外部インターフェース機能の初期設定(XINTF)の初期化(ウェイト設定
    など)が正常完了していない可能性があると考えていますが、確認方法や対策などが思いつか
    ない状況で非常に困っています。

    なお、本現象は複数の基板(同じ回路の別基板、類似回路の別基板)で発生しているが、
    DSPに供給している3.3V、1.8V、リセット信号などにはサージや瞬断などは発生しておらず、
    問題ありませんでした。

    発生箇所の確認時に使用したコードの簡単な内容を添付しておきます。
    /*——————————————————————*/
    volatile struct strAcuDacRegMemoryMap * const XINTF_DacBusAccess
    = ( struct strDacRegMemoryMap *)0x004000;
    void main( void )
    {
    /* GPIO設定※詳細については記載省略 */

    /* XINTFのアクセスタイミングなど設定※詳細については記載省略 */

    GpioDataRegs.GPASET.bit.GPIO12 = 0;
    asm(” RPT #8 || NOP”);

    GpioDataRegs.GPASET.bit.GPIO12 = 1;
    asm(” RPT #8 || NOP”);

    /* DSP動作しなくなる */
    XINTF_DacBusAccess->strDac8728.ConfReg.u16All = 0x8180U;

    asm(” RPT #8 || NOP”);
    GpioDataRegs.GPASET.bit.GPIO12 = 0;
    }
    /*——————————————————————*/
    デバイスの型番:TMS320-F28335、開発環境CCS-Ver7.4.0.00015

    お手数ですが、ご回答のほど宜しくお願い致します。

    #3159 返信
    Yojiro
    Yojiro
    従業員

    お問い合わせいただきました件ですが、以下の点をご確認いただけますでしょうか。

    1.パワーONおよびOFF時のXRS信号について
    TMS320F28335のパワーONおよびOFF時のXRS信号の制御について、以下の記載がございます。
    TMS320F28335データシート(SPRS439) 5.9.2 Power Sequencing

    There are some requirements on the XRS pin:

    1.  During power up, the XRS pin must be held low for tw(RSL1) after the input clock is stable (see Table 5-7). This is to enable the entire device to start from a known condition.
    2.  During power down, the XRS pin must be pulled low at least 8 μs prior to VDD reaching 1.5 V. Meeting this requirement is important to help prevent unintended flash program or erase.

    こちらの条件は満たしておりますでしょうか。

    2.電源ON後のXINTF設定に関するErrata

    TMS320F28335のエラッタ(SPRZ272)に電源ON後のXINTFモジュールの初期化時にCPUがハングアップするという問題点が記載されております。

    Advisory Memory: Possible Incorrect Operation of XINTF Module After Power Up

    こちらのワークアラウンドは対応頂いておりますでしょうか。

     

    ご確認のほど、よろしくお願いいたします。

    #3160 返信

    knabe
    参加者

    回答、ありがとうございます。

    TIのホームページにてエラッタ確認していたつもりだったのですが、
    SPRZ272.pdfについて確認出来ていませんでした。

    >1.パワーONおよびOFF時のXRS信号について
    >2.電源ON後のXINTF設定に関するErrata
    SPRZ727の『 XINTF Rougue Write for Back-toback Accesses 』について
    電気回路を確認したところ、ディレイ信号対応が行われていませんでした。

    ご指摘頂いた『1』と『2』について確認を行い、結果を再度記載したいと思います。

    #3164 返信
    Yojiro
    Yojiro
    従業員

    ご確認のほど、よろしくお願いいたします。

    なお、はじめに投稿いただいたフォーラムは、インタフェース関連のデバイスフォーラムとなっております。

    先程、こちらのスレッドを、マイコン->C2000のフォーラムに移動いたしました。

     

    以上、よろしくお願いいたします。

    #3196 返信

    knabe
    参加者

    >1.パワーONおよびOFF時のXRS信号について
    TMS320F28335の3.3V,1.8V用に、LDOのTPS703を使用しております。
    電源OFF時のLDOリセットLOWタイミングが、データシートによると
    1.7V(95%)に達した時と記載されており、問題ないと思われます。
    波形を確認した結果も問題ありませんでした。

    >2.電源ON後のXINTF設定に関するErrata
    本フォーラムにて教えて頂いたエラッタ対策を行ったのですが、正常動作しなかった※為、
    “SystemControl_and_interrupts_sprufb0d.pdf” の “Figure 26. Watchdog Module”を
    参考にして待機(512 OSCCLKs)したところ正常に動作して問題も発生しなくなりました。

    ※ウォッチドッグによるリセットが発生し続けた

    以下のようなソースコードで対応を行ったのですが、何か問題に気付かれた場合には
    お手数ですが、ご指摘のほど宜しくお願い致します。

    /*——————————————————————————*/
    /* WDT無効、または、WDTによるリセット処理 ※100MHz(5逓倍で動作) */
    /*——————————————————————————*/
    void
    fDisableDogOrResetByWdt( void )
    {
    EALLOW;

    /* 『 Generate Output Pulse 』の為に、OSCCLKで512クロック以上待機!! */
    {
    U16 loop_cnt; /* 待機カウント用 */

    /* 512OSCCLKs≒512NOP×5※=2560NOP≒7NOP×366回 */
    for( loop_cnt=0U; loop_cnt<366U; loop_cnt++ ) /* ※20MHz×5逓倍なので『 5倍 』!! */
    {
    /* ウェイト処理 */
    asm(” RPT #7 || NOP”);
    }
    }

    if( !(SysCtrlRegs.WDCR & 0x0080U) ) /* 電源ONによる起動(パワーオンリセット)である場合 */
    {
    /* WDCHKにb101以外(b000)を書き込む事でWDTによるリセット実行 */
    SysCtrlRegs.WDCR= 0x0000U;
    }
    else /* 上記以外(WDTリセットである場合) */
    {
    SysCtrlRegs.WDCR= 0x00E8U;
    }
    EDIS;
    }
    /* ここまで */

    > SPRZ272の『 XINTF Rougue Write for Back-to-Back Accesses 』について
    > 電気回路を確認したところ、ディレイ信号対応が行われていませんでした。
    上記の内容はRev.0のみに必要な対応で、使用しているRev.Aでは不要な対策だった為、
    対策および確認を行う事を止めました。

    上記のソースコードの対応で問題ない場合は、本件を『 解決済み 』としたいと考えています。
    早急な対応(回答)をして頂きありがとうございました。

    #3225 返信
    Yojiro
    Yojiro
    従業員

    ご確認いただき、ありがとうございます。
    問題解決に至ることができて、安心いたしました。

    ソースコードにつきましては、記載いただいた内容で問題はございません。

    以上、よろしくお願いいたします。

     

    #3232 返信

    knabe
    参加者

    ソースコードまで確認して頂き、ありがとうごさいます。

    今後とも、宜しくお願い致します。

7件の投稿を表示中 - 1 - 7件目 (全7件中)