www.pudn.com > SEEDVPM642_audio.rar > csl_vcp.h


/******************************************************************************\ 
*           Copyright (C) 2000 Texas Instruments Incorporated. 
*                           All Rights Reserved 
*------------------------------------------------------------------------------ 
* FILENAME...... csl_vcp.h 
* DATE CREATED.. 04/09/2001  
* LAST MODIFIED. 05/30/2001  
* 
\******************************************************************************/ 
#ifndef _CSL_VCP_H_ 
#define _CSL_VCP_H_ 
 
#include     
#include  
#include  
#include "csl_vcphal.h" 
 
#if (VCP_SUPPORT) 
/****************************************\ 
* VCP 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  _VCP_MOD_ 
  #define IDECL extern far 
  #define USEDEFS 
  #define IDEF 
#else 
  #ifdef  _INLINE 
    #define IDECL static inline 
    #define USEDEFS 
    #define IDEF  static inline 
  #else 
    #define IDECL extern far 
  #endif 
#endif 
 
/****************************************\ 
* VCP global macro declarations 
\****************************************/ 
 
/****************************************\ 
* VCP global typedef declarations 
\****************************************/ 
typedef Uint32 VCP_Standard; 
typedef Uint32 VCP_Mode; 
typedef Uint32 VCP_Map; 
typedef Uint32 VCP_Rate; 
typedef Uint8  VCP_UserData; 
typedef Uint8  VCP_ExtrinsicData; 
 
typedef struct { 
   Uint32 ic0; 
   Uint32 ic1; 
   Uint32 ic2; 
   Uint32 ic3; 
   Uint32 ic4; 
   Uint32 ic5; 
} VCP_ConfigIc; 
 
typedef struct { 
   VCP_Rate     rate; 
   Uint8        constLen; 
   Uint8        poly0; 
   Uint8        poly1; 
   Uint8        poly2; 
   Uint8        poly3; 
   Uint16       yamTh; 
   Uint16       frameLen; 
   Uint16       relLen; 
   Uint16       convDist; 
   Uint16       maxSm; 
   Uint16       minSm; 
   Uint8        stateNum; 
   Uint8        bmBuffLen; 
   Uint8        decBuffLen; 
   Uint8        traceBack; 
   Uint8        readFlag; 
   Uint8        decision; 
   Uint16       numBranchMetrics; 
   Uint16       numDecisions; 
   Uint16       numBmFrames; 
   Uint16       numDecFrames; 
} VCP_Params; 
typedef struct { 
   VCP_Rate     rate; 
   Uint8        constLen; 
   Uint16       frameLen; 
   Uint16       yamTh; 
   Uint8        stateNum; 
   Uint8        decision; 
   Uint8        readFlag; 
} VCP_BaseParams; 
 
/****************************************\ 
* VCP global ants declarations 
\****************************************/ 
#define VCP_RATE_1_2              2 
#define VCP_RATE_1_3              3 
#define VCP_RATE_1_4              4 
#define VCP_DECISION_HARD         0 
#define VCP_DECISION_SOFT         1 
#define VCP_TRACEBACK_NONE        0 
#define VCP_TRACEBACK_TAILED      1 
#define VCP_TRACEBACK_CONVERGENT  2 
#define VCP_TRACEBACK_MIXED       3 
#define VCP_END_PACKED32          0 
#define VCP_END_NATIVE            1 
#define VCP_NUM_IC                6 
#define VCP_NUM_OP                2 
 
/****************************************\ 
* VCP global function declarations 
\****************************************/ 
/* Set all icx registers :                                                    */  
/* Establish all IC register values in the configIc struct based on the       */ 
/* parameters defined in configParms.                                         */ 
CSLAPI void VCP_genIc(VCP_Params *restrict configParms, 
                      VCP_ConfigIc *restrict configIc); 
 
/* Fill out the necessary TCP parameters.                                     */ 
CSLAPI void VCP_genParams(VCP_BaseParams *configBase, 
                      VCP_Params *configParms); 
 
 
/****************************************\ 
* VCP inline function declarations 
\****************************************/ 
 
/* Master transfer functions */ 
IDECL void   VCP_start(); 
IDECL void   VCP_pause(); 
IDECL void   VCP_unpause(); 
IDECL void   VCP_stop(); 
IDECL void   VCP_reset(); 
 
