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

📄 csl_edma.h

📁 SEED的VPM642测试程序-板级支持库
💻 H
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************\
*           Copyright (C) 1999-2000 Texas Instruments Incorporated.
*                           All Rights Reserved
*------------------------------------------------------------------------------
* FILENAME...... csl_edma.h
* DATE CREATED.. 06/11/1999
* LAST MODIFIED. 06/17/2003 added support for 6712C
*                05/28/2003 added support for 6711C
*                02/15/2002 added EDMA channel events 6713/DM642 - EDMA_map()
*                04/16/2001
\******************************************************************************/
#ifndef _CSL_EDMA_H_
#define _CSL_EDMA_H_

#include <csl_chip.h>
#include <csl_irq.h>
#include <csl_edmahal.h>


#if (EDMA_SUPPORT)
/******************************************************************************\
* scope and inline control macros
\******************************************************************************/
#ifdef __cplusplus
#define CSLAPI extern "C" far
#else
#define CSLAPI extern far
#endif

#undef  USEDEFS
#undef  IDECL
#undef  IDEF

#ifdef  _EDMA_MOD_
  #define IDECL CSLAPI
  #define USEDEFS
  #define IDEF
#else
  #ifdef  _INLINE
    #define IDECL static inline
    #define USEDEFS
    #define IDEF  static inline
  #else
    #define IDECL CSLAPI
  #endif
#endif


/******************************************************************************\
* global macro declarations
\******************************************************************************/
#define EDMA_CHA_CNT              (_EDMA_CHA_CNT)
#define EDMA_TABLE_CNT            (_EDMA_LINK_CNT)
#define EDMA_ALLOC_ANY            (-1)

#define EDMA_OPEN_RESET           (0x00000001)
#define EDMA_OPEN_ENABLE          (0x00000002)


#if(CHIP_6201|CHIP_6202|CHIP_6203|CHIP_6204|CHIP_6205|CHIP_6701|C11_SUPPORT)
  #define EDMA_CHA_ANY      -1
  #define EDMA_CHA_DSPINT   0
  #define EDMA_CHA_TINT0    1
  #define EDMA_CHA_TINT1    2
  #define EDMA_CHA_SDINT    3
  #define EDMA_CHA_EXTINT4  4
  #define EDMA_CHA_EXTINT5  5
  #define EDMA_CHA_EXTINT6  6
  #define EDMA_CHA_EXTINT7  7
  #define EDMA_CHA_TCC8     8
  #define EDMA_CHA_TCC9     9
  #define EDMA_CHA_TCC10    10
  #define EDMA_CHA_TCC11    11
  #define EDMA_CHA_XEVT0    12
  #define EDMA_CHA_REVT0    13
  #define EDMA_CHA_XEVT1    14
  #define EDMA_CHA_REVT1    15
#endif
#if (CHIP_6711C || CHIP_6712C)
  #define EDMA_CHA_GPINT4    4
  #define EDMA_CHA_GPINT5    5
  #define EDMA_CHA_GPINT6    6
  #define EDMA_CHA_GPINT7    7
  #define EDMA_CHA_GPINT2   10
#endif

#if (CHIP_6713 | CHIP_DA610 | CHIP_6414 | CHIP_6415 | CHIP_6416 | CHIP_DM642 | CHIP_6412 | CHIP_6411)
  #define EDMA_CHA_ANY      -1
  #define EDMA_CHA_DSPINT    0
  #define EDMA_CHA_TINT0     1
  #define EDMA_CHA_TINT1     2
  #define EDMA_CHA_SDINT     3
  #define EDMA_CHA_EXTINT4   4
  #define EDMA_CHA_GPINT4    4
  #define EDMA_CHA_EXTINT5   5
  #define EDMA_CHA_GPINT5    5
  #define EDMA_CHA_EXTINT6   6
  #define EDMA_CHA_GPINT6    6
  #define EDMA_CHA_EXTINT7   7
  #define EDMA_CHA_GPINT7    7
  #define EDMA_CHA_TCC8      8
  #define EDMA_CHA_GPINT0    8
  #define EDMA_CHA_TCC9      9
  #define EDMA_CHA_GPINT1    9
  #define EDMA_CHA_TCC10    10
  #define EDMA_CHA_GPINT2   10
  #define EDMA_CHA_TCC11    11
  #define EDMA_CHA_GPINT3   11
  #define EDMA_CHA_XEVT0    12
  #define EDMA_CHA_REVT0    13
  #define EDMA_CHA_XEVT1    14
  #define EDMA_CHA_REVT1    15
  #define EDMA_CHA_GPINT8   48
  #define EDMA_CHA_GPINT9   49
  #define EDMA_CHA_GPINT10  50
  #define EDMA_CHA_GPINT11  51
  #define EDMA_CHA_GPINT12  52
  #define EDMA_CHA_GPINT13  53
  #define EDMA_CHA_GPINT14  54
  #define EDMA_CHA_GPINT15  55
