123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- /* ============================================================================
- * Copyright (c) Texas Instruments Incorporated 2008, 2009
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- /**
- * @file csl_vcp2.h
- *
- * @brief
- * Header file with data structure and API declarations for VCP2
- * CSL module.
- *
- * \par
- * ============================================================================
- * @n (C) Copyright 2008, 2009, Texas Instruments, Inc.
- * @n Use of this software is controlled by the terms and conditions found
- * @n in the license agreement under which this software has been supplied.
- * ===========================================================================
- * \par
- */
-
- /** @defgroup CSL_VCP2_API VCP2
- *
- * @section Introduction
- *
- * @subsection xxx Overview
- * Channel decoding of voice and low bit-rate data channels found in cellular standards such as 2.5G, 3G,
- * and WiMAX requires the decoding of convolutional encoded data. The Viterbi-decoder coprocessor 2
- * (VCP2) provided in the TCI648x devices performs Viterbi decoding for IS2000 and 3GPP wireless
- * standards. The VCP2 coprocessor also performs forward-error correction for 2G and 3G wireless systems.
- * The VCP2 coprocessor offers a very cost effective and synergistic solution when combined with Texas
- * Instruments (TI) DSPs. The VCP2 supports 1941 12.2 Kbps class A 3G voice channels running at
- * 333 MHz.
- *
- * @subsection References
- * -# VCP2 User's Guide SPRUE09A.pdf (May 2006 - Revised April 2008)
- *
- */
- #ifndef CSL_VCP2__H
- #define CSL_VCP2__H
- #include <ti/csl/csl.h>
- #include <ti/csl/cslr_vcp2.h>
- #include <ti/csl/soc.h>
- /**
- @defgroup CSL_VCP2_SYMBOL VCP2 Symbols Defined
- @ingroup CSL_VCP2_API
- */
- /**
- @defgroup CSL_VCP2_DATASTRUCT VCP2 Data Structures
- @ingroup CSL_VCP2_API
- */
- /**
- @defgroup CSL_VCP2_FUNCTION VCP2 Functions
- @ingroup CSL_VCP2_API
- */
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /**
- @addtogroup CSL_VCP2_SYMBOL
- @{
- */
- /******************************************************************************
- * VCP Macros
- *****************************************************************************/
- /** Code rate = 2 */
- #define VCP2_RATE_1_2 (2U)
- /** Code rate = 3 */
- #define VCP2_RATE_1_3 (3U)
- /** Code rate = 4 */
- #define VCP2_RATE_1_4 (4U)
- /** Speed critical */
- #define VCP2_SPEED_CRITICAL (0U)
- /** Speed most critical */
- #define VCP2_SPEED_MOST_CRITICAL (1U)
- /** Performance critical */
- #define VCP2_PERF_CRITICAL (2U)
- /** Performance most critical */
- #define VCP2_PERF_MOST_CRITICAL (3U)
- /** Default value */
- #define VCP2_PERF_DEFAULT (VCP2_SPEED_CRITICAL)
- /** Out order of VCP output for decoded data : 0 to 31 */
- #define VCP2_OUTORDER_0_31 (CSL_VCP2_VCPIC3_OUT_ORDER_LSB)
- /** Out order of VCP output for decoded data : 31 to 0 */
- #define VCP2_OUTORDER_31_0 (CSL_VCP2_VCPIC3_OUT_ORDER_MSB)
- /** Output decision type : Hard decisions */
- #define VCP2_DECISION_HARD (CSL_VCP2_VCPIC5_SDHD_HARD)
- /** Output decision type : Soft decisions */
- #define VCP2_DECISION_SOFT (CSL_VCP2_VCPIC5_SDHD_SOFT)
- /** Output parameters read flag : VCP read event is not generated */
- #define VCP2_OUTF_NO (CSL_VCP2_VCPIC5_OUTF_NO)
- /** Output parameters read flag : VCP read event is generated */
- #define VCP2_OUTF_YES (CSL_VCP2_VCPIC5_OUTF_YES)
- /** No trace back allowed */
- #define VCP2_TRACEBACK_NONE (CSL_VCP2_VCPIC5_TB_NO)
- /** Traceback mode : Tailed */
- #define VCP2_TRACEBACK_TAILED (CSL_VCP2_VCPIC5_TB_TAIL)
- /** Traceback mode : Convergent */
- #define VCP2_TRACEBACK_CONVERGENT (CSL_VCP2_VCPIC5_TB_CONV)
- /** Traceback mode : Mixed */
- #define VCP2_TRACEBACK_MIXED (CSL_VCP2_VCPIC5_TB_MIX)
- /**
- * VCP unpause type : VCP restarts and processes one sliding window before
- * pausing again
- */
- #define VCP2_UNPAUSE_ONESW (CSL_VCP2_VCPEXE_COMMAND_RESTART_PAUSE)
- /** VCP unpause type : VCP restarts */
- #define VCP2_UNPAUSE_NORMAL (CSL_VCP2_VCPEXE_COMMAND_RESTART)
- /** Soft decisions memory format : 32-bit word packed */
- #define VCP2_END_PACKED32 (CSL_VCP2_VCPEND_SD_32BIT)
- /** Soft decisions memory format : Native (8 bits) */
- #define VCP2_END_NATIVE (CSL_VCP2_VCPEND_SD_NATIVE)
- /** EMU mode : VCP halts at the end of completion of the current window of
- * state metric processing or at the end of a frame */
- #define VCP2_EMUHALT_DEFAULT (CSL_VCP2_VCPEMU_SOFT_HALT_DEFAULT)
- /**
- * EMU mode : VCP halts at the end of completion of the processing of the
- * frame
- */
- #define VCP2_EMUHALT_FRAMEEND (CSL_VCP2_VCPEMU_SOFT_HALT_FRAMEEND)
- /***************************************************************************
- * Following are Polynomials used in GSM/Edge/GPRS
- **************************************************************************/
- /**
- * GSM/Edge/GPRS generator polynomial 0
- */
- #define VCP2_GEN_POLY_0 0x30
- /**
- * GSM/Edge/GPRS generator polynomial 1
- */
- #define VCP2_GEN_POLY_1 0xB0
- /**
- * GSM/Edge/GPRS generator polynomial 2
- */
- #define VCP2_GEN_POLY_2 0x50
- /**
- * GSM/Edge/GPRS generator polynomial 3
- */
- #define VCP2_GEN_POLY_3 0xF0
- /**
- * GSM/Edge/GPRS generator polynomial 4
- */
- #define VCP2_GEN_POLY_4 0x6C
- /**
- * GSM/Edge/GPRS generator polynomial 5
- */
- #define VCP2_GEN_POLY_5 0x94
- /**
- * GSM/Edge/GPRS generator polynomial 6
- */
- #define VCP2_GEN_POLY_6 0xF4
- /**
- * GSM/Edge/GPRS generator polynomial 7
- */
- #define VCP2_GEN_POLY_7 0xE4
- /**
- * NULL generator polynomial for GSM/Edge/GPRS
- */
- #define VCP2_GEN_POLY_GNULL 0x00
- /**
- @}
- */
- /** @addtogroup CSL_VCP2_DATASTRUCT
- @{ */
- /** VCP Peripheral ID structure */
- typedef struct
- {
- /** Peripheral type */
- Uint8 type;
- /** Peripheral class */
- Uint8 pid_class;
- /** Peripheral revision */
- Uint8 rev;
- } VCP2_PID;
- /**
- * VCP code rate type
- */
- typedef Uint32 VCP2_Rate;
- /**
- * VCP input configuration structure that holds all of the configuration
- * values that are to be transferred to the VCP via the EDMA.
- */
- typedef struct
- {
- /** Value of VCP input configuration register 0 */
- Uint32 ic0;
- /** Value of VCP input configuration register 1 */
- Uint32 ic1;
- /** Value of VCP input configuration register 2 */
- Uint32 ic2;
- /** Value of VCP input configuration register 3 */
- Uint32 ic3;
- /** Value of VCP input configuration register 4 */
- Uint32 ic4;
- /** Value of VCP input configuration register 5 */
- Uint32 ic5;
- } VCP2_ConfigIc;
- /**
- * VCP channel parameters structure that holds all of the information
- * concerning the user channel. These values are used to generate the
- * appropriate input configuration values for the VCP and to program
- * the EDMA.
- */
- typedef struct
- {
- /** Code rate */
- VCP2_Rate rate;
- /** Constraint length */
- Uint8 constLen;
- /** Polynomial 0 */
- Uint8 poly0;
- /** Polynomial 1 */
- Uint8 poly1;
- /** Polynomial 2 */
- Uint8 poly2;
- /** Polynomial 3 */
- Uint8 poly3;
- /** Yamamoto threshold value*/
- Uint16 yamTh;
- /** Frame length i.e. number of symbols in a frame*/
- Uint16 frameLen;
- /** Reliability length */
- Uint16 relLen;
- /** Convergence distance */
- Uint16 convDist;
- /** Traceback state index */
- Uint16 traceBackIndex;
- /** Traceback state index enable/disable */
- Bool traceBackEn;
- /** Hard decision output ordering */
- Uint16 outOrder;
- /** Maximum initial state metric */
- Int16 maxSm;
- /** Minimum initial state metric */
- Int16 minSm;
- /** State index set to the maximum initial state metric*/
- Uint8 stateNum;
- /** Branch metrics buffer length in input FIFO */
- Uint8 bmBuffLen;
- /** Decisions buffer length in output FIFO */
- Uint8 decBuffLen;
- /** Traceback mode */
- Uint8 traceBack;
- /** Output parameters read flag */
- Uint8 readFlag;
- /** Decision selection: hard or soft */
- Uint8 decision;
- /** Number of branch metric frames*/
- Uint16 numBmFrames;
- /** Number of decision frames */
- Uint16 numDecFrames;
- } VCP2_Params;
- /**
- * VCP base parameter structure that is used to configure the VCP parameters
- * structure with the given values using VCP2_genParams() function.
- */
- typedef struct
- {
- /** Code rate */
- VCP2_Rate rate;
- /** Constraint length */
- Uint8 constLen;
- /** Frame length */
- Uint16 frameLen;
- /** Yamamoto threshold value */
- Uint16 yamTh;
- /** Maximum initial state metric value */
- Uint8 stateNum;
- /** Traceback convergement mode */
- Bool tbConvrgMode;
- /** Output decision type */
- Uint8 decision;
- /** Output parameters read flag */
- Uint8 readFlag;
- /** Enable/Disable tail biting */
- Bool tailBitEnable;
- /** Tailbiting traceback index mode */
- Uint16 traceBackIndex;
- /** Hard decision output ordering */
- Uint8 outOrder;
- /** Performance and speed */
- Uint8 perf;
- } VCP2_BaseParams;
- /** VCP Error structure */
- typedef struct
- {
- /** Traceback mode error */
- Bool tbnaErr;
- /** Frame length error */
- Bool ftlErr;
- /** Reliability + convergence distance error */
- Bool fctlErr;
- /** Max-Min error */
- Bool maxminErr;
- /** SYMX error */
- Bool symxErr;
- /** SYMR error */
- Bool symrErr;
- } VCP2_Errors;
- /** VCP generator polynomials structure */
- typedef struct
- {
- /** Generator polynomial 0 */
- Uint8 poly0;
- /** Generator polynomial 1 */
- Uint8 poly1;
- /** Generator polynomial 2 */
- Uint8 poly2;
- /** Generator polynomial 3 */
- Uint8 poly3;
- } VCP2_Poly;
- /**************************************************************************\
- * Overlay structure typedef definition
- \**************************************************************************/
- typedef volatile CSL_Vcp2EdmaRegs *CSL_Vcp2RegsOvly;
- typedef volatile CSL_Vcp2ConfigRegs *CSL_Vcp2CfgRegsOvly;
- /**
- * This will have the base-address information for the peripheral instance
- */
- typedef struct {
- /** Base-address of the registers of VCP2 */
- CSL_Vcp2RegsOvly regs;
- /** Base-address of the Configuration registers of VCP2 */
- CSL_Vcp2CfgRegsOvly cfgregs;
- } VCP2BaseAddress;
- /**
- * This structure/object holds the context of the instance of VCP2
- * opened using VCP2_init() function.
- *
- * Pointer to this object is passed as VCP2 Handle to all VCP2 CSL APIs.
- * VCP2_init() function intializes this structure based on the parameters
- * passed
- */
- typedef struct VCP2Obj_s {
- /** Pointer to the register overlay structure of the Tcp2 */
- CSL_Vcp2RegsOvly regs;
- /** Pointer to the Configuration registers overlay structure of the Tcp2 */
- CSL_Vcp2CfgRegsOvly cfgregs;
- /** Instance of TCP2 being referred by this object */
- CSL_InstNum perNum;
- } VCP2Obj;
- /** This is a pointer to Vcp2Obj and is passed as the first
- * parameter to all VCP2 CSL APIs
- */
- typedef struct VCP2Obj_s *VCP2Handle;
- /* @} */
- /** @addtogroup CSL_VCP2_FUNCTION
- @{ */
- /******************************************************************************
- * VCP2 global function declarations
- *****************************************************************************/
- extern void VCP2_genParams (
- const VCP2_BaseParams * pConfigBase,
- VCP2_Params * pConfigParams
- );
- extern void VCP2_genIc (
- const VCP2_Params * pConfigParams,
- VCP2_ConfigIc * pConfigIc
- );
- extern VCP2Handle VCP2_init(
- VCP2Obj * pVcp2Obj,
- Int32 instNum,
- Int32 * pStatus
- );
- extern CSL_Status VCP2_Close (
- VCP2Handle hVcp2
- );
- /* @} */
- #ifdef __cplusplus
- }
- #endif
- #endif
|