123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- /** @file dma.h
- * @brief DMA Driver Definition File
- * @date 29.May.2013
- * @version 03.05.02
- *
- */
- /* (c) Texas Instruments 2009-2013, All rights reserved. */
- #ifndef __DMA_H__
- #define __DMA_H__
- #include "reg_dma.h"
- /* dma configuration definitions */
- #define BLOCK_TRANSFER 1U
- #define FRAME_TRANSFER 0U
- #define AUTOINIT_ON 1U
- #define AUTOINIT_OFF 0U
- #define ADDR_FIXED 0U
- #define ADDR_INC1 1U
- #define ADDR_RESERVED 2U
- #define ADDR_OFFSET 3U
- #define INTERRUPT_ENABLE 1U
- #define INTERRUPT_DISABLE 0U
- /*Bit Masks*/
- #define DMA_GCTRL_BUSBUSY (1U << 14U)
- /** @enum dmaREQTYPE
- * @brief DMA TRANSFER Type definitions
- *
- * Used to define DMA transfer type
- */
- enum dmaREQTYPE
- {
- DMA_HW = 0x0U, /**< Hardware trigger */
- DMA_SW = 0x1U /**< Software trigger */
- };
- /** @enum dmaCHANNEL
- * @brief DMA CHANNEL definitions
- *
- * Used to define DMA Channel Number
- */
- enum dmaCHANNEL
- {
- DMA_CH0 = 0x00U,
- DMA_CH1 = 0x01U,
- DMA_CH2 = 0x02U,
- DMA_CH3 = 0x03U,
- DMA_CH4 = 0x04U,
- DMA_CH5 = 0x05U,
- DMA_CH6 = 0x06U,
- DMA_CH7 = 0x07U,
- DMA_CH8 = 0x08U,
- DMA_CH9 = 0x09U,
- DMA_CH10 = 0x0AU,
- DMA_CH11 = 0x0BU,
- DMA_CH12 = 0x0CU,
- DMA_CH13 = 0x0DU,
- DMA_CH14 = 0x0EU,
- DMA_CH15 = 0x0FU,
- DMA_CH16 = 0x10U,
- DMA_CH17 = 0x11U,
- DMA_CH18 = 0x12U,
- DMA_CH19 = 0x13U,
- DMA_CH20 = 0x14U,
- DMA_CH21 = 0x15U,
- DMA_CH22 = 0x16U,
- DMA_CH23 = 0x17U,
- DMA_CH24 = 0x18U,
- DMA_CH25 = 0x19U,
- DMA_CH26 = 0x1AU,
- DMA_CH27 = 0x1BU,
- DMA_CH28 = 0x1CU,
- DMA_CH29 = 0x1DU,
- DMA_CH30 = 0x1EU,
- DMA_CH31 = 0x1FU,
- DMA_CH32 = 0x20U
- };
- /** @enum dmaACCESS
- * @brief DMA ACESS WIDTH definitions
- *
- * Used to define DMA access width
- */
- typedef enum dmaACCESS
- {
- ACCESS_8_BIT = 0U,
- ACCESS_16_BIT = 1U,
- ACCESS_32_BIT = 2U,
- ACCESS_64_BIT = 3U
- }dmaACCESS_t;
- /** @enum dmaPRIORITY
- * @brief DMA Channel Priority
- *
- * Used to define to which priority queue a DMA channel is assigned to
- */
- typedef enum dmaPRIORITY
- {
- LOWPRIORITY = 0U,
- HIGHPRIORITY = 1U
- }dmaPRIORITY_t;
- /** @enum dmaREGION
- * @brief DMA Memory Protection Region
- *
- * Used to define DMA Memory Protection Region
- */
- typedef enum dmaREGION
- {
- DMA_REGION0 = 0U,
- DMA_REGION1 = 1U,
- DMA_REGION2 = 2U,
- DMA_REGION3 = 3U
- }dmaREGION_t;
- /** @enum dmaRegionAccess
- * @brief DMA Memory Protection Region Access
- *
- * Used to define access permission of DMA memory protection regions
- */
- typedef enum dmaRegionAccess
- {
- FULLACCESS = 0U,
- READONLY = 1U,
- WRITEONLY = 2U,
- NOACCESS = 3U
- }dmaRegionAccess_t;
- /** @enum dmaInterrupt
- * @brief DMA Interrupt
- *
- * Used to define DMA interrupts
- */
- typedef enum dmaInterrupt
- {
- FTC = 1U, /**< Frame transfer complete Interrupt */
- LFS = 2U, /**< Last frame transfer started Interrupt */
- HBC = 3U, /**< First half of block complete Interrupt */
- BTC = 4U /**< Block transfer complete Interrupt */
- }dmaInterrupt_t;
- /** @struct g_dmaCTRL
- * @brief Interrupt mode globals
- *
- */
- typedef struct dmaCTRLPKT
- {
- uint32 SADD; /* initial source address */
- uint32 DADD; /* initial destination address */
- uint32 CHCTRL; /* channel count */
- uint32 FRCNT; /* frame count */
- uint32 ELCNT; /* element count */
- uint32 ELDOFFSET; /* element destination offset */
- uint32 ELSOFFSET; /* element source offset */
- uint32 FRDOFFSET; /* frame detination offset */
- uint32 FRSOFFSET; /* frame source offset */
- uint32 PORTASGN; /* dma port */
- uint32 RDSIZE; /* read element size */
- uint32 WRSIZE; /* write element size */
- uint32 TTYPE; /* trigger type - frame/block */
- uint32 ADDMODERD; /* addresssing mode for source */
- uint32 ADDMODEWR; /* addresssing mode for destination */
- uint32 AUTOINIT; /* auto-init mode */
- uint32 COMBO; /* next ctrl packet trigger */
- } g_dmaCTRL;
- typedef volatile struct
- {
-
- struct /* 0x000-0x400 */
- {
- uint32 ISADDR;
- uint32 IDADDR;
- uint32 ITCOUNT;
- uint32 rsvd1;
- uint32 CHCTRL;
- uint32 EIOFF;
- uint32 FIOFF;
- uint32 rsvd2;
- }PCP[32U];
- struct /* 0x400-0x800 */
- {
- uint32 res[256U];
- } RESERVED;
- struct /* 0x800-0xA00 */
- {
- uint32 CSADDR;
- uint32 CDADDR;
- uint32 CTCOUNT;
- uint32 rsvd3;
- }WCP[32U];
- } dmaRAMBASE_t;
- #define dmaRAMREG ((dmaRAMBASE_t *)0xFFF80000U)
- /**
- * @defgroup DMA DMA
- * @brief Direct Memory Access Controller
- *
- * The DMA controller is used to transfer data between two locations in the memory map in the background
- * of CPU operations. Typically, the DMA is used to:
- * - Transfer blocks of data between external and internal data memories
- * - Restructure portions of internal data memory
- * - Continually service a peripheral
- * - Page program sections to internal program memory
- *
- * Related files:
- * - reg_dma.h
- * - sys_dma.h
- * - sys_dma.c
- *
- * @addtogroup DMA
- * @{
- */
- /* DMA Interface Functions */
- void dmaEnable(void);
- void dmaDisable(void);
- void dmaSetCtrlPacket(uint32 channel, g_dmaCTRL g_dmaCTRLPKT);
- void dmaSetChEnable(uint32 channel,uint32 type);
- void dmaReqAssign(uint32 channel,uint32 reqline);
- uint32 dmaGetReq(uint32 channel);
- void dmaSetPriority(uint32 channel, dmaPRIORITY_t priority);
- void dmaEnableInterrupt(uint32 channel, dmaInterrupt_t inttype);
- void dmaDisableInterrupt(uint32 channel, dmaInterrupt_t inttype);
- void dmaDefineRegion(dmaREGION_t region, uint32 start_add, uint32 end_add);
- void dmaEnableRegion(dmaREGION_t region, dmaRegionAccess_t access, boolean intenable);
- void dmaDisableRegion(dmaREGION_t region);
- void dmaEnableParityCheck(void);
- void dmaDisableParityCheck(void);
- /** @fn void dmaGroupANotification(dmaInterrupt_t inttype, sint32 channel)
- * @brief Interrupt callback
- * @param[in] inttype Interrupt type
- * - FTC
- * - LFS
- * - HBC
- * - BTC
- * @param[in] channel channel number 0..15
- * This is a callback that is provided by the application and is called apon
- * an interrupt. The parameter passed to the callback is a copy of the
- * interrupt flag register.
- */
- void dmaGroupANotification(dmaInterrupt_t inttype, sint32 channel);
- /**@}*/
- #endif
|