| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- /**
- * \file edma.h
- *
- * \brief This file contains the function prototypes for the device
- * abstraction layer for EDMA. It also contains some
- * related macro definitions and some files to be included.
- */
- /*
- * Copyright (C) 2010 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 __EDMA_H__
- #define __EDMA_H__
- #include <stdio.h>
- #include <stdlib.h>
- #include "hw_edma3cc.h"
- #include "hw_edma3tc.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- //***********************************************************************
- // Values that can be used by the application for configuration via APIs
- //***********************************************************************/
- /** Maximum number of EDMA Shadow regions available */
- #define EDMA3_MAX_REGIONS (2u)
- /** Number of PaRAM Sets available */
- #define EDMA3_NUM_PARAMSET (128u)
- /** Number of Event Queues available */
- #define EDMA3_0_NUM_EVTQUE (2u)
- /** Number of Transfer Controllers available */
- #define EDMA3_0_NUM_TC (2u)
- /** Interrupt no. for Transfer Completion */
- #define EDMA3_0_CC_XFER_COMPLETION_INT (11u)
- /** Interrupt no. for CC Error */
- #define EDMA3_0_CC0_ERRINT (12u)
- /** Interrupt no. for TCs Error */
- #define EDMA3_0_TC0_ERRINT (13u)
- #define EDMA3_0_TC1_ERRINT (32u)
- #define EDMA3CC_DMA_CHANNELS (32u)
- #define EDMA3CC_QDMA_CHANNELS (8u)
- /** DMAQNUM bits Clear */
- #define EDMA3CC_DMAQNUM_CLR(chNum) ( ~ (0x7u << (((chNum) % 8u) \
- * 4u)))
- /** DMAQNUM bits Set */
- #define EDMA3CC_DMAQNUM_SET(chNum,queNum) ((0x7u & (queNum)) << \
- (((chNum) % 8u) * 4u))
- /** QDMAQNUM bits Clear */
- #define EDMA3CC_QDMAQNUM_CLR(chNum) ( ~ (0x7u << ((chNum) * 4u)))
- /** QDMAQNUM bits Set */
- #define EDMA3CC_QDMAQNUM_SET(chNum,queNum) ((0x7u & (queNum)) << \
- ((chNum) * 4u))
- #define EDMA3CC_QCHMAP_PAENTRY_CLR (~EDMA3CC_QCHMAP_PAENTRY)
- /** QCHMAP-PaRAMEntry bitfield Set */
- #define EDMA3CC_QCHMAP_PAENTRY_SET(paRAMId) (((EDMA3CC_QCHMAP_PAENTRY >> \
- EDMA3CC_QCHMAP_PAENTRY_SHIFT) & \
- (paRAMId)) << \
- EDMA3CC_QCHMAP_PAENTRY_SHIFT)
- /** QCHMAP-TrigWord bitfield Clear */
- #define EDMA3CC_QCHMAP_TRWORD_CLR (~EDMA3CC_QCHMAP_TRWORD)
- /** QCHMAP-TrigWord bitfield Set */
- #define EDMA3CC_QCHMAP_TRWORD_SET(paRAMId) (((EDMA3CC_QCHMAP_TRWORD >> \
- EDMA3CC_QCHMAP_TRWORD_SHIFT) & \
- (paRAMId)) << \
- EDMA3CC_QCHMAP_TRWORD_SHIFT)
- /** OPT-TCC bitfield Clear */
- #define EDMA3CC_OPT_TCC_CLR (~EDMA3CC_OPT_TCC)
- /** OPT-TCC bitfield Set */
- #define EDMA3CC_OPT_TCC_SET(tcc) (((EDMA3CC_OPT_TCC >> \
- EDMA3CC_OPT_TCC_SHIFT) & \
- (tcc)) << EDMA3CC_OPT_TCC_SHIFT)
- #define EDMA3_SET_ALL_BITS (0xFFFFFFFFu)
- #define EDMA3_CLR_ALL_BITS (0x00000000u)
- #define EDMA3CC_COMPL_HANDLER_RETRY_COUNT (10u)
- #define EDMA3CC_ERR_HANDLER_RETRY_COUNT (10u)
- #define EDMA3_TRIG_MODE_MANUAL (0u)
- #define EDMA3_TRIG_MODE_QDMA (1u)
- #define EDMA3_TRIG_MODE_EVENT (2u)
- #define EDMA3_CHANNEL_TYPE_DMA (0u)
- #define EDMA3_CHANNEL_TYPE_QDMA (1u)
- #define EDMA3_XFER_COMPLETE (0u)
- #define EDMA3_CC_DMA_EVT_MISS (1u)
- #define EDMA3_CC_QDMA_EVT_MISS (2u)
- #define EDMA3_SYNC_A (0u)
- #define EDMA3_SYNC_AB (1u)
- #define EDMA3CC_CLR_TCCERR EDMA3CC_CCERRCLR_TCCERR
- #define EDMA3CC_CLR_QTHRQ0 EDMA3CC_CCERRCLR_QTHRXCD0
- #define EDMA3CC_CLR_QTHRQ1 EDMA3CC_CCERRCLR_QTHRXCD1
- /* paRAMEntry Fields*/
- /**
- * The OPT field (Offset Address 0x0 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_OPT (0x0u)
- /**
- * The SRC field (Offset Address 0x4 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_SRC (0x1u)
- /**
- * The (ACNT+BCNT) field (Offset Address 0x8 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_ACNT_BCNT (0x2u)
- /**
- * The DST field (Offset Address 0xC Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_DST (0x3u)
- /**
- * The (SRCBIDX+DSTBIDX) field (Offset Address 0x10 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_SRC_DST_BIDX (0x4u)
- /**
- * The (LINK+BCNTRLD) field (Offset Address 0x14 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_LINK_BCNTRLD (0x5u)
- /**
- * The (SRCCIDX+DSTCIDX) field (Offset Address 0x18 Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_SRC_DST_CIDX (0x6u)
- /**
- * The (CCNT+RSVD) field (Offset Address 0x1C Bytes)
- */
- #define EDMA3CC_PARAM_ENTRY_CCNT (0x7u)
- /** The offset for each PaRAM Entry field */
- #define EDMA3CC_PARAM_FIELD_OFFSET (0x4u)
- /** Number of PaRAM Entry fields
- * OPT, SRC, A_B_CNT, DST, SRC_DST_BIDX, LINK_BCNTRLD, SRC_DST_CIDX
- * and CCNT
- */
- #define EDMA3CC_PARAM_ENTRY_FIELDS (0x8u)
- #define EDMA_REVID_AM335X (0x02u)
- #if defined(am335x) || defined(am335x_13x13) || defined(am335x_15x15) || \
- defined(c6a811x) || defined(am386x) || defined(c6741x)
- #define SOC_EDMA3_NUM_DMACH 64
- #define SOC_EDMA3_NUM_QDMACH 8
- #define SOC_EDMA3_NUM_PARAMSETS 256
- #define SOC_EDMA3_NUM_EVQUE 4
- #define SOC_EDMA3_CHMAPEXIST 0
- #define SOC_EDMA3_NUM_REGIONS 8
- #define SOC_EDMA3_MEMPROTECT 0
- #endif
- #if defined(am1808) || defined(omapl138) || defined(c6748)
- #define SOC_EDMA3_NUM_DMACH 32
- #define SOC_EDMA3_NUM_QDMACH 8
- #define SOC_EDMA3_NUM_PARAMSETS 128
- #define SOC_EDMA3_NUM_EVQUE 2
- #define SOC_EDMA3_CHMAPEXIST 0
- #define SOC_EDMA3_NUM_REGIONS 4
- #define SOC_EDMA3_MEMPROTECT 0
- #endif
- /** Number of TCCS available */
- #define EDMA3_NUM_TCC SOC_EDMA3_NUM_DMACH
- /**
- * \brief EDMA3 Parameter RAM Set in User Configurable format
- *
- * This is a mapping of the EDMA3 PaRAM set provided to the user
- * for ease of modification of the individual fields
- */
- typedef struct EDMA3CCPaRAMEntry {
- /** OPT field of PaRAM Set */
- unsigned int opt;
- /**
- * \brief Starting byte address of Source
- * For FIFO mode, srcAddr must be a 256-bit aligned address.
- */
- unsigned int srcAddr;
- /**
- * \brief Number of bytes in each Array (ACNT)
- */
- unsigned short aCnt;
- /**
- * \brief Number of Arrays in each Frame (BCNT)
- */
- unsigned short bCnt;
- /**
- * \brief Starting byte address of destination
- * For FIFO mode, destAddr must be a 256-bit aligned address.
- * i.e. 5 LSBs should be 0.
- */
- unsigned int destAddr;
- /**
- * \brief Index between consec. arrays of a Source Frame (SRCBIDX)
- */
- short srcBIdx;
- /**
- * \brief Index between consec. arrays of a Destination Frame (DSTBIDX)
- */
- short destBIdx;
- /**
- * \brief Address for linking (AutoReloading of a PaRAM Set)
- * This must point to a valid aligned 32-byte PaRAM set
- * A value of 0xFFFF means no linking
- */
- unsigned short linkAddr;
- /**
- * \brief Reload value of the numArrInFrame (BCNT)
- * Relevant only for A-sync transfers
- */
- unsigned short bCntReload;
- /**
- * \brief Index between consecutive frames of a Source Block (SRCCIDX)
- */
- short srcCIdx;
- /**
- * \brief Index between consecutive frames of a Dest Block (DSTCIDX)
- */
- short destCIdx;
- /**
- * \brief Number of Frames in a block (CCNT)
- */
- unsigned short cCnt;
- /**
- * \brief This field is Reserved. Write zero to this field.
- */
- unsigned short rsvd;
- }EDMA3CCPaRAMEntry;
- /*
- ** Structure to store the EDMA context
- */
- typedef struct edmaContext {
- /* Channel mapping reg Val */
- unsigned int dchMap[64];
- /* DMA Queue Number Register Val */
- unsigned int dmaQNum[8];
-
- /* DMA Region Access Enable Register val */
- unsigned int regAccEnableLow;
- unsigned int regAccEnableHigh;
- /* Event Set Register value */
- unsigned int eventSetRegLow;
- unsigned int eventSetRegHigh;
-
- /* Enable Event Set Register value */
- unsigned int enableEvtSetRegLow;
- unsigned int enableEvtSetRegHigh;
-
- /* Interrupt Enable Set Register value */
- unsigned int intEnableSetRegLow;
- unsigned int intEnableSetRegHigh;
-
- struct EDMA3CCPaRAMEntry dmaParEntry[512];
-
- } EDMACONTEXT;
- /****************************************************************************
- ** API FUNCTION PROTOTYPES
- ****************************************************************************/
- void EDMA3Init(unsigned int baseAdd,
- unsigned int queNum);
- void EDMA3EnableChInShadowReg(unsigned int baseAdd,
- unsigned int chType,
- unsigned int chNum);
- void EDMA3DisableChInShadowReg(unsigned int baseAdd,
- unsigned int chType,
- unsigned int chNum);
- void EDMA3MapChToEvtQ(unsigned int baseAdd,
- unsigned int chType,
- unsigned int chNum,
- unsigned int evtQNum);
- void EDMA3UnmapChToEvtQ(unsigned int baseAdd,
- unsigned int chType,
- unsigned int chNum);
- void EDMA3MapQdmaChToPaRAM(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int *paRAMId);
- void EDMA3SetQdmaTrigWord(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int trigWord);
- void EDMA3ClrMissEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3QdmaClrMissEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3ClrCCErr(unsigned int baseAdd,
- unsigned int Flags);
- void EDMA3SetEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3ClrEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3EnableDmaEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3DisableDmaEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3EnableQdmaEvt(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3DisableQdmaEvt(unsigned int baseAdd,
- unsigned int chNum);
- unsigned int EDMA3GetIntrStatus(unsigned int baseAdd);
- void EDMA3EnableEvtIntr(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3DisableEvtIntr(unsigned int baseAdd,
- unsigned int chNum);
- void EDMA3ClrIntr(unsigned int baseAdd, unsigned int value);
- void EDMA3GetPaRAM(unsigned int baseAdd,
- unsigned int chNum,
- EDMA3CCPaRAMEntry* currPaRAM);
- void EDMA3QdmaGetPaRAM(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int paRAMId,
- EDMA3CCPaRAMEntry* currPaRAM);
- void EDMA3SetPaRAM(unsigned int baseAdd,
- unsigned int chNum,
- EDMA3CCPaRAMEntry* newPaRAM);
- void EDMA3QdmaSetPaRAM(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int paRAMId,
- EDMA3CCPaRAMEntry* newPaRAM);
- void EDMA3QdmaSetPaRAMEntry(unsigned int baseAdd,
- unsigned int paRAMId,
- unsigned int paRAMEntry,
- unsigned int newPaRAMEntryVal);
- unsigned int EDMA3QdmaGetPaRAMEntry(unsigned int baseAdd,
- unsigned int paRAMId,
- unsigned int paRAMEntry);
- unsigned int EDMA3RequestChannel(unsigned int baseAdd, unsigned int chType,
- unsigned int chNum, unsigned int tccNum,
- unsigned int evtQNum);
- unsigned int EDMA3FreeChannel(unsigned int baseAdd, unsigned int chType,
- unsigned int chNum, unsigned int trigMode,
- unsigned int tccNum, unsigned int evtQNum);
- unsigned int EDMA3EnableTransfer(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int trigMode);
- unsigned int EDMA3DisableTransfer(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int trigMode);
- void EDMA3ClearErrorBits(unsigned int baseAdd,
- unsigned int chNum,
- unsigned int evtQNum);
- unsigned int EDMA3GetCCErrStatus(unsigned int baseAdd);
- unsigned int EDMA3GetErrIntrStatus(unsigned int baseAdd);
- unsigned int EDMA3QdmaGetErrIntrStatus(unsigned int baseAdd);
- void EDMA3Deinit(unsigned int baseAdd,
- unsigned int queNum);
- unsigned int EDMAVersionGet(void);
- unsigned int EDMA3PeripheralIdGet(unsigned int baseAdd);
- unsigned int EDMA3IntrStatusHighGet(unsigned int baseAdd);
- unsigned int EDMA3ErrIntrHighStatusGet(unsigned int baseAdd);
- void EDMA3ChannelToParamMap(unsigned int baseAdd,
- unsigned int channel,
- unsigned int paramSet);
- extern void EDMA3ContextSave(unsigned int baseAddr,
- EDMACONTEXT *edmaCntxPtr);
- extern void EDMA3ContextRestore(unsigned int baseAddr,
- EDMACONTEXT *edmaCntxPtr);
- #ifdef __cplusplus
- }
- #endif
- #endif
- /* !! EOF !! */
|