IDECL Uint32 VCP_getMinSm(); 
IDECL Uint32 VCP_getMaxSm(); 
IDECL Uint32 VCP_getYamBit(); 
IDECL Uint32 VCP_getIndexState(); 
 
IDECL Uint32 VCP_statPause(); 
IDECL Uint32 VCP_statRun(); 
IDECL Uint32 VCP_statError(); 
IDECL Uint32 VCP_statWaitIc(); 
IDECL Uint32 VCP_statInFifo(); 
IDECL Uint32 VCP_statOutFifo(); 
 
IDECL Uint32 VCP_statSymProc(); 
IDECL Uint32 VCP_getNumOutFifo(); 
IDECL Uint32 VCP_getNumInFifo(); 
 
IDECL Uint32 VCP_errTest(); 
 
IDECL Uint32 VCP_getBmEndian(); 
IDECL Uint32 VCP_getSdEndian(); 
 
IDECL void   VCP_setNativeEndian(); 
IDECL void   VCP_setPacked32Endian(); 
IDECL void   VCP_setBmEndian(Uint32 bmEnd); 
IDECL void   VCP_setSdEndian(Uint32 sdEnd); 
 
IDECL void VCP_icConfig(VCP_ConfigIc *config); 
IDECL void VCP_icConfigArgs(Uint32 ic0, Uint32 ic1, Uint32 ic2,  Uint32 ic3, 
                            Uint32 ic4, Uint32 ic5); 
IDECL void VCP_getIcConfig(VCP_ConfigIc *config); 
 
/* Ceiling functions */ 
IDECL Uint32 VCP_ceil(Uint32 a, Uint32 b); 
 
IDECL Uint32 VCP_normalCeil(Uint32 a, Uint32 b); 
 