#endif


/* 3rd MCBSP/ PCI / UTOPIA / VCP / TCP channel numbers for EDMA_open() */
#if (CHIP_6414 || CHIP_6415 || CHIP_6416 )
  #define EDMA_CHA_XEVT2    17
  #define EDMA_CHA_REVT2    18
  #define EDMA_CHA_TINT2    19
  #define EDMA_CHA_SDINTB   20
  #define EDMA_CHA_PCI      21
  #define EDMA_CHA_VCPREVT  28
  #define EDMA_CHA_VCPXEVT  29
  #define EDMA_CHA_TCPREVT  30
  #define EDMA_CHA_TCPXEVT  31
  #define EDMA_CHA_UREVT    32
  #define EDMA_CHA_UREVT0   32
  #define EDMA_CHA_UREVT1   33
  #define EDMA_CHA_UREVT2   34
  #define EDMA_CHA_UREVT3   35
  #define EDMA_CHA_UREVT4   36
  #define EDMA_CHA_UREVT5   37
  #define EDMA_CHA_UREVT6   38
  #define EDMA_CHA_UREVT7   39
  #define EDMA_CHA_UXEVT    40
  #define EDMA_CHA_UXEVT0   40
  #define EDMA_CHA_UXEVT1   41
  #define EDMA_CHA_UXEVT2   42
  #define EDMA_CHA_UXEVT3   43
  #define EDMA_CHA_UXEVT4   44
  #define EDMA_CHA_UXEVT5   45
  #define EDMA_CHA_UXEVT6   46
  #define EDMA_CHA_UXEVT7   47
#endif

#if (CHIP_DM642 || CHIP_6412)
  #define EDMA_CHA_TINT2    19
  #define EDMA_CHA_PCI      21
  #define EDMA_CHA_MACEVT   22
  #define EDMA_CHA_ICREVT0  44
  #define EDMA_CHA_ICXEVT0  45
#endif

/* 1 MCASPs - 3 Video Port Channels */
 #if (CHIP_DM642)
  #define EDMA_CHA_VP0EVTYA 16
  #define EDMA_CHA_VP0EVTUA 17
  #define EDMA_CHA_VP0EVTVA 18
  #define EDMA_CHA_VP0EVTYB 24
  #define EDMA_CHA_VP0EVTUB 25
  #define EDMA_CHA_VP0EVTVB 26
  #define EDMA_CHA_AXEVTE0  32
  #define EDMA_CHA_AXEVTO0  33
  #define EDMA_CHA_AXEVT0   34
  #define EDMA_CHA_AREVTE0  35
  #define EDMA_CHA_AREVTO0  36
  #define EDMA_CHA_AREVT0   37
  #define EDMA_CHA_VP1EVTYB 38
  #define EDMA_CHA_VP1EVTUB 39
  #define EDMA_CHA_VP1EVTVB 40
  #define EDMA_CHA_VP2EVTYB 41
  #define EDMA_CHA_VP2EVTUB 42
  #define EDMA_CHA_VP2EVTVB 43
  #define EDMA_CHA_VP1EVTYA 56
  #define EDMA_CHA_VP1EVTUA 57
  #define EDMA_CHA_VP1EVTVA 58
  #define EDMA_CHA_VP2EVTYA 59
  #define EDMA_CHA_VP2EVTUA 60
  #define EDMA_CHA_VP2EVTVA 61
#endif

