⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsdmaapi.h

📁 嵌入式系统关于串口传输、触摸屏、定时器、控制器、中断处理、音频控制等实验代码
💻 H
📖 第 1 页 / 共 2 页
字号:
    //elements to help me manage the memory

    XsDmaDeviceTypeT sourceDeviceType;
    XsDmaDeviceTypeT targetDeviceType;
    UINT32 signature;    // this is an embedded signature for a descriptor 
    
    // additional elements required for client usage
    UINT32 currentPhysicalAddr; // the physical address of this descriptor
    XsDmaDescriptorElementsTPT prevDescrP;
    UINT32 spare1;
    UINT32 spare2;
    
}XsDmaDescriptorElementsT;



/*
*******************************************************************************
Defines for the device name used in XsDmatoDevice_T structure
*******************************************************************************
*/

typedef enum XsDmaDeviceNamesE
{
    XSDMA_DN_MEMORY,
    XSDMA_DN_I2S,
    XSDMA_DN_BTUART,
    XSDMA_DN_FFUART,
    XSDMA_DN_AC97_MIC,
    XSDMA_DN_AC97_MODEM,
    XSDMA_DN_AC97_AUDIO,
    XSDMA_DN_SSP,
    XSDMA_DN_ICP,
    XSDMA_DN_STUART,
    XSDMA_DN_MMC,
    XSDMA_DN_USB_EP1,        // EP for Endpoint
    XSDMA_DN_USB_EP2,
    XSDMA_DN_USB_EP3,
    XSDMA_DN_USB_EP4,
    XSDMA_DN_USB_EP6,
    XSDMA_DN_USB_EP7,
    XSDMA_DN_USB_EP8,
    XSDMA_DN_USB_EP9,
    XSDMA_DN_USB_EP11,
    XSDMA_DN_USB_EP12,
    XSDMA_DN_USB_EP13,
    XSDMA_DN_USB_EP14
} XsDmaDeviceNamesT;

/*
*******************************************************************************
    Constants for use in identifying deviceName as source or target
*******************************************************************************
*/

typedef enum XsDmaDeviceDirectionE
{
    XSDMA_DEV_DIRN_SOURCE,
    XSDMA_DEV_DIRN_TARGET
    
} XsDmaDeviceDirectionT;

/*
*******************************************************************************
define the usage verbs for DMA channel management
*******************************************************************************
*/

typedef enum ChannelOperationsE
{ 
    CHANNEL_OP_GET, 
    CHANNEL_OP_SET, 
    CHANNEL_OP_RESET 
} ChannelOperationsT;

/*
*******************************************************************************
define priority types for channel acquisition
*******************************************************************************
*/

typedef enum XsDmaChannelPriorityE
{
    XSDMA_CH_PR_HIGH,
    XSDMA_CH_PR_MEDIUM,
    XSDMA_CH_PR_LOW
} XsDmaChannelPriorityT;

/*
*******************************************************************************
define burst size for the DMA transfer
*******************************************************************************
*/

typedef enum XsDmaBurstSizeE
{
    XSDMA_BURST_SIZE_8  = 8,
    XSDMA_BURST_SIZE_16 = 16,
    XSDMA_BURST_SIZE_32 = 32
} XsDmaBurstSizeT;

/*
*******************************************************************************
status values for channel acquisition. 
*******************************************************************************
*/

typedef enum XsDmaChannelStatusE
{
    XSDMA_CS_GOT_EXPECTED,        // if a channel with the requested priority was returned
    XSDMA_CS_LOWER_THAN_EXPECTED,  // if a channel with a lower priority was returned
    XSDMA_CS_HIGHER_THAN_EXPECTED,  // if a channel with a higher priority was returned
    XSDMA_CS_NONE_AVAILABLE        // No channel available
} XsDmaChannelStatusT;

/*
*******************************************************************************
alignment masks
*******************************************************************************
*/

//#define BYTE16      0xFFFFFFF0U
//#define BIT16       0xFFFFFFFEU
//#define BIT32       0xFFFFFFFCU
//#define BIT64       0xFFFFFFF8U

/*
*******************************************************************************
Interrupt reasons - used for enable or disable
*******************************************************************************
*/

    // Interrupt if a bus error event occurs on the target channel.
    //  Bus errors will apparently always cause interrupts; there is no
    //  documented way to turn them on or off.  If a channel client does
    //  not  have an ISR, there will be no record of this error because
    //  the DMA ISR will clear it even if there is no client channel ISR.
// Uses DCSR_BUSERRINTR

    // Set DCSR[EndIntr] interrupt for the channel when DCMD[LENGTH] is 
    //  decreased to zero.  Bit 21 in the CMD word of the descriptor.
    // Note that this is different than channel stopped.