/****************************************\ 
* VCP inline function definitions 
\****************************************/ 
#ifdef USEDEFS 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_start(){ 
   VCP_FSET(EXE,COMMAND,1) ;   
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_pause(){ 
  VCP_FSET(EXE,COMMAND,2); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_unpause(){ 
  VCP_FSET(EXE,COMMAND,4); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_stop(){ 
   VCP_FSET(EXE,COMMAND,5) ;   
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_reset(){ 
  VCP_RSET(IC0,VCP_IC0_DEFAULT); 
  VCP_RSET(IC1,VCP_IC1_DEFAULT); 
  VCP_RSET(IC2,VCP_IC2_DEFAULT); 
  VCP_RSET(IC3,VCP_IC3_DEFAULT); 
  VCP_RSET(IC4,VCP_IC4_DEFAULT); 
  VCP_RSET(IC5,VCP_IC5_DEFAULT); 
  VCP_RSET(EXE,VCP_EXE_DEFAULT); 
  VCP_RSET(END,VCP_END_DEFAULT); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getMinSm(){ 
  return VCP_FGET(OUT0,FMINS); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getMaxSm(){ 
  return VCP_FGET(OUT0,FMAXS); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getYamBit(){ 
  return VCP_FGET(OUT1,YAM); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getIndexState(){ 
  return VCP_FGET(OUT1,FMAXI); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statPause(){ 
  return VCP_FGET(STAT0,PAUS); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statRun(){ 
  return VCP_FGET(STAT0,RUN); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statError(){ 
  return VCP_FGET(STAT0,ERR); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statWaitIc(){ 
  return VCP_FGET(STAT0,WIC); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statInFifo(){ 
  return VCP_FGET(STAT0,IFEMP); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statOutFifo(){ 
  return VCP_FGET(STAT0,OFFUL); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_statSymProc(){ 
  return VCP_FGET(STAT0,NSYM); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getNumOutFifo(){ 
  return VCP_FGET(STAT1,NSYMOF); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getNumInFifo(){ 
  return VCP_FGET(STAT1,NSYMIF); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_errTest(){ 
  return VCP_FGET(ERR,ERROR); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getBmEndian(){ 
  return VCP_FGET(END,BM); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF Uint32 VCP_getSdEndian(){ 
  return VCP_FGET(END,SD); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void   VCP_setNativeEndian(){ 
  VCP_FSET(END,BM,VCP_END_BM_NATIVE); 
  VCP_FSET(END,SD,VCP_END_SD_NATIVE); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void   VCP_setPacked32Endian(){ 
  VCP_FSET(END,BM,VCP_END_BM_32BIT); 
  VCP_FSET(END,SD,VCP_END_SD_32BIT); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void   VCP_setBmEndian(Uint32 bmEnd){ 
  VCP_FSET(END,BM,bmEnd); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void   VCP_setSdEndian(Uint32 sdEnd){ 
  VCP_FSET(END,SD,sdEnd); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_icConfig(VCP_ConfigIc *config) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *) _VCP_BASE_IC; 
  register int x0,x1,x2,x3,x4,x5; 
 
  gie = IRQ_globalDisable(); 
 
   x0 = config->ic0; 
   x1 = config->ic1; 
   x2 = config->ic2; 
   x3 = config->ic3; 
   x4 = config->ic4; 
   x5 = config->ic5; 
   
  base[_VCP_IC0_OFFSET]  = x0; 
  base[_VCP_IC1_OFFSET]  = x1; 
  base[_VCP_IC2_OFFSET]  = x2; 
  base[_VCP_IC3_OFFSET]  = x3; 
  base[_VCP_IC4_OFFSET]  = x4; 
  base[_VCP_IC5_OFFSET]  = x5; 
   
  IRQ_globalRestore(gie); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_icConfigArgs(Uint32 ic0, Uint32 ic1, Uint32 ic2, Uint32 ic3, Uint32 ic4, 
                           Uint32 ic5) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *) _VCP_BASE_IC; 
 
  gie = IRQ_globalDisable(); 
   
  base[_VCP_IC0_OFFSET]  = ic0; 
  base[_VCP_IC1_OFFSET]  = ic1; 
  base[_VCP_IC2_OFFSET]  = ic2; 
  base[_VCP_IC3_OFFSET]  = ic3; 
  base[_VCP_IC4_OFFSET]  = ic4; 
  base[_VCP_IC5_OFFSET]  = ic5; 
   
  IRQ_globalRestore(gie); 
} 
/*----------------------------------------------------------------------------*/ 
IDEF void VCP_getIcConfig(VCP_ConfigIc *config) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *) _VCP_BASE_IC; 
  register int x0,x1,x2,x3,x4,x5; 
 
  gie = IRQ_globalDisable(); 
 
   x0 = base[_VCP_IC0_OFFSET]; 
   x1 = base[_VCP_IC1_OFFSET]; 
   x2 = base[_VCP_IC2_OFFSET]; 
   x3 = base[_VCP_IC3_OFFSET]; 
   x4 = base[_VCP_IC4_OFFSET]; 
   x5 = base[_VCP_IC5_OFFSET]; 
   
  config->ic0  =  x0; 
  config->ic1  =  x1; 
  config->ic2  =  x2; 
  config->ic3  =  x3; 
  config->ic4  =  x4; 
  config->ic5  =  x5; 
   
  IRQ_globalRestore(gie); 
} 
 
/*----------------------------------------------------------------------------*/ 
 
IDEF Uint32 VCP_ceil(Uint32 val, Uint32 pwr2) { 
  Uint32 gie; 
  Uint32 x; 
   
  gie = IRQ_globalDisable(); 
 
  /* x^pwr2 = ceil(val, 2^pwr2) */ 
  /* val is increased (if necessary) to be a multiple of 2^pwr2 */ 
  x = (((val) - (((val)>>(pwr2)) << (pwr2))) == 0) ?                           \ 
      ((val)>>(pwr2)):(((val)>>(pwr2))+1); 
   
  IRQ_globalRestore(gie); 
 
  return(x); 
} 
 
/*----------------------------------------------------------------------------*/ 
 
IDEF Uint32 VCP_normalCeil(Uint32 val1, Uint32 val2) { 
  Uint32 gie; 
  Uint32 x; 
   
  gie = IRQ_globalDisable(); 
 
  /* x = ceil(val1, val2) */ 
  /* val is increased (if necessary) to be a multiple of val2 */ 
  x = ( ((val1)%(val2))!=0  )?( ((val1)/(val2)) + 1 ):((val1)/(val2)); 
   
  IRQ_globalRestore(gie); 
 
  return(x); 
} 
/*----------------------------------------------------------------------------*/ 
#endif /* USEDEFS */ 
 
#endif /* VCP_SUPPORT */ 
#endif /* _CSL_VCP_H_ */ 
/******************************************************************************\ 
* End of csl_vcp.h 
\******************************************************************************/