ホーム › フォーラム › Texas Instruments › マイコン › C2000 › F2837xD CPU間の割込み
-
投稿者投稿
-
F2837xD CPU間の割込み
デバイス型番:T320F2837xDF2837xDにおいて質問させていただきます
CPU1側であるフラグをたててCPU2で割込み処理を発生させることは可能でしょうか
サンプル等あれば教えていただきたくお願いいたします
(cpu01_to_cpu02_ipcdrivers が上記のサンプルになるのでしょうか)- このトピックは ttkkttkkが5 年、 1 ヶ月前に変更しました。
お問い合わせ有難うございます。
> 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以上、よろしくお願いいたします。
上記サンプルとは異なりますが、
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で確認するしかないのでしょうか?
お問い合わせありがとうございます。
ControlSUITEのLab11_cpu01, Lab11_CPU02と御座いますが、
こちらは、F2837xD向けのWorkshop資料のLabになると思います。
弊社でもこちらのソフトを使用し動作確認をしてみました。CPU2側のIPC1_ISRにブレークポイントを貼り、CPU1側を実行したところ、
CPU2側のIPC1_ISRのブレークポイントで問題なく停止いたしました。そこで、以下についてご確認いただけますでしょうか。
・ リアルタイムデバッグモードは使用しておりますでしょうか。
リアルタイムデバッグモードはエミュレーションおよびデバッグアクセスがブロックされるため、ブレークポイントを使用するとエラーが出力されます。・ リアルタイムデバッグモードを使用していない場合には、御社での動作確認手順の詳細をお教えいただけますでしょうか。
以上、よろしくお願いいたします。
返信ありがとうございます。
申し訳ございません。
今一度確かめたところ、CPU2側のIPC1_ISRもCPU1側のIPC0_ISRも
モジュールに入った直後でブレイクすることを確認できました。今後のために教えていただきたいのですが
リアルタイムデバッグモードとは何でしょうか
またどうやって設定を行えばリアルタイムデバッグモードになるのでしょうかご返信有難うございます。
無事動作したとのことで安心いたしました。
尚、リアルタイムモードは、ブレークポイントなどでCPUを止めずに、リアルタイムに変数の更新が可能なモードになります。使い方の詳細については、以下のマニュアルのp.166に記載されておりますので、こちらをご参照いただけますでしょうか。
TMS320C2000:Piccolo MCUのソフトウェア開発入門
http://www.tij.co.jp/jp/lit/an/jaja230a/jaja230a.pdf
(p.166) 8.5 コードのデバッグ以上、よろしくお願いいたします。
何度もすみません
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 IPC17CPU2側
//— Let CPU1 know that CPU2 is ready
g_stRegsIpc.uIPCSET.stBit.unIPC17 = SET_BIT; // Set IPC17 to release CPU1CPU1側でCPU2側IPC17のフラグが立つのを待っている箇所があるのですが
IPCを使うにあたって、本箇所は必ず必要となる部分でしょうか?お問い合わせありがとうございます。
> CPU1側でCPU2側IPC17のフラグが立つのを待っている箇所があるのですが
> IPCを使うにあたって、本箇所は必ず必要となる部分でしょうか?IPCを使うに当たっては、必須の部分では御座いません。
ただし今回のプログラムについては、CPU1からCPU2に対しIPCの割り込みを発行するのものになっております。
そのため、CPU1はCPU2のレジスタ設定(ICPの割り込み許可設定など)が完了したことを、このIPC17で確認し、
その後、CPU2に対し割り込みを発行する処理を取っております。以上、よろしくお願いいたします。
ご回答ありがとうございます。
何度もすみませんが、もう一点教えていただきたい事があります。
CPU1からIPCを使ってCPU2を起動させるような記事がいくつかあるのですが
如何せん方法がわかりません。
現在デバッガなしで電源をONさせるとCPU1のみが起動し、
CPU2が起動しない状態となっております。申し訳ございませんが、ご回答お願いいたします。
C2000のソフトウェアはC2000ware以外Updateされておりませんので、開発の際にはC2000wareのソフトをご利用いただくのが良いと思います。尚、CPU2の起動方法については、C2000wareの以下のサンプルが参考になると思います。
C2000ware
http://www.tij.co.jp/tool/jp/C2000WAREC:\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以上、よろしくお願いいたします。
丁寧な解説ありがとうございます。
一度、頂いた情報を基にトライしてみます。 -
投稿者投稿