/* 2 MCASPs - 2 I2Cs channels */
#if (CHIP_6713 || CHIP_DA610)
  #define EDMA_CHA_AXEVTE0  32
  #define EDMA_CHA_AXEVTO0  33
  #define EDMA_CHA_AXEVT0   34
  #define EDMA_CHA_AREVTE0  35
  #define EDMA_CHA_AREVTO0  36
  #define EDMA_CHA_AREVT0   37
  #define EDMA_CHA_AXEVTE1  38
  #define EDMA_CHA_AXEVTO1  39
  #define EDMA_CHA_AXEVT1   40
  #define EDMA_CHA_AREVTE1  41
  #define EDMA_CHA_AREVTO1  42
  #define EDMA_CHA_AREVT1   43
  #define EDMA_CHA_ICREVT0  44
  #define EDMA_CHA_ICXEVT0  45
  #define EDMA_CHA_ICREVT1  46
  #define EDMA_CHA_ICXEVT1  47
#endif



#define _EDMA_TYPE_C   (0x80000000)
#define _EDMA_TYPE_T   (0x40000000)
#define _EDMA_TYPE_Q   (0x20000000)
#define _EDMA_TYPE_S   (0x10000000)


#define _EDMA_MK_HANDLE(base,index,flags) (EDMA_Handle)(\
  ((base)&0x0000FFFF)|(((index)<<16)&0x00FF0000)|((flags)&0xFF000000)\
)

#define EDMA_HQDMA    _EDMA_MK_HANDLE(0x00000000,0,_EDMA_TYPE_Q)
#define EDMA_HQSDMA   _EDMA_MK_HANDLE(0x00000000,0,_EDMA_TYPE_S)
#define EDMA_HINV     _EDMA_MK_HANDLE(0x00000000,0,0)

#define EDMA_HNULL    _EDMA_MK_HANDLE(_EDMA_NULL_PARAM,0,_EDMA_TYPE_T)
#define NULL_FUNC     0

/* Priority Queues */
#define EDMA_Q0       0
#define EDMA_Q1       1
#define EDMA_Q2       2
#define EDMA_Q3       3

/* Event Polarity */
#define EDMA_EVT_LOWHIGH   0
#define EDMA_EVT_HIGHLOW   1

/* Chaining Flag */
#define EDMA_TCC_SET       1
#define EDMA_ATCC_SET      1

/******************************************************************************\
* global typedef declarations
\******************************************************************************/
typedef Uint32 EDMA_Handle;

typedef struct {
  Uint32 opt;
  Uint32 src;
  Uint32 cnt;
  Uint32 dst;
  Uint32 idx;
  Uint32 rld;
} EDMA_Config;

typedef void (*EDMA_IntHandler)(int tccNum);

