| //***************************************************************************** |
| // |
| // udma.h |
| // |
| // Prototypes and macros for the uDMA controller. |
| // |
| // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ |
| // |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions |
| // are met: |
| // |
| // Redistributions of source code must retain the above copyright |
| // notice, this list of conditions and the following disclaimer. |
| // |
| // Redistributions in binary form must reproduce the above copyright |
| // notice, this list of conditions and the following disclaimer in the |
| // documentation and/or other materials provided with the |
| // distribution. |
| // |
| // Neither the name of Texas Instruments Incorporated nor the names of |
| // its contributors may be used to endorse or promote products derived |
| // from this software without specific prior written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| // |
| //***************************************************************************** |
| |
| #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 |
| |
| //***************************************************************************** |
| // |
| //! \addtogroup uDMA_Micro_Direct_Memory_Access_api |
| //! @{ |
| // |
| //***************************************************************************** |
| |
| //***************************************************************************** |
| // |
| // 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; |
| |
| //***************************************************************************** |
| // |
| //! A helper macro for building scatter-gather task table entries. |
| //! |
| //! \param ulTransferCount is the count of items to transfer for this task. |
| //! \param ulItemSize is the bit size of the items to transfer for this task. |
| //! \param ulSrcIncrement is the bit size increment for source data. |
| //! \param pvSrcAddr is the starting address of the data to transfer. |
| //! \param ulDstIncrement is the bit size increment for destination data. |
| //! \param pvDstAddr is the starting address of the destination data. |
| //! \param ulArbSize is the arbitration size to use for the transfer task. |
| //! \param ulMode is the transfer mode for this task. |
| //! |
| //! This macro is intended to be used to help populate a table of uDMA tasks |
| //! for a scatter-gather transfer. This macro will calculate the values for |
| //! the fields of a task structure entry based on the input parameters. |
| //! |
| //! There are specific requirements for the values of each parameter. No |
| //! checking is done so it is up to the caller to ensure that correct values |
| //! are used for the parameters. |
| //! |
| //! The \e ulTransferCount parameter is the number of items that will be |
| //! transferred by this task. It must be in the range 1-1024. |
| //! |
| //! The \e ulItemSize parameter is the bit size of the transfer data. It must |
| //! be one of \b UDMA_SIZE_8, \b UDMA_SIZE_16, or \b UDMA_SIZE_32. |
| //! |
| //! The \e ulSrcIncrement parameter is the increment size for the source data. |
| //! It must be one of \b UDMA_SRC_INC_8, \b UDMA_SRC_INC_16, |
| //! \b UDMA_SRC_INC_32, or \b UDMA_SRC_INC_NONE. |
| //! |
| //! The \e pvSrcAddr parameter is a void pointer to the beginning of the source |
| //! data. |
| //! |
| //! The \e ulDstIncrement parameter is the increment size for the destination |
| //! data. It must be one of \b UDMA_DST_INC_8, \b UDMA_DST_INC_16, |
| //! \b UDMA_DST_INC_32, or \b UDMA_DST_INC_NONE. |
| //! |
| //! The \e pvDstAddr parameter is a void pointer to the beginning of the |
| //! location where the data will be transferred. |
| //! |
| //! The \e ulArbSize parameter is the arbitration size for the transfer, and |
| //! must be one of \b UDMA_ARB_1, \b UDMA_ARB_2, \b UDMA_ARB_4, and so on |
| //! up to \b UDMA_ARB_1024. This is used to select the arbitration size in |
| //! powers of 2, from 1 to 1024. |
| //! |
| //! The \e ulMode parameter is the mode to use for this transfer task. It |
| //! must be one of \b UDMA_MODE_BASIC, \b UDMA_MODE_AUTO, |
| //! \b UDMA_MODE_MEM_SCATTER_GATHER, or \b UDMA_MODE_PER_SCATTER_GATHER. Note |
| //! that normally all tasks will be one of the scatter-gather modes while the |
| //! last task is a task list will be AUTO or BASIC. |
| //! |
| //! This macro is intended to be used to initialize individual entries of |
| //! a structure of tDMAControlTable type, like this: |
| //! |
| //! \verbatim |
| //! tDMAControlTable MyTaskList[] = |
| //! { |
| //! uDMATaskStructEntry(Task1Count, UDMA_SIZE_8, |
| //! UDMA_SRC_INC_8, MySourceBuf, |
| //! UDMA_DST_INC_8, MyDestBuf, |
| //! UDMA_ARB_8, UDMA_MODE_MEM_SCATTER_GATHER), |
| //! uDMATaskStructEntry(Task2Count, ... ), |
| //! } |
| //! \endverbatim |
| //! |
| //! \return Nothing; this is not a function. |
| // |
| //***************************************************************************** |
| #define uDMATaskStructEntry(ulTransferCount, \ |
| ulItemSize, \ |
| ulSrcIncrement, \ |
| pvSrcAddr, \ |
| ulDstIncrement, \ |
| pvDstAddr, \ |
| ulArbSize, \ |
| ulMode) \ |
| { \ |
| (((ulSrcIncrement) == UDMA_SRC_INC_NONE) ? (void *)(pvSrcAddr) : \ |
| ((void *)(&((unsigned char *)(pvSrcAddr))[((ulTransferCount) << \ |
| ((ulSrcIncrement) >> 26)) - 1]))), \ |
| (((ulDstIncrement) == UDMA_DST_INC_NONE) ? (void *)(pvDstAddr) : \ |
| ((void *)(&((unsigned char *)(pvDstAddr))[((ulTransferCount) << \ |
| ((ulDstIncrement) >> 30)) - 1]))), \ |
| (ulSrcIncrement) | (ulDstIncrement) | (ulItemSize) | (ulArbSize) | \ |
| (((ulTransferCount) - 1) << 4) | \ |
| ((((ulMode) == UDMA_MODE_MEM_SCATTER_GATHER) || \ |
| ((ulMode) == UDMA_MODE_PER_SCATTER_GATHER)) ? \ |
| (ulMode) | UDMA_MODE_ALT_SELECT : (ulMode)), 0 \ |
| } |
| |
| //***************************************************************************** |
| // |
| // Close the Doxygen group. |
| //! @} |
| // |
| //***************************************************************************** |
| |
| //***************************************************************************** |
| // |
| // 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 |
| |
| //***************************************************************************** |
| // |
| // 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 INT_UDMA |
| #define UDMA_INT_ERR INT_UDMAERR |
| |
| //***************************************************************************** |
| |
| //***************************************************************************** |
| // |
| // 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 |
| |
| //***************************************************************************** |
| // |
| // Values that can be passed to uDMAChannelAssign() to select peripheral |
| // mapping for each channel. The channels named RESERVED may be assigned |
| // to a peripheral in future parts. |
| // |
| //***************************************************************************** |
| // |
| // Channel 0 |
| // |
| #define UDMA_CH0_TIMERA0_A 0x00000000 |
| #define UDMA_CH0_SHAMD5_CIN 0x00010000 |
| #define UDMA_CH0_SW 0x00030000 |
| |
| // |
| // Channel 1 |
| // |
| #define UDMA_CH1_TIMERA0_B 0x00000001 |
| #define UDMA_CH1_SHAMD5_DIN 0x00010001 |
| #define UDMA_CH1_SW 0x00030001 |
| |
| // |
| // Channel 2 |
| // |
| #define UDMA_CH2_TIMERA1_A 0x00000002 |
| #define UDMA_CH2_SHAMD5_COUT 0x00010002 |
| #define UDMA_CH2_SW 0x00030002 |
| |
| // |
| // Channel 3 |
| // |
| #define UDMA_CH3_TIMERA1_B 0x00000003 |
| #define UDMA_CH3_DES_CIN 0x00010003 |
| #define UDMA_CH3_SW 0x00030003 |
| |
| // |
| // Channel 4 |
| // |
| #define UDMA_CH4_TIMERA2_A 0x00000004 |
| #define UDMA_CH4_DES_DIN 0x00010004 |
| #define UDMA_CH4_I2S_RX 0x00020004 |
| #define UDMA_CH4_SW 0x00030004 |
| |
| // |
| // Channel 5 |
| // |
| #define UDMA_CH5_TIMERA2_B 0x00000005 |
| #define UDMA_CH5_DES_DOUT 0x00010005 |
| #define UDMA_CH5_I2S_TX 0x00020005 |
| #define UDMA_CH5_SW 0x00030005 |
| |
| // |
| // Channel 6 |
| // |
| #define UDMA_CH6_TIMERA3_A 0x00000006 |
| #define UDMA_CH6_GSPI_RX 0x00010006 |
| #define UDMA_CH6_GPIOA2 0x00020006 |
| #define UDMA_CH6_SW 0x00030006 |
| |
| // |
| // Channel 7 |
| // |
| #define UDMA_CH7_TIMERA3_B 0x00000007 |
| #define UDMA_CH7_GSPI_TX 0x00010007 |
| #define UDMA_CH7_GPIOA3 0x00020007 |
| #define UDMA_CH7_SW 0x00030007 |
| |
| |
| // |
| // Channel 8 |
| // |
| #define UDMA_CH8_UARTA0_RX 0x00000008 |
| #define UDMA_CH8_TIMERA0_A 0x00010008 |
| #define UDMA_CH8_TIMERA2_A 0x00020008 |
| #define UDMA_CH8_SW 0x00030008 |
| |
| |
| // |
| // Channel 9 |
| // |
| #define UDMA_CH9_UARTA0_TX 0x00000009 |
| #define UDMA_CH9_TIMERA0_B 0x00010009 |
| #define UDMA_CH9_TIMERA2_B 0x00020009 |
| #define UDMA_CH9_SW 0x00030009 |
| |
| |
| // |
| // Channel 10 |
| // |
| #define UDMA_CH10_UARTA1_RX 0x0000000A |
| #define UDMA_CH10_TIMERA1_A 0x0001000A |
| #define UDMA_CH10_TIMERA3_A 0x0002000A |
| #define UDMA_CH10_SW 0x0003000A |
| |
| // |
| // Channel 11 |
| // |
| #define UDMA_CH11_UARTA1_TX 0x0000000B |
| #define UDMA_CH11_TIMERA1_B 0x0001000B |
| #define UDMA_CH11_TIMERA3_B 0x0002000B |
| #define UDMA_CH11_SW 0x0003000B |
| |
| |
| // |
| // Channel 12 |
| // |
| #define UDMA_CH12_LSPI_RX 0x0000000C |
| #define UDMA_CH12_SW 0x0003000C |
| |
| |
| // |
| // Channel 13 |
| // |
| #define UDMA_CH13_LSPI_TX 0x0000000D |
| #define UDMA_CH13_SW 0x0003000D |
| |
| |
| // |
| // Channel 14 |
| // |
| #define UDMA_CH14_ADC_CH0 0x0000000E |
| #define UDMA_CH14_SDHOST_RX 0x0002000E |
| #define UDMA_CH14_SW 0x0003000E |
| |
| |
| // |
| // Channel 15 |
| // |
| #define UDMA_CH15_ADC_CH1 0x0000000F |
| #define UDMA_CH15_SDHOST_TX 0x0002000F |
| #define UDMA_CH15_SW 0x0003000F |
| |
| |
| // |
| // Channel 16 |
| // |
| #define UDMA_CH16_ADC_CH2 0x00000010 |
| #define UDMA_CH16_TIMERA2_A 0x00010010 |
| #define UDMA_CH16_SW 0x00030010 |
| |
| |
| // |
| // Channel 17 |
| // |
| #define UDMA_CH17_ADC_CH3 0x00000011 |
| #define UDMA_CH17_TIMERA2_B 0x00010011 |
| #define UDMA_CH17_SW 0x00030011 |
| |
| // |
| // Channel 18 |
| // |
| #define UDMA_CH18_GPIOA0 0x00000012 |
| #define UDMA_CH18_AES_CIN 0x00010012 |
| #define UDMA_CH18_I2S_RX 0x00020012 |
| #define UDMA_CH18_SW 0x00030012 |
| |
| |
| // |
| // Channel 19 |
| // |
| #define UDMA_CH19_GPOIA1 0x00000013 |
| #define UDMA_CH19_AES_COUT 0x00010013 |
| #define UDMA_CH19_I2S_TX 0x00020013 |
| #define UDMA_CH19_SW 0x00030013 |
| |
| |
| // |
| // Channel 20 |
| // |
| #define UDMA_CH20_GPIOA2 0x00000014 |
| #define UDMA_CH20_AES_DIN 0x00010014 |
| #define UDMA_CH20_SW 0x00030014 |
| |
| |
| // |
| // Channel 21 |
| // |
| #define UDMA_CH21_GPIOA3 0x00000015 |
| #define UDMA_CH21_AES_DOUT 0x00010015 |
| #define UDMA_CH21_SW 0x00030015 |
| |
| |
| // |
| // Channel 22 |
| // |
| #define UDMA_CH22_CAMERA 0x00000016 |
| #define UDMA_CH22_GPIOA4 0x00010016 |
| #define UDMA_CH22_SW 0x00030016 |
| |
| |
| // |
| // Channel 23 |
| // |
| #define UDMA_CH23_SDHOST_RX 0x00000017 |
| #define UDMA_CH23_TIMERA3_A 0x00010017 |
| #define UDMA_CH23_TIMERA2_A 0x00020017 |
| #define UDMA_CH23_SW 0x00030017 |
| |
| |
| // |
| // Channel 24 |
| // |
| #define UDMA_CH24_SDHOST_TX 0x00000018 |
| #define UDMA_CH24_TIMERA3_B 0x00010018 |
| #define UDMA_CH24_TIMERA2_B 0x00020018 |
| #define UDMA_CH24_SW 0x00030018 |
| |
| |
| // |
| // Channel 25 |
| // |
| #define UDMA_CH25_SSPI_RX 0x00000019 |
| #define UDMA_CH25_I2CA0_RX 0x00010019 |
| #define UDMA_CH25_SW 0x00030019 |
| |
| |
| // |
| // Channel 26 |
| // |
| #define UDMA_CH26_SSPI_TX 0x0000001A |
| #define UDMA_CH26_I2CA0_TX 0x0001001A |
| #define UDMA_CH26_SW 0x0003001A |
| |
| |
| // |
| // Channel 27 |
| // |
| #define UDMA_CH27_GPIOA0 0x0001001B |
| #define UDMA_CH27_SW 0x0003001B |
| |
| |
| // |
| // Channel 28 |
| // |
| #define UDMA_CH28_GPIOA1 0x0001001C |
| #define UDMA_CH28_SW 0x0003001C |
| |
| |
| // |
| // Channel 29 |
| // |
| #define UDMA_CH29_GPIOA4 0x0000001D |
| #define UDMA_CH29_SW 0x0003001D |
| |
| |
| // |
| // Channel 30 |
| // |
| #define UDMA_CH30_GSPI_RX 0x0000001E |
| #define UDMA_CH30_SDHOST_RX 0x0001001E |
| #define UDMA_CH30_I2CA0_RX 0x0002001E |
| #define UDMA_CH30_SW 0x0003001E |
| |
| |
| // |
| // Channel 31 |
| // |
| #define UDMA_CH31_GSPI_TX 0x0000001F |
| #define UDMA_CH31_SDHOST_TX 0x0001001F |
| #define UDMA_CH31_I2CA0_RX 0x0002001F |
| #define UDMA_CH31_SW 0x0003001F |
| |
| //***************************************************************************** |
| // |
| // The following are defines for the Micro Direct Memory Access (uDMA) offsets. |
| // |
| //***************************************************************************** |
| #define UDMA_O_SRCENDP 0x00000000 // DMA Channel Source Address End |
| // Pointer |
| #define UDMA_O_DSTENDP 0x00000004 // DMA Channel Destination Address |
| // End Pointer |
| #define UDMA_O_CHCTL 0x00000008 // DMA Channel Control Word |
| |
| //***************************************************************************** |
| // |
| // The following are defines for the bit fields in the UDMA_O_SRCENDP register. |
| // |
| //***************************************************************************** |
| #define UDMA_SRCENDP_ADDR_M 0xFFFFFFFF // Source Address End Pointer |
| #define UDMA_SRCENDP_ADDR_S 0 |
| |
| //***************************************************************************** |
| // |
| // The following are defines for the bit fields in the UDMA_O_DSTENDP register. |
| // |
| //***************************************************************************** |
| #define UDMA_DSTENDP_ADDR_M 0xFFFFFFFF // Destination Address End Pointer |
| #define UDMA_DSTENDP_ADDR_S 0 |
| |
| //***************************************************************************** |
| // |
| // The following are defines for the bit fields in the UDMA_O_CHCTL register. |
| // |
| //***************************************************************************** |
| #define UDMA_CHCTL_DSTINC_M 0xC0000000 // Destination Address Increment |
| #define UDMA_CHCTL_DSTINC_8 0x00000000 // Byte |
| #define UDMA_CHCTL_DSTINC_16 0x40000000 // Half-word |
| #define UDMA_CHCTL_DSTINC_32 0x80000000 // Word |
| #define UDMA_CHCTL_DSTINC_NONE 0xC0000000 // No increment |
| #define UDMA_CHCTL_DSTSIZE_M 0x30000000 // Destination Data Size |
| #define UDMA_CHCTL_DSTSIZE_8 0x00000000 // Byte |
| #define UDMA_CHCTL_DSTSIZE_16 0x10000000 // Half-word |
| #define UDMA_CHCTL_DSTSIZE_32 0x20000000 // Word |
| #define UDMA_CHCTL_SRCINC_M 0x0C000000 // Source Address Increment |
| #define UDMA_CHCTL_SRCINC_8 0x00000000 // Byte |
| #define UDMA_CHCTL_SRCINC_16 0x04000000 // Half-word |
| #define UDMA_CHCTL_SRCINC_32 0x08000000 // Word |
| #define UDMA_CHCTL_SRCINC_NONE 0x0C000000 // No increment |
| #define UDMA_CHCTL_SRCSIZE_M 0x03000000 // Source Data Size |
| #define UDMA_CHCTL_SRCSIZE_8 0x00000000 // Byte |
| #define UDMA_CHCTL_SRCSIZE_16 0x01000000 // Half-word |
| #define UDMA_CHCTL_SRCSIZE_32 0x02000000 // Word |
| #define UDMA_CHCTL_ARBSIZE_M 0x0003C000 // Arbitration Size |
| #define UDMA_CHCTL_ARBSIZE_1 0x00000000 // 1 Transfer |
| #define UDMA_CHCTL_ARBSIZE_2 0x00004000 // 2 Transfers |
| #define UDMA_CHCTL_ARBSIZE_4 0x00008000 // 4 Transfers |
| #define UDMA_CHCTL_ARBSIZE_8 0x0000C000 // 8 Transfers |
| #define UDMA_CHCTL_ARBSIZE_16 0x00010000 // 16 Transfers |
| #define UDMA_CHCTL_ARBSIZE_32 0x00014000 // 32 Transfers |
| #define UDMA_CHCTL_ARBSIZE_64 0x00018000 // 64 Transfers |
| #define UDMA_CHCTL_ARBSIZE_128 0x0001C000 // 128 Transfers |
| #define UDMA_CHCTL_ARBSIZE_256 0x00020000 // 256 Transfers |
| #define UDMA_CHCTL_ARBSIZE_512 0x00024000 // 512 Transfers |
| #define UDMA_CHCTL_ARBSIZE_1024 0x00028000 // 1024 Transfers |
| #define UDMA_CHCTL_XFERSIZE_M 0x00003FF0 // Transfer Size (minus 1) |
| #define UDMA_CHCTL_NXTUSEBURST 0x00000008 // Next Useburst |
| #define UDMA_CHCTL_XFERMODE_M 0x00000007 // uDMA Transfer Mode |
| #define UDMA_CHCTL_XFERMODE_STOP \ |
| 0x00000000 // Stop |
| #define UDMA_CHCTL_XFERMODE_BASIC \ |
| 0x00000001 // Basic |
| #define UDMA_CHCTL_XFERMODE_AUTO \ |
| 0x00000002 // Auto-Request |
| #define UDMA_CHCTL_XFERMODE_PINGPONG \ |
| 0x00000003 // Ping-Pong |
| #define UDMA_CHCTL_XFERMODE_MEM_SG \ |
| 0x00000004 // Memory Scatter-Gather |
| #define UDMA_CHCTL_XFERMODE_MEM_SGA \ |
| 0x00000005 // Alternate Memory Scatter-Gather |
| #define UDMA_CHCTL_XFERMODE_PER_SG \ |
| 0x00000006 // Peripheral Scatter-Gather |
| #define UDMA_CHCTL_XFERMODE_PER_SGA \ |
| 0x00000007 // Alternate Peripheral |
| // Scatter-Gather |
| #define UDMA_CHCTL_XFERSIZE_S 4 |
| |
| |
| |
| //***************************************************************************** |
| // |
| // 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 ulChannelNum); |
| extern void uDMAChannelDisable(unsigned long ulChannelNum); |
| extern tBoolean uDMAChannelIsEnabled(unsigned long ulChannelNum); |
| extern void uDMAControlBaseSet(void *pControlTable); |
| extern void *uDMAControlBaseGet(void); |
| extern void *uDMAControlAlternateBaseGet(void); |
| extern void uDMAChannelRequest(unsigned long ulChannelNum); |
| extern void uDMAChannelAttributeEnable(unsigned long ulChannelNum, |
| unsigned long ulAttr); |
| extern void uDMAChannelAttributeDisable(unsigned long ulChannelNum, |
| unsigned long ulAttr); |
| extern unsigned long uDMAChannelAttributeGet(unsigned long ulChannelNum); |
| extern void uDMAChannelControlSet(unsigned long ulChannelStructIndex, |
| unsigned long ulControl); |
| extern void uDMAChannelTransferSet(unsigned long ulChannelStructIndex, |
| unsigned long ulMode, void *pvSrcAddr, |
| void *pvDstAddr, |
| unsigned long ulTransferSize); |
| extern void uDMAChannelScatterGatherSet(unsigned long ulChannelNum, |
| unsigned ulTaskCount, void *pvTaskList, |
| unsigned long ulIsPeriphSG); |
| extern unsigned long uDMAChannelSizeGet(unsigned long ulChannelStructIndex); |
| extern unsigned long uDMAChannelModeGet(unsigned long ulChannelStructIndex); |
| extern void uDMAIntRegister(unsigned long ulIntChannel, |
| void (*pfnHandler)(void)); |
| extern void uDMAIntUnregister(unsigned long ulIntChannel); |
| extern unsigned long uDMAIntStatus(void); |
| extern void uDMAIntClear(unsigned long ulChanMask); |
| extern void uDMAChannelAssign(unsigned long ulMapping); |
| |
| //***************************************************************************** |
| // |
| // Mark the end of the C bindings section for C++ compilers. |
| // |
| //***************************************************************************** |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // __UDMA_H__ |