DMAコントローラ¶
SOLID-OSでは、DMAに関わるAPIを提供しています。
DMA関連のAPIを使用するには、solid_dmac.h をインクルードしてください。
#include "solid_dmac.h"
データタイプ¶
SOLID_DMAC_DEVICEINFO¶
- 
typedef struct _SOLID_DMAC_DEVICEINFO_ SOLID_DMAC_DEVICEINFO¶
- 
struct _SOLID_DMAC_DEVICEINFO_¶
- 説明 - DMAコントローラの情報用の構造体 - 定義 - typedef struct _SOLID_DMAC_DEVICEINFO_ { uint32_t maxChannel; uint32_t maxTransferWidth; uint32_t maxTransferSize; } SOLID_DMAC_DEVICEINFO; - メンバー - 
uint32_t maxChannel¶
- チャネルの最大数 
 - 
uint32_t maxTransferWidth¶
- 最大転送幅 (単位:byte) 
 - 
uint32_t maxTransferSize¶
- 最大転送量 (単位:byte) 
 
- 
uint32_t maxChannel¶
SOLID_DMAC_BUF¶
SOLID_DMAC_BUFFER¶
- 
typedef struct _SOLID_DMAC_BUFFER_ SOLID_DMAC_BUFFER¶
- 
struct _SOLID_DMAC_BUFFER_¶
- 説明 - DMAコントローラの情報用の構造体 - 定義 - typedef struct _SOLID_DMAC_BUFFER_ { int bufType; // バッファタイプ uint32_t width; // 転送幅(byte) uint32_t size; // 転送量(byte) SOLID_ADDRESS addr; // バッファのアドレス SOLID_PHYADDRESS phyAddr; // バッファの物理アドレス (SOLID側で設定) } SOLID_DMAC_BUFFER; - メンバー - 
int bufType¶
- バッファタイプ - SOLID_DMAC_BUF_MEMORYまたは- SOLID_DMAC_BUF_DEVICE
 - 
uint32_t width¶
- 転送幅 (単位:byte) 
 - 
uint32_t size¶
- 転送量 (単位:byte) 
 - 
SOLID_ADDRESS addr¶
- バッファの先頭アドレス 
 - 
SOLID_PHYADDRESS phyAddr¶
- バッファの物理アドレス (SOLID側で設定) 
 
- 
int bufType¶
SOLID_DMAC_TRANSACTION¶
- 
typedef struct _SOLID_DMAC_TRANSACTION_ SOLID_DMAC_TRANSACTION¶
- 
struct _SOLID_DMAC_TRANSACTION_¶
- 説明 - DMA転送情報用の構造体 - 定義 - typedef struct _SOLID_DMAC_TRANSACTION_ { struct _SOLID_DMAC_TRANSACTION_ * pNext; SOLID_DMAC_BUFFER src; SOLID_DMAC_BUFFER dest; int configIdx; } SOLID_DMAC_TRANSACTION; - メンバー - 
struct _SOLID_DMAC_TRANSACTION_ *pNext¶
- 要求のキューイング用(SOLID内部で使用) 
 - 
SOLID_DMAC_BUFFER src¶
- 転送元バッファ情報 
 - 
SOLID_DMAC_BUFFER dest¶
- 転送先バッファ情報 
 - 
int configIdx¶
- DMA設定のインデックス番号, -1はオート設定 
 
- 
struct _SOLID_DMAC_TRANSACTION_ *pNext¶
SOLID_DMAC_BUFSTATE¶
- 
SOLID_DMAC_BUFSTATE_ONESHOT¶
- 
SOLID_DMAC_BUFSTATE_REUSE¶
- DMA転送情報用バッファの設定 - 定数 - 名前 - 値 - 説明 - SOLID_DMAC_BUFSTATE_ONESHOT- 0 - 情報転送用バッファは終了/中断時にキューから解放する - SOLID_DMAC_BUFSTATE_REUSE- 1 - 情報転送用バッファは終了/中断時にキューから解放しない (明示的な - SOLID_DMAC_ClearTransactionの呼び出しが必要)
SOLID_DMAC_CALLBACK_STATUS¶
SOLID_DMAC_CALLBACK¶
- 
typedef void (*SOLID_DMAC_CALLBACK)(void*, int, int, SOLID_DMAC_TRANSACTION*)¶
- 説明 - DMA転送終了時のコールバック関数 - 定義 - typedef void (*SOLID_DMAC_CALLBACK)(void* param, int ch, int status, SOLID_DMAC_TRANSACTION* pTx) - Param param:
- コールバック登録時に設定したparam 
- Param ch:
- 転送の終了したチャンネル 
- Param status:
- DMA転送ステータス( - SOLID_DMAC_CALLBACK_STATUS_SUCCESS,- SOLID_DMAC_CALLBACK_STATUS_FAILED,- SOLID_DMAC_CALLBACK_STATUS_ABORTED)
- Param pTx:
- DMA転送情報 
 
API¶
SOLID_DMAC_GetInfo¶
- 
int SOLID_DMAC_GetInfo(SOLID_DMAC_DEVICEINFO **ppInfo)¶
- DMAコントローラの情報を取得します。 - パラメータ:
- ppInfo -- デバイス情報の格納先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_Alloc¶
- 
int SOLID_DMAC_Alloc(int ch)¶
- DMAチャネルを確保します。 - パラメータ:
- ch -- 確保するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_Free¶
- 
int SOLID_DMAC_Free(int ch)¶
- 確保したDMAチャネルを解放します。 - パラメータ:
- ch -- 解放するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_SetBufState¶
- 
int SOLID_DMAC_SetBufState(int ch, int state)¶
- DMAの情報転送用バッファの設定を変更する - パラメータ:
- ch -- 設定するチャネル番号 
- state -- - SOLID_DMAC_BUFSTATE_ONESHOTまたは- SOLID_DMAC_BUFSTATE_REUSE
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_GetBufState¶
- 
int SOLID_DMAC_GetBufState(int ch, int *state)¶
- DMAの情報転送用バッファの設定を取得する - パラメータ:
- ch -- 設定するチャネル番号 
- state -- バッファ設定の保存先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_AddTransaction¶
- 
int SOLID_DMAC_AddTransaction(int ch, SOLID_DMAC_TRANSACTION *pTx)¶
- DMAの転送要求を追加します。 - このAPIでは要求のキューイングのみ行い、実際の転送は - SOLID_DMAC_Startで開始します- パラメータ:
- ch -- 使用するチャネル番号 
- pTx -- DMA転送情報 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_GetTransaction¶
- 
int SOLID_DMAC_GetTransaction(int ch, SOLID_DMAC_TRANSACTION **ppTx)¶
- キューイングされたDMAの転送要求情報を取得します。 - パラメータ:
- ch -- 使用するチャネル番号 
- ppTx -- DMA転送情報へのポインタの格納先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_ClearTransaction¶
- 
int SOLID_DMAC_ClearTransaction(int ch)¶
- DMAの転送要求をクリアします。 - パラメータ:
- ch -- 使用するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_Start¶
- 
int SOLID_DMAC_Start(int ch)¶
- DMA転送をスタートします。 - パラメータ:
- ch -- 使用するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_Abort¶
- 
int SOLID_DMAC_Abort(int ch)¶
- 実行中のDMA転送を中断します。 - パラメータ:
- ch -- 使用するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_IsFinished¶
- 
int SOLID_DMAC_IsFinished(int ch)¶
- DMA転送が実行中かどうか確認します。 - パラメータ:
- ch -- 使用するチャネル番号 
 
- 戻り値:
- 0: DMA転送実行中 
- 1: DMA転送は終了 
- それ以外: エラー 
 
 
SOLID_DMAC_SetCallback¶
- 
int SOLID_DMAC_SetCallback(int ch, SOLID_DMAC_CALLBACK pCallBack, void *param)¶
- DMA転送終了時のコールバックを設定します。 - パラメータ:
- ch -- 設定するチャネル番号 
- pCallBack -- コールバック関数 
- param -- コールバック関数に渡す引数 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_Notify¶
- 
void SOLID_DMAC_Notify(int ch, int status)¶
- DMA転送の終了イベントを通知します。 - これはBSP側のDMAコントローラの実装側で使用します。 - パラメータ:
- ch -- 通知するチャネル番号 
- status -- DMA転送ステータス - - SOLID_DMAC_CALLBACK_STATUS_SUCCESS-- SOLID_DMAC_CALLBACK_STATUS_FAILED-- SOLID_DMAC_CALLBACK_STATUS_ABORTED
 
 
SOLID_DMAC_GetConfigIdx¶
- 
int SOLID_DMAC_GetConfigIdx(const char *pName, int *pConfigIdx)¶
- DMA設定のインデックスを取得します。 - このAPIを使って得られた番号を、 - SOLID_DMAC_TRANSACTIONのconfigIdxに指定してください。- パラメータ:
- pName -- DMA設定の名称 (文字列、NULL終端) 
- pConfigIdx -- インデックス番号の格納先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_DMAC_MaintBuffer¶
- 
int SOLID_DMAC_MaintBuffer(SOLID_DMAC_BUFFER *pBuf, int bSrc)¶
- DMA転送用にバッファのアドレス解決やキャッシュのメンテナンスを行います。 - これはDMAコントローラの操作を手動で行い、バッファの処理だけをコアサービスで 行いたい場合に使用します。 - SOLID_DMAC_AddTransactionで設定するバッファは、 コアサービス内部でこの関数を呼び出すため、この関数を使う必要はありません。- パラメータ:
- pBuf -- DMA用バッファ 
- bSrc -- 転送元/先設定 1: 転送元としてバッファを処理 0: 転送先としてバッファを処理 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
要実装関数¶
DMAC関連の要実装関数の定義は、impl_dmac.h にあります。
#include "impl_dmac.h"
DMACに関する要実装関数は、 IMPL_DMAC_GetConfigIdx を除き、
割り込み禁止状態(CPSRのIビットが1)で呼び出されます。
IMPL_DMAC_Init¶
- 
int IMPL_DMAC_Init(SOLID_DMAC_DEVICEINFO *pDevInfo)¶
- DMAコントローラを初期化します。DMAコントローラの初期化を行い、pDevInfoにDMAコントローラの情報を格納してください。DMAコントローラをサポートしない場合は、SOLID_ERR_NOTSUPPORTEDを返してください。- パラメータ:
- pDevInfo -- DMAコントロ―ラ情報の格納先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
IMPL_DMAC_Use¶
- 
int IMPL_DMAC_Use(int ch)¶
- DMAのチャネルの占有を開始します。指定されたチャネルが使用できない場合、エラー値を返してください。- パラメータ:
- ch -- 占有するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
IMPL_DMAC_UnUse¶
- 
int IMPL_DMAC_UnUse(int ch)¶
- DMAのチャネル占有を終了します。 - パラメータ:
- ch -- 終了するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
IMPL_DMAC_StartTransfer¶
- 
int IMPL_DMAC_StartTransfer(int ch, SOLID_DMAC_TRANSACTION *pTx)¶
- DMA転送を開始します。DMA転送をセットしてください。pTxには複数の転送情報が入っている可能性があります。セットできた転送分を戻り値として返してください。- パラメータ:
- ch -- 開始するチャネル番号 
- pTx -- 転送情報へのポインタ 
 
- 戻り値:
- >1: 正常終了, 数はDMA転送をセットできた転送情報の数 
- それ以外: エラー 
 
 
IMPL_DMAC_AbortTransfer¶
- 
int IMPL_DMAC_AbortTransfer(int ch)¶
- 実行中のDMA転送を中断します。転送の中断が終了したら、SOLID_DMAC_Notifyにて、中断が完了した事を通知してください。- パラメータ:
- ch -- 中断するチャネル番号 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
IMPL_DMAC_GetConfigIdx¶
- 
int IMPL_DMAC_GetConfigIdx(const char *pName, int *pConfigIdx)¶
- DMA設定のインデックスを取得します。DMA設定の名称から、該当するインデックス番号をpConfigIdxに格納してください。該当する設定が見つからない場合は、エラー値としてSOLID_ERR_NOTFOUNDを返してください。- パラメータ:
- pName -- DMA設定の名称 (文字列、NULL終端) 
- pConfigIdx -- インデックス番号の格納先 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー