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

📄 dss_dsk6711.c

📁 基于DSP的实时语音信号处理系统设计实例
💻 C
字号:
/*
 *  Copyright 2002 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
/* "@(#) DSP/BIOS 4.80.208 12-06-02 (barracuda-l19)" */
/*
 *  ======== dss_dsk6211.c ========
 */

#include <std.h>
#include <log.h>

#include "dss.h"
#include "dss_priv.h"

/* function prototypes ... */
static Uns  codecControlRead(Uns reg);
static Void codecControlWrite(Uns reg, Uns data);
static Void codecError(Int id);
static Void codecInit(Void);

/*
 * ======== DSS_init ========
 */
Void DSS_init(Void)
{
#ifdef _EDMA_
    DSS_dmaInit();

    /* Enable EDMA interrupt */
    IER |= DSS_IERDMABIT;
#else
    /* Enable McBSP interrupt */
    IER |= DSS_IERRX0BIT;
#endif

    /* Reset McBsp then enable Transmit and Receive bits */
    MCBSP_RSETH(DSS_hMcbsp0, SPCR, 0x0);
    MCBSP_enableRcv(DSS_hMcbsp0);
    MCBSP_enableXmt(DSS_hMcbsp0);

    codecInit();
}

/*
 *  ======== DSS_spWrite ========
 */
Void DSS_spWrite(Uns data)
{
    while ((MCBSP_RGETH(DSS_hMcbsp0, SPCR) & 0x20000) == 0);

    MCBSP_RSETH(DSS_hMcbsp0, DXR, data);
}

/*
 *  ======== DSS_spRead ========
 */
Uns DSS_spRead(Void)
{
    while ((MCBSP_RGETH(DSS_hMcbsp0, SPCR) & 0x2) == 0);

    return (MCBSP_RGETH(DSS_hMcbsp0, DRR));
}

/*
 *  ======== codecInit ========
 */
static Void codecInit(Void)
{
    Uns temp;

    /* Perform Voice Channel Initialisation of TLC320AD535 Codec        */
    /* AD535 has 2 serial port channels - Data, Voice                   */
    /* Data  Channel Controlled by Registers 1,2        (Reg 0 = NOP)   */
    /* Voice Channel Controlled by Registers 3,4,5,6                    */
    /* Only Voice channel used on DSK 6211                              */

    /* Set-Up Register 0 (NOP) - Dummy Read/Write Codec */
    codecControlWrite(0, 0);

    /* Set-Up Register 1 / 2   - Only Used by Data Serial Port -NA      */

    /* Set-Up Register 3       - S/W Reset + Power Down + No loop / gain=0dB */
    codecControlWrite(3, 0x00C6);               /* + With    Reset */
    codecControlWrite(3, 0x0006);               /* + Without Reset */
    temp = codecControlRead(3);
    if ((temp & 0x00ff) != 0x0006) {
        codecError(3);
    }

    /* Set-Up Register 4       - Voice ADC gain = 0dB */
    codecControlWrite(4, 0x0000);
    temp = codecControlRead(4);
    if ((temp & 0x00ff) != 0x0000) {
        codecError(4);
    }

    /* Set-Up Register 5       - Spkr L/R gain = 0dB    */
    codecControlWrite(5, 0x0002);
    temp = codecControlRead(5);
    if ((temp & 0x00fe) != 0x0002) {
        codecError(5);
    }

    /* Set-Up Register 6       - Handset gain  = 0dB    */
    codecControlWrite(6, 0x0000);
    temp = codecControlRead(6);
    if ((temp & 0x0080) != 0x0000) {
        codecError(6);
    }

    /* Set-Up Register - (NOP)          */
    codecControlWrite(0, 0);
    temp = codecControlRead(0);
}

/*
 *  ======== codecControlRead ========
 */
static Uns codecControlRead(Uns reg)
{
    Uns temp;
        
    temp = ((reg & 0x001F) << 8) | 0x2000;

    DSS_spWrite(0);
    DSS_spRead ( );
    DSS_spWrite(1);
    DSS_spRead ( );
    DSS_spWrite(temp);
    temp = DSS_spRead ( );
    DSS_spWrite(0);
    DSS_spRead ( );

    return (temp);
}

/*
 *  ======== codecControlWrite ========
 */
static Void codecControlWrite(Uns reg, Uns data)
{
    Uns temp;
        
    temp = ((reg & 0x001F) << 8) | (data & 0x00ff);

    DSS_spWrite(0);
    DSS_spRead ( );
    DSS_spWrite(1);
    DSS_spRead ( );
    DSS_spWrite(temp);
    DSS_spRead ( );
    DSS_spWrite(0);
    DSS_spRead ( );
}

/*
 * ======== codecError ========
 */
static Void codecError(id)
{
    LOG_error("Error setting up register %d", id);

    for (;;) {
        ;           /* loop forever */
    }
}

⌨️ 快捷键说明

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