// Uses DCSR_ENDINTR

    // Descriptor successful load: Bit 22 in the CMD word of the descriptor.
    //  Valid only for No-Descriptor Fetch Mode.  (Not currently supported by
    //  DMA driver API)
// Uses DCSR_STARTINTR


    // Interrupt if channel is stopped or uninitialized.  DCSR bit 29.
    //  Will cause an initial interrupt if enabled before channel is running.
// Uses DCSR_STOPINTR


/*
*******************************************************************************
interrupt handler callback function type
*******************************************************************************
*/

typedef void (*XsDmaHandlerFnPT) (void *, UINT32);                                         


/*
*******************************************************************************
function prototypes
*******************************************************************************
*/

void   XsDmaSWInit (void);
UINT32 XsDmaHWSetup (void);
UINT32 XsDmaRegisterHandler (UINT, XsDmaHandlerFnPT , void *);
UINT32 XsDmaUnregisterHandler (UINT);
INT XsDmaGetFreeChannel (XsDmaChannelPriorityT , 
                          XsDmaDeviceNamesT , 
                          BOOL ,
                          XsDmaChannelStatusT *); 
UINT32 XsDmaFreeChannel(INT);
UINT32 XsDmaLoadFirstDescriptorAddr (INT, 
                                 XsDmaDescriptorElementsTPT);
UINT32 XsDmaStart (INT channel);
UINT32 XsDmaStop (UINT32);
UINT32 XsDmaWaitUntilStopped (UINT32);
UINT32 XsDmaDestroyChain (XsDmaDescriptorElementsTPT);
UINT32 XsDmaIntReasonEnable(UINT, UINT32);
UINT32 XsDmaIntReasonDisable(UINT, UINT32);


//-----------------------------------
typedef UINT32 (*XsDmaOperateOnDescriptorFnPT)(XsDmaDescriptorElementsTPT);

INT XsDmaGetRemainingLength (INT channel);
UINT32 XsDmaReadChannelStatus (INT channel);
UINT32 XsDmaRangeCheckChannel (INT);
void XsDmaCloseChain  (XsDmaDescriptorElementsTPT);
void XsDmaOpenChain   (XsDmaDescriptorElementsTPT);
UINT32 XsDmaMakeBackLink(XsDmaDescriptorElementsTPT);
UINT32 XsDmaOperateOnChain (XsDmaDescriptorElementsTPT,
                           XsDmaOperateOnDescriptorFnPT);
UINT32 XsDmaMakeBackLinksInChain (XsDmaDescriptorElementsTPT);
XsDmaDescriptorElementsTPT XsDmaCreateDescriptorChain (INT , INT, UINT);
XsDmaDescriptorElementsTPT XsDmaCreateBareDescChain(INT , INT, UINT);
XsDmaDescriptorElementsTPT XsDmaCreateDescriptorFromChan (INT, UINT);
UINT32 XsDmaConfigureDevice (XsDmaChannelPriorityT desiredPriority,
                            XsDmaDeviceNamesT deviceName, 
                            BOOL isTarget,
                            XsDmaDescriptorElementsTPT * firstDescVtP,
                            INT numDescriptors,
                            UINT xferByteCount,
                            XsDmaHandlerFnPT callbackFnP,
                            PVOID param,
                            UINT32 intReasons,
                            PINT returnChannelNumP);
UINT32 XsDmaConfigureMemToMem (XsDmaChannelPriorityT desiredPriority,
                            XsDmaDeviceNamesT deviceName, 
                            XsDmaDescriptorElementsTPT * firstDescVtP,
                            INT numDescriptors,
                            UINT xferByteCount,
                            XsDmaHandlerFnPT callbackFnP,
                            PVOID param,
                            UINT32 intReasons,
                            PINT returnChannelNumP); 
UINT32 XsDmaSetStartIntrReason   (XsDmaDescriptorElementsTPT);
UINT32 XsDmaClearStartIntrReason (XsDmaDescriptorElementsTPT);
UINT32 XsDmaSetEndIntrReason     (XsDmaDescriptorElementsTPT);
UINT32 XsDmaClearEndIntrReason   (XsDmaDescriptorElementsTPT);
UINT32 XsDmaDescrSetStopBit      (XsDmaDescriptorElementsTPT);
UINT32 XsDmaDescrClrStopBit      (XsDmaDescriptorElementsTPT);
VOID XsDmaSetBurstSize (XsDmaDeviceNamesT deviceName, XsDmaBurstSizeT burstSize);


//------------ Debug utilities ----------------

void XsDmaDumpDescriptor (XsDmaDescriptorElementsTPT, INT);

/********************************************************************************/

#endif // C_DMA_CONTROLLER_API

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -