# MINDmaConfig Structure

## Definition

      #include <twl/mi.h>

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

## Members

The members of the `MINDmaConfig` structure are shown below.

Member Name | Description | Related Register | Default Values
--- | --- | --- | ---
`intervalTimer` | Interval timer for block transfers. | d15-0 in DMAxBCNT | `MI_NDMA_NO_INTERVAL`
`prescaler` | Prescaler of interval timer for block transfers. | d17-16 in DMAxBCNT | `MI_NDMA_INTERVAL_PS_1`
`blockWord` | Number of words in the block transfer. | d19-16 in DMAx_CNT | `MI_NDMA_BWORD_1`
`wordCount` | Number of words in the transfer. | DMAxWCNT | `MI_NDMA_AT_A_TIME`

## Description

`MINDmaConfig` is a structure that specifies the DMA behavior used in new DMA operations.

There are many parameters that specify the behavior of the new DMA. Specifying all aspects of every behavior would cause the instruction length to be quite long, which in turn would be extremely troublesome. Consequently, the parts of these parameters that are unlikely to change during multiple DMA operations are gathered into the `MINDmaConfig` structure. By having applications refer to this structure during DMA operations, the burden on applications can be reduced.

Each of the four new DMAs contains a `MINDmaConfig` structure internally. During DMA operations, either of the following operations can be selected.

> (1) Accessing the `MINDmaConfig` structure maintained internally
> (2) Accessing the `MINDmaConfig` structure specified by the application

The functions that configure the internally maintained `MINDmaConfig` structure are the following:

> The `MI_InitNDmaConfig` function, used to initialize the four internal structures
> The `MI_SetNDmaConfig` function, used to copy the specified `MINDmaConfig` structure to an internal structure
> The `MI_SetNDmaInterval` function, used to specify interval information for a particular internal structure
> The `MI_SetNDmaBlockWord` function, used to specify BlockWord information for a particular internal structure
> The `MI_SetNDmaWordCount` function, used to specify `WordCount` information for a particular internal structure

The functions that get the information in the internal `MINDmaConfig` structure are the following:

> The `MI_GetNDmaConfig` function, used to copy an internal structure to a specified region of memory
> The `MI_GetNDmaIntervalTimer` function, used to get the interval timer information for a particular internal structure
> The `MI_GetNDmaIntervalPrescaler` function, used to get the interval prescalar information for a particular internal structure
> The `MI_GetNDmaBlockWord` function, used to get the `BlockWord` information of a particular internal structure
> The `MI_GetNDmaWordCount` function, used to get the `WordCount` information of a particular internal structure

The "interval information" mentioned in the set functions refers to the Interval Timer and Interval Prescaler information; both can be set simultaneously. For the get functions, two separate functions have been created to get these values individually.

The internal structure will be initialized using the `OS_Init` function, so the application doesn't have to handle the initialization at first. Call this function if it's necessary.

If you want to perform a new DMA operation using different parameters than the default settings, but you don't want to change the internal structure, perform the following procedure: (1) copy over the `MINDmaConfig` structure, (2) overwrite the members of the `MINDmaConfig` structure, (3) specify that structure and perform the new DMA operation.

If you want to change the actual value within the library's internal structure, either (1) copy `MINDmaConfig` and overwrite the necessary portions, then set the library to the structure, or (2) overwrite the necessary parameters directly using functions such as `MI_SetNDmaInterval()`.

(Example) Copy the new DMA1 settings, overwrite the interval information (that is, the Interval Timer and Interval Prescaler information), and set that as the config [structure] for the new DMA1 [channel].

> `
> 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 );
> `

## See Also

`MI_InitNDmaConfig
MI_SetNDmaConfig
`

## Revision History

2008/01/22 Initial version.

CONFIDENTIAL