/******************************************************************************\
* global variable declarations
\******************************************************************************/
#define EDMA_hNull EDMA_HNULL
static Uint8 tccAllocTable[64] = {
  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

/******************************************************************************\
* global function declarations
\******************************************************************************/
CSLAPI void EDMA_reset(EDMA_Handle hEdma);
CSLAPI void EDMA_resetAll();

CSLAPI EDMA_Handle EDMA_open(int chaNum, Uint32 flags);
CSLAPI void EDMA_close(EDMA_Handle hEdma);
CSLAPI EDMA_Handle EDMA_allocTable(int tableNum);
CSLAPI void EDMA_freeTable(EDMA_Handle hEdma);

CSLAPI int EDMA_allocTableEx(int cnt, EDMA_Handle *array);
CSLAPI void EDMA_freeTableEx(int cnt, EDMA_Handle *array);

CSLAPI void EDMA_clearPram(Uint32 val);

CSLAPI int EDMA_intAlloc(int tcc);
CSLAPI void EDMA_intFree(int tcc);
/* 6713? */

#if (CHIP_6713 || CHIP_DA610 || CHIP_6711C || CHIP_6712C)
CSLAPI int EDMA_map(int eventNum,int chaNum);
#endif

CSLAPI EDMA_IntHandler EDMA_intHook(int tccNum, EDMA_IntHandler funcAddr);
CSLAPI void EDMA_intDefaultHandler(int tccNum);
CSLAPI void EDMA_intDispatcher();

/******************************************************************************\
* inline function declarations
\******************************************************************************/
IDECL Uint32 EDMA_getScratchAddr();
IDECL Uint32 EDMA_getScratchSize();
IDECL Uint32 EDMA_getPriQStatus();
#if (C64_SUPPORT)
IDECL void   EDMA_setPriQLength(Uint32 priNum, Uint32 length);
IDECL void   EDMA_resetPriQLength(Uint32 priNum);
#endif

IDECL void   EDMA_enableChannel(EDMA_Handle hEdma);
IDECL void   EDMA_disableChannel(EDMA_Handle hEdma);
IDECL void   EDMA_setChannel(EDMA_Handle hEdma);
IDECL Uint32 EDMA_getChannel(EDMA_Handle hEdma);
IDECL void   EDMA_clearChannel(EDMA_Handle hEdma);
#if (C64_SUPPORT)
IDECL void   EDMA_setEvtPolarity(EDMA_Handle hEdma,int polarity);
#endif
IDECL Uint32 EDMA_getTableAddress(EDMA_Handle hEdma);

IDECL void   EDMA_intEnable(Uint32 tccIntNum);
IDECL void   EDMA_intDisable(Uint32 tccIntNum);
IDECL void   EDMA_intClear(Uint32 tccIntNum);
IDECL Uint32 EDMA_intTest(Uint32 tccIntNum);
IDECL void   EDMA_intReset(Uint32 tccIntNum);
IDECL void   EDMA_intResetAll();

IDECL void   EDMA_link(EDMA_Handle parent, EDMA_Handle child);

IDECL void EDMA_config(EDMA_Handle hEdma, EDMA_Config *config);
IDECL void EDMA_configArgs(EDMA_Handle hEdma, Uint32 opt, Uint32 src,
  Uint32 cnt, Uint32 dst, Uint32 idx, Uint32 rld);
IDECL void EDMA_getConfig(EDMA_Handle hEdma, EDMA_Config *config);

IDECL void EDMA_qdmaConfig(EDMA_Config *config);
IDECL void EDMA_qdmaConfigArgs(Uint32 opt, Uint32 src, Uint32 cnt, Uint32 dst,
  Uint32 idx);
IDECL void EDMA_qdmaGetConfig(EDMA_Config *config);

IDECL void EDMA_enableChaining(EDMA_Handle hEdma);
IDECL void EDMA_disableChaining(EDMA_Handle hEdma);
IDECL  void EDMA_chain(EDMA_Handle parent, EDMA_Handle nextChannel,int tccflag, int atccflag);

/******************************************************************************\
* inline function definitions
\******************************************************************************/
#ifdef USEDEFS
/*----------------------------------------------------------------------------*/
IDEF Uint32 EDMA_getScratchAddr() {
  return (Uint32)_EDMA_SCRATCH_START;
}
/*----------------------------------------------------------------------------*/
IDEF Uint32 EDMA_getScratchSize() {
  return (Uint32)_EDMA_SCRATCH_SIZE;
}
/*----------------------------------------------------------------------------*/
IDEF Uint32 EDMA_getPriQStatus() {
  return (Uint32)EDMA_RGET(PQSR);
}
/*----------------------------------------------------------------------------*/
#if (C64_SUPPORT)
IDEF void EDMA_setPriQLength(Uint32 priNum, Uint32 length) {
  if (priNum == 0x0) {
   EDMA_RSET(PQAR0,(0x00000007 & length));
   } else {
          if (priNum == 0x1) {
           EDMA_RSET(PQAR1,(0x00000007 & length));
          }else {
                if (priNum == 0x2) {
                EDMA_RSET(PQAR2,(0x00000007 & length));
                } else {
                       if (priNum == 0x3) {
                       EDMA_RSET(PQAR3,(0x00000007 & length));
                       }
                  }
           }
    }
}
/*----------------------------------------------------------------------------*/

IDEF void EDMA_resetPriQLength(Uint32 priNum) {
 if (priNum == 0x0) {
   EDMA_FSET(PQAR0,PQA,EDMA_PQAR0_PQA_DEFAULT);
   } else {
          if (priNum == 0x1) {
          EDMA_FSET(PQAR1,PQA,EDMA_PQAR1_PQA_DEFAULT);
          } else {
                 if (priNum == 0x2) {
                 EDMA_FSET(PQAR2,PQA,EDMA_PQAR2_PQA_DEFAULT);
                 }else {
                      if (priNum == 0x3) {
                      EDMA_FSET(PQAR3,PQA,EDMA_PQAR3_PQA_DEFAULT);
                       }
                  }
           }
   }
}
#endif
/*----------------------------------------------------------------------------*/
IDEF void EDMA_enableChannel(EDMA_Handle hEdma) {

  int gie;
  int chaNum = (hEdma & 0x00FF0000)>>16;

⌨️ 快捷键说明

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