📄 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 <csl_chip.h>
#include <csl_stdinc.h>
#include <csl_irq.h>
#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
\******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -