C6748でEDMA3_LLDを使う.md
C:\ti\edma3_lld_02_12_00_20となるように展開する)以下では EDMA3 LLD を C:\ti\edma3_lld_02_12_00_20 に配置したと仮定して説明する。
そうでない人は適宜読み替えること。
XDCtoolsにEDMA3 LLDを使うよう指示する
プロジェクトを右クリック -> Properties -> General -> Products and Repositories で EDMA3 Low Level Driver にチェックを付ける。
ライブラリのリンク設定
プロジェクトを右クリック -> Properties -> Build -> C6000 Linker -> File Search Path -> Include library file or command file as input (--library, -l) に以下の3つを追加
edma3_lld_drv.ae674edma3_lld_drv_sample.ae674edma3_lld_rm.ae674Add <dir> to library search path (--search_path, -i) に以下の3つを追加
C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\lib\674\debugC:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\sample\lib\c6748-evm\674\debugC:\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ページ下部に書かれている。
APIを使いたいファイル(つまり、貴方が書くソースコード)の中で
#include <ti/sdo/edma3/drv/edma3_drv.h>
する。この中にAPIの入出力定義が詰まっている。
以下のファイルをプロジェクトに追加する。
C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\sample\src\platforms\sample_c6748_cfg.cC:\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ページを参照。
セマフォの用意
後で使う 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;
としておく。
ここから先は下記のドキュメントが参考になる。
C:\ti\edma3_lld_02_12_00_20\packages\ti\sdo\edma3\drv\docs\EDMA3_Driver.chmリンカで下記のエラーが出るとき
Undefined reference to 'ti_sysbios_family_c64p_EventCombiner_disableEvent__E' in file ./sample_c6748_int_reg.objUndefined reference to 'ti_sysbios_family_c64p_EventCombiner_enableEvent__E' in file ./sample_c6748_int_reg.objXGCONF で Device Supprt -> EventCombiner -> Add the EventCombiner module to my configuration にチェックを入れる。