664 lines
24 KiB
C
664 lines
24 KiB
C
|
//*****************************************************************************
|
||
|
//
|
||
|
// 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__
|