ホーム フォーラム Texas Instruments マイコン C2000 F2837xD CPU間の割込み

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

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

    ttkkttkk
    参加者

    F2837xD CPU間の割込み

    デバイス型番:T320F2837xD

    F2837xDにおいて質問させていただきます
    CPU1側であるフラグをたててCPU2で割込み処理を発生させることは可能でしょうか
    サンプル等あれば教えていただきたくお願いいたします
    (cpu01_to_cpu02_ipcdrivers が上記のサンプルになるのでしょうか)

    • このトピックは ttkkttkkが5 年、 1 ヶ月前に変更しました。
    #8417 返信
    Ge
    Ge
    従業員

    お問い合わせ有難うございます。

    > F2837xDにおいて質問させていただきます
    > CPU1側であるフラグをたててCPU2で割込み処理を発生させることは可能でしょうか

    可能となります。
    テクニカルリファレンスマニュアルのIPCの項に割り込みについて記載が御座いますので、
    こちらもご参照ください。

    TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual
    http://www.ti.com/lit/ug/spruhm8h/spruhm8h.pdf
    (p.850) Interprocessor Communication (IPC)

    > サンプル等あれば教えていただきたくお願いいたします
    > (cpu01_to_cpu02_ipcdrivers が上記のサンプルになるのでしょうか)

    既にご確認いただいている、cpu01_to_cpu02_ipcdriversがサンプルになります。

    フォルダ:
    C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f2837xd\examples\dual

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

    #8551 返信

    ttkkttkk
    参加者

    上記サンプルとは異なりますが、
    ControlSUITEのLab11_cpu01, Lab11_CPU02をContrlCARDにダウンロードし評価を行っております

    割込みが入るかどうかを確かめるため
    IPC1_ISRの先頭にてブレイクポイントを張りましたが、
    以下のエラーが発生します。

    Trouble Reading Register PC:
    (Error -1142 @ 0x0)
    Device blocked debug access because it is currently executing non-debuggable code. Choose ‘Rude Retry’ to disable polite mode and force the operation.
    (Emulation package 8.0.27.9)

    CPU間の割込み等はLEDで確認するしかないのでしょうか?

    #8552 返信
    Ge
    Ge
    従業員

    お問い合わせありがとうございます。

    ControlSUITEのLab11_cpu01, Lab11_CPU02と御座いますが、
    こちらは、F2837xD向けのWorkshop資料のLabになると思います。
    弊社でもこちらのソフトを使用し動作確認をしてみました。

    CPU2側のIPC1_ISRにブレークポイントを貼り、CPU1側を実行したところ、
    CPU2側のIPC1_ISRのブレークポイントで問題なく停止いたしました。

    そこで、以下についてご確認いただけますでしょうか。

    ・ リアルタイムデバッグモードは使用しておりますでしょうか。
    リアルタイムデバッグモードはエミュレーションおよびデバッグアクセスがブロックされるため、ブレークポイントを使用するとエラーが出力されます。

    ・ リアルタイムデバッグモードを使用していない場合には、御社での動作確認手順の詳細をお教えいただけますでしょうか。

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

    #8556 返信

    ttkkttkk
    参加者

    返信ありがとうございます。

    申し訳ございません。
    今一度確かめたところ、CPU2側のIPC1_ISRもCPU1側のIPC0_ISRも
    モジュールに入った直後でブレイクすることを確認できました。

    今後のために教えていただきたいのですが
    リアルタイムデバッグモードとは何でしょうか
    またどうやって設定を行えばリアルタイムデバッグモードになるのでしょうか

    #8571 返信
    Ge
    Ge
    従業員

    ご返信有難うございます。

    無事動作したとのことで安心いたしました。

    尚、リアルタイムモードは、ブレークポイントなどでCPUを止めずに、リアルタイムに変数の更新が可能なモードになります。使い方の詳細については、以下のマニュアルのp.166に記載されておりますので、こちらをご参照いただけますでしょうか。

    TMS320C2000:Piccolo MCUのソフトウェア開発入門
    http://www.tij.co.jp/jp/lit/an/jaja230a/jaja230a.pdf
    (p.166) 8.5 コードのデバッグ

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

    #8597 返信

    ttkkttkk
    参加者

    何度もすみません

    CPU1側
    //— Wait here until CPU2 is ready
    while (IpcRegs.IPCSTS.bit.IPC17 == 0) ; // Wait for CPU2 to set IPC17
    IpcRegs.IPCACK.bit.IPC17 = 1; // Acknowledge and clear IPC17

    CPU2側
    //— Let CPU1 know that CPU2 is ready
    g_stRegsIpc.uIPCSET.stBit.unIPC17 = SET_BIT; // Set IPC17 to release CPU1

    CPU1側でCPU2側IPC17のフラグが立つのを待っている箇所があるのですが
    IPCを使うにあたって、本箇所は必ず必要となる部分でしょうか?

    #8603 返信
    Ge
    Ge
    従業員

    お問い合わせありがとうございます。

    > CPU1側でCPU2側IPC17のフラグが立つのを待っている箇所があるのですが
    > IPCを使うにあたって、本箇所は必ず必要となる部分でしょうか?

    IPCを使うに当たっては、必須の部分では御座いません。
    ただし今回のプログラムについては、CPU1からCPU2に対しIPCの割り込みを発行するのものになっております。
    そのため、CPU1はCPU2のレジスタ設定(ICPの割り込み許可設定など)が完了したことを、このIPC17で確認し、
    その後、CPU2に対し割り込みを発行する処理を取っております。

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

    #8608 返信

    ttkkttkk
    参加者

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

    何度もすみませんが、もう一点教えていただきたい事があります。

    CPU1からIPCを使ってCPU2を起動させるような記事がいくつかあるのですが
    如何せん方法がわかりません。
    現在デバッガなしで電源をONさせるとCPU1のみが起動し、
    CPU2が起動しない状態となっております。

    申し訳ございませんが、ご回答お願いいたします。

    #8617 返信
    Ge
    Ge
    従業員

    C2000のソフトウェアはC2000ware以外Updateされておりませんので、開発の際にはC2000wareのソフトをご利用いただくのが良いと思います。尚、CPU2の起動方法については、C2000wareの以下のサンプルが参考になると思います。

    C2000ware
    http://www.tij.co.jp/tool/jp/C2000WARE

    C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f2837xd\examples\dual\blinky_dc

    上記フォルダのCPU1側のコード(blinky_dc_cpu01.c)をご覧いただくと、以下の記述が御座います。

    IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);

    CPU2は起動後にwait modeでIPC割り込み待ち状態になっておりますので、CPU1からCPU2に対し、IPCでブートコマンドを送付する必要が御座います。
    このコマンドの送付が上記のコードになりますので、こちらがCPU1側のプログラムに記述されていないと、スタンドアローンではCPU2がwait modeで待機し続けてしまいます。

    以下にもう少し補足しますと、CPU2は起動後、OTPをプログラムしていないデフォルト状態(BOOTCTRL.OTP_KEY=0xFF)では、IPCの割り込み設定をし、WAIT BOOTで待機し続けます。

    このWAIT BOOTのとき、CPU2のブートROMはC1TOC2IPC Commands Tableをサポートしますので、任意のコマンドを送付し、CPU2を起動することができます。

    以下の資料にも記載が御座いますので、併せてご参照ください。

    参照資料:TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual
    http://www.ti.com/jp/lit/pdf/spruhm8
    (p.615) Figure 4-7. CPU2 Standalone and Hibernate Boot Flow
    (p.639) 4.10.8.2 CPU2 IPC Commands

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

    #8618 返信

    ttkkttkk
    参加者

    丁寧な解説ありがとうございます。
    一度、頂いた情報を基にトライしてみます。

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