MINDmaConfig 構造体

定義

#include <twl/mi.h>

typedef struct _MINDmaConfig
{
   u32 intervalTimer;
   u32 prescaler;
   u32 blockWord;
   u32 wordCount;
}
MINDmaConfig;

メンバー

MINDmaConfig 構造体のメンバーは以下の通りです。

メンバ名 説明 関係するレジスタ 初期値
intervalTimer ブロック転送のインターバルタイマーです。 DMAxBCNT の d15-0 MI_NDMA_NO_INTERVAL
prescaler ブロック転送インターバルタイマーのプリスケーラです。 DMAxBCNT の d17-16 MI_NDMA_INTERVAL_PS_1
blockWord ブロック転送ワード数です。 DMAx_CNT の d19-16 MI_NDMA_BWORD_1
wordCount 転送ワード数です。 DMAxWCNT MI_NDMA_AT_A_TIME

説明

MINDmaConfig は新規DMAの操作で使用される、DMAの動作を指定するための構造体です。

新規DMAの動作を指定するパラメータは数多いため、動作の度に全てを指定していると命令の記述が長くなり非常に煩雑です。そこで、複数のDMA動作を行っても大きく変わらないであろうと思われる部分を MINDmaConfig 構造体にまとめ、DMA動作のときにはこの構造体を参照することでアプリケーション側の負担を減らします。

4つの新規DMAはそれぞれ内部で MINDmaConfig 構造体を保持しています。DMA動作の際には、

(1) 内部で保持するMINDmaConfig 構造体を参照する
(2) アプリケーションで指定する MINDmaConfig 構造体を参照する

のどちらかの動作を選ぶことが出来ます。

内部で保持する MINDmaConfig 構造体を設定する関数として、

4つの内部構造体を初期化する MI_InitNDmaConfig()
指定の MINDmaConfig 構造体を内部構造体にコピーする MI_SetNDmaConfig()
特定の内部構造体の Intarval 情報を指定する MI_SetNDmaInterval()
特定の内部構造体の BlockWord 情報を指定する MI_SetNDmaBlockWord()
特定の内部構造体の WordCount 情報を指定する MI_SetNDmaWordCount()

があります。また、内部の MINDmaConfig 構造体の情報を取得する関数として、

内部構造体を指定の領域にコピーする MI_GetNDmaConfig()
特定の内部構造体の Interval Timer 情報を取得する MI_GetNDmaIntervalTimer()
特定の内部構造体の Interval Prescaler 情報を取得する MI_GetNDmaIntervalPrescaler()
特定の内部構造体の BlockWord 情報を取得する MI_GetNDmaBlockWord()
特定の内部構造体の WordCount 情報を取得する MI_GetNDmaWordCount()

があります。 設定関数の「Interval 情報」は Interval Timer 情報と Interval Prescaler 情報のことで、両方を同時に設定します。取得関数ではこの2つを個別に取得する関数が用意されています。

内部構造体の初期化は OS_Init() で行われますので最初にアプリケーションで行う必要はありません。必要があれば呼び出してください。

内部構造体を変化させたくないが、デフォルトの設定とは違うパラメータで新規DMAを行いたい場合は、(1) 内部の MINDmaConfig 構造体をコピしてくる (2) コピーしたMINDmaConfig 構造体のメンバーを書き換える (3) その構造体を指定して新規DMA を行う 、という手順を踏んでください。

ライブラリ内部構造体の値自体を変更したい場合は、コピーして必要部分を書き換えた MINDmaConfig 構造体をライブラリに設定するか、MI_SetNDmaInterval() などの関数で必要なパラメータを直接書き換えてください。


(例)
新規DMA1番の設定をコピーして、Interval情報(Interval Timer 情報と Interval Prescaler 情報) を書き換えてそれを改めて新規DMA 1番の config として設定します。


MINDmaConfig config;

//---- get config
MI_GetNDmaConfig( 1, &config );

//---- change config values
config.intervalTimer = 0x100;
config.prescaler = MI_NDMA_INTERVAL_PS_16;

//---- set config
MI_SetNDmaConfig( 1, &config );

参照

MI_InitNDmaConfig, MI_SetNDmaConfig

履歴

2008/01/22 初版