motchy869
12/3/2019 - 10:36 AM

C6748でEDMA3_LLDを使う.md

C6748でEDMA3_LLDを使う.md

1. C6748でEDMA3 LLDを使う

1.1. まずドライバをインストールする

  1. http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/psp/edma3_lld/index.html から最新のEDMA3 LLD(執筆当時02.12.00.20)をダウンロードする。
  2. CCSを終了する
  3. ダウンロードしたファイルを展開してCCSがインストールされているフォルダと同じ場所に置く。(例: C:\ti\edma3_lld_02_12_00_20となるように展開する)
  4. CCSを起動する。先程インストールしたEDMA3 LLDが認識され、CCSにインストールするウィザードが始まるので流れに任せてインストールする。

1.2. 開発する

以下では EDMA3 LLD を C:\ti\edma3_lld_02_12_00_20 に配置したと仮定して説明する。 そうでない人は適宜読み替えること。

  1. XDCtoolsにEDMA3 LLDを使うよう指示する
    プロジェクトを右クリック -> Properties -> General -> Products and RepositoriesEDMA3 Low Level Driver にチェックを付ける。

  2. ライブラリのリンク設定
    プロジェクトを右クリック -> Properties -> Build -> C6000 Linker -> File Search Path -> Include library file or command file as input (--library, -l) に以下の3つを追加

    • edma3_lld_drv.ae674
    • edma3_lld_drv_sample.ae674
    • edma3_lld_rm.ae674

    Add <dir> to library search path (--search_path, -i) に以下の3つを追加

    • C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\lib\674\debug
    • C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\sample\lib\c6748-evm\674\debug
    • C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\rm\lib\c6748-evm\674\debug

    これらが必要な理由は http://processors.wiki.ti.com/images/5/5e/EDMA3_LLD.pdf の16ページを見ればわかる。名前にsampleが付いていて不思議だが、その辺りの事情は同文献の16ページ下部に書かれている。

  3. APIを使いたいファイル(つまり、貴方が書くソースコード)の中で

    #include <ti/sdo/edma3/drv/edma3_drv.h>
    

    する。この中にAPIの入出力定義が詰まっている。

  4. 以下のファイルをプロジェクトに追加する。

    • C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\sample\src\platforms\sample_c6748_cfg.c
    • C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\sample\src\platforms\sample_c6748_int_reg.c

    これらのコードにプロセッサ固有(この場合C6748)の設定が書かれている。 ここで定義されている構造体を自分のソースコードで使っていくことになる。 詳しくは http://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/639/EDMA3_5F00_Driver_5F00_User_5F00_Guide.pdf の23ページを参照。

  5. セマフォの用意
    後で使う EDMA3_DRV_open() の為の EDMA3_DRV_InitConfig インスタンスの作成に於いて、SYS/BIOS で使っているセマフォを渡す必要があるので、まだ適当なセマフォを1つも用意していなければここで用意しておく。
    XGCONFで System Overview -> Semaphore -> Instance からセマフォを1つ作る。 例えば semaphore0 という名前で。そしてEDMA3 LLD の API を使いたいファイルで

    #include <ti/sysbios/knl/Semaphore.h>
    

    とし、

    extern ti_sysbios_knl_Semaphore_Handle semaphore0;
    

    としておく。

  6. ここから先は下記のドキュメントが参考になる。

1.3. トラブルシューティング

  1. リンカで下記のエラーが出るとき

    • Undefined reference to 'ti_sysbios_family_c64p_EventCombiner_disableEvent__E' in file ./sample_c6748_int_reg.obj
    • Undefined reference to 'ti_sysbios_family_c64p_EventCombiner_enableEvent__E' in file ./sample_c6748_int_reg.obj

    XGCONF で Device Supprt -> EventCombiner -> Add the EventCombiner module to my configuration にチェックを入れる。