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.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ページ下部に書かれている。
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.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ページを参照。
セマフォの用意
後で使う 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.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
にチェックを入れる。