3.3.5 SAFE_PLIB_DMAC

Set of safe functions for setting up and controlling the DMAC peripheral.

#define DMAC_TIMEOUT                                     (10000)
#define DMAC_ERROR_CALLBACK_NOT_REGISTERED               (0x1U)
#define DMAC_ERROR_INVALID_PARAMETER                     (0x2U)
#define DMAC_ERROR_TIMEOUT                               (0x3U)
// *****************************************************************************
typedef enum
{
    /* DMAC Channel 0 */
    DMAC_CHANNEL_0 = 0,
    /* DMAC Channel 1 */
    DMAC_CHANNEL_1 = 1,
    /* DMAC Channel 2 */
    DMAC_CHANNEL_2 = 2,
    /* DMAC Channel 3 */
    DMAC_CHANNEL_3 = 3,
    /* DMAC Channel 4 */
    DMAC_CHANNEL_4 = 4,
    /* DMAC Channel 5 */
    DMAC_CHANNEL_5 = 5,
    /* DMAC Channel 6 */
    DMAC_CHANNEL_6 = 6,
    /* DMAC Channel 7 */
    DMAC_CHANNEL_7 = 7,
    /* DMAC Channel 8 */
    DMAC_CHANNEL_8 = 8,
    /* DMAC Channel 9 */
    DMAC_CHANNEL_9 = 9,
    /* DMAC Channel 10 */
    DMAC_CHANNEL_10 = 10,
    /* DMAC Channel 11 */
    DMAC_CHANNEL_11 = 11,
    /* DMAC Channel Max */
    DMAC_CHANNEL_MAX = 12,

} DMAC_CHANNEL;

typedef enum
{
    /* No event */
    DMAC_TRANSFER_EVENT_NONE = 0,

    /* Data was transferred successfully. */
    DMAC_TRANSFER_EVENT_COMPLETE = 1,

    /* Error while processing the request */
    DMAC_TRANSFER_EVENT_ERROR = 2

} DMAC_TRANSFER_EVENT;

typedef enum
{
    /* CRC16 (CRC-CCITT): 0x1021 */
    DMAC_CRC_TYPE_16 = 0x0,

    /* CRC32 (IEEE 802.3): 0x04C11DB7*/
    DMAC_CRC_TYPE_32 = 0x1

} DMAC_CRC_POLYNOMIAL_TYPE;

typedef enum
{
    /* Byte bus access. */
    DMAC_CRC_BEAT_SIZE_BYTE     = 0x0,

    /* Half-word bus access. */
    DMAC_CRC_BEAT_SIZE_HWORD    = 0x1,

    /* Word bus access. */
    DMAC_CRC_BEAT_SIZE_WORD     = 0x2

} DMAC_CRC_BEAT_SIZE;

typedef struct
{
    /* CRCCTRL[CRCPOLY]: Polynomial Type (CRC16, CRC32) */
    DMAC_CRC_POLYNOMIAL_TYPE polynomial_type;

    /* CRCCHKSUM: Initial Seed for calculating the CRC */
    uint32_t seed;
} DMAC_CRC_SETUP;

typedef uint32_t DMAC_CHANNEL_CONFIG;

typedef void (*DMAC_CHANNEL_CALLBACK) (DMAC_TRANSFER_EVENT event, uintptr_t contextHandle);