//***************************************************************************** // // udma.h - Prototypes and macros for the uDMA controller. // // Copyright (c) 2007-2008 Luminary Micro, Inc. All rights reserved. // // Software License Agreement // // Luminary Micro, Inc. (LMI) is supplying this software for use solely and // exclusively on LMI's microcontroller products. // // The software is owned by LMI and/or its suppliers, and is protected under // applicable copyright laws. All rights are reserved. You may not combine // this software with "viral" open-source software in order to form a larger // program. Any use in violation of the foregoing restrictions may subject // the user to criminal sanctions under applicable laws, as well as to civil // liability for the breach of the terms and conditions of this license. // // THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED // OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. // LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR // CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. // // This is part of revision 2523 of the Stellaris Peripheral Driver Library. // //***************************************************************************** #ifndef __UDMA_H__ #define __UDMA_H__ //***************************************************************************** // // If building with a C++ compiler, make all of the definitions in this header // have a C binding. // //***************************************************************************** #ifdef __cplusplus extern "C" { #endif //***************************************************************************** // // A structure that defines an entry in the channel control table. These // fields are used by the uDMA controller and normally it is not necessary for // software to directly read or write fields in the table. // //***************************************************************************** typedef struct { // // The ending source address of the data transfer. // volatile void *pvSrcEndAddr; // // The ending destination address of the data transfer. // volatile void *pvDstEndAddr; // // The channel control mode. // volatile unsigned long ulControl; // // An unused location. // volatile unsigned long ulSpare; } tDMAControlTable; //***************************************************************************** // // Flags that can be passed to uDMAChannelAttributeEnable(), // uDMAChannelAttributeDisable(), and returned from uDMAChannelAttributeGet(). // //***************************************************************************** #define UDMA_ATTR_USEBURST 0x00000001 #define UDMA_ATTR_ALTSELECT 0x00000002 #define UDMA_ATTR_HIGH_PRIORITY 0x00000004 #define UDMA_ATTR_REQMASK 0x00000008 #define UDMA_ATTR_ALL 0x0000000F //***************************************************************************** // // DMA control modes that can be passed to uDMAModeSet() and returned // uDMAModeGet(). // //***************************************************************************** #define UDMA_MODE_STOP 0x00000000 #define UDMA_MODE_BASIC 0x00000001 #define UDMA_MODE_AUTO 0x00000002 #define UDMA_MODE_PINGPONG 0x00000003 #define UDMA_MODE_MEM_SCATTER_GATHER \ 0x00000004 #define UDMA_MODE_PER_SCATTER_GATHER \ 0x00000006 #define UDMA_MODE_ALT_SELECT 0x00000001 //***************************************************************************** // // Channel configuration values that can be passed to uDMAControlSet(). // //***************************************************************************** #define UDMA_DST_INC_8 0x00000000 #define UDMA_DST_INC_16 0x40000000 #define UDMA_DST_INC_32 0x80000000 #define UDMA_DST_INC_NONE 0xc0000000 #define UDMA_SRC_INC_8 0x00000000 #define UDMA_SRC_INC_16 0x04000000 #define UDMA_SRC_INC_32 0x08000000 #define UDMA_SRC_INC_NONE 0x0c000000 #define UDMA_SIZE_8 0x00000000 #define UDMA_SIZE_16 0x11000000 #define UDMA_SIZE_32 0x22000000 #define UDMA_ARB_1 0x00000000 #define UDMA_ARB_2 0x00004000 #define UDMA_ARB_4 0x00008000 #define UDMA_ARB_8 0x0000c000 #define UDMA_ARB_16 0x00010000 #define UDMA_ARB_32 0x00014000 #define UDMA_ARB_64 0x00018000 #define UDMA_ARB_128 0x0001c000 #define UDMA_ARB_256 0x00020000 #define UDMA_ARB_512 0x00024000 #define UDMA_ARB_1024 0x00028000 #define UDMA_NEXT_USEBURST 0x00000008 //***************************************************************************** // // Channel numbers to be passed to API functions that require a channel number // ID. // //***************************************************************************** #define UDMA_CHANNEL_USBEP1RX 0 #define UDMA_CHANNEL_USBEP1TX 1 #define UDMA_CHANNEL_USBEP2RX 2 #define UDMA_CHANNEL_USBEP2TX 3 #define UDMA_CHANNEL_USBEP3RX 4 #define UDMA_CHANNEL_USBEP3TX 5 #define UDMA_CHANNEL_UART0RX 8 #define UDMA_CHANNEL_UART0TX 9 #define UDMA_CHANNEL_SSI0RX 10 #define UDMA_CHANNEL_SSI0TX 11 #define UDMA_CHANNEL_UART1RX 22 #define UDMA_CHANNEL_UART1TX 23 #define UDMA_CHANNEL_SSI1RX 24 #define UDMA_CHANNEL_SSI1TX 25 #define UDMA_CHANNEL_SW 30 //***************************************************************************** // // Flags to be OR'd with the channel ID to indicate if the primary or alternate // control structure should be used. // //***************************************************************************** #define UDMA_PRI_SELECT 0x00000000 #define UDMA_ALT_SELECT 0x00000020 //***************************************************************************** // // uDMA interrupt sources, to be passed to uDMAIntRegister() and // uDMAIntUnregister(). // //***************************************************************************** #define UDMA_INT_SW 62 #define UDMA_INT_ERR 63 //***************************************************************************** // // API Function prototypes // //***************************************************************************** extern void uDMAEnable(void); extern void uDMADisable(void); extern unsigned long uDMAErrorStatusGet(void); extern void uDMAErrorStatusClear(void); extern void uDMAChannelEnable(unsigned long ulChannel); extern void uDMAChannelDisable(unsigned long ulChannel); extern tBoolean uDMAChannelIsEnabled(unsigned long ulChannel); extern void uDMAControlBaseSet(void *pControlTable); extern void *uDMAControlBaseGet(void); extern void uDMAChannelRequest(unsigned long ulChannel); extern void uDMAChannelAttributeEnable(unsigned long ulChannel, unsigned long ulAttr); extern void uDMAChannelAttributeDisable(unsigned long ulChannel, unsigned long ulAttr); extern unsigned long uDMAChannelAttributeGet(unsigned long ulChannel); extern void uDMAChannelControlSet(unsigned long ulChannel, unsigned long ulControl); extern void uDMAChannelTransferSet(unsigned long ulChannel, unsigned long ulMode, void *pvSrcAddr, void *pvDstAddr, unsigned long ulTransferSize); extern unsigned long uDMAChannelSizeGet(unsigned long ulChannel); extern unsigned long uDMAChannelModeGet(unsigned long ulChannel); extern void uDMAIntRegister(unsigned long ulIntChannel, void (*pfnHandler)(void)); extern void uDMAIntUnregister(unsigned long ulIntChannel); //***************************************************************************** // // Mark the end of the C bindings section for C++ compilers. // //***************************************************************************** #ifdef __cplusplus } #endif #endif // __UDMA_H__