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

📄 dssdsk6711.c

📁 DSP 基于 TMS320C6711 DSK 的功能演示程序
💻 C
字号:
/*
 *  Copyright 2001 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.
 *  U.S. Patent Nos. 5,283,900  5,392,448
 */
/* "@(#) XDAS 2.12 05-21-01 (__imports)" */
/*
 *  ======== dssdsk6711.c ========
 *
 */

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

#include <c6x.h>
#include <dss.h>
#include <edma.h>

#include "c6711dsk.h"

#define MCSP_RXINT_BIT          0x00000800      /* bitmask McBSP interrupt */
#define DSP_6711_EDMA_INT_BIT   0x00000100      /* bitmask EDMA  interrupt */

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

Void    mcbsp0Init(Void);
Uns     mcbsp0Read(Void);
Void    mcbsp0Write(Uns data);


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

    /* Enable EDMA interrupt */
    IER |= DSP_6711_EDMA_INT_BIT;
#else
    /* Enable McBSP interrupt */
    IER |= MCSP_RXINT_BIT;
#endif

    mcbsp0Init();
    codecInit();
}

/*
 * ======== mcbsp0Init ========
 */ 
Void mcbsp0Init(Void)
{
    *(volatile Uns *) McBSP0_SPCR       = 0x0;
    *(volatile Uns *) McBSP0_PCR        = 0x0;

    /* set RX and TX control registers to 16 bit data/frame */
    *(volatile Uns *) McBSP0_RCR        = 0x10040;
    *(volatile Uns *) McBSP0_XCR        = 0x10040;

    /* setup SP control register */ 
    *(volatile Uns *) McBSP0_SPCR       = 0x00010001;
}

/*
 *  ======== mcbsp0Write ========
 */
Void mcbsp0Write(Uns data)
{
    while ((*(volatile Uns *) McBSP0_SPCR & 0x20000) == 0);
    
    *(volatile Uns *) McBSP0_DXR = data;
}

/*
 *  ======== mcbsp0Read ========
 */
Uns mcbsp0Read(void)
{
    while ((*(volatile Uns *) McBSP0_SPCR & 0x2) == 0);

    return (*(volatile Uns *) McBSP0_DRR);
}

/*
 *  ======== codecInit ========
 */
Void codecInit(Void)
{
    Uns temp_variable;

    /* 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 6711                              */

    /* Set-Up Register 0 (NOP) - Dummy Read/Write Codec */
    codecControlWrite(0, 0);
    temp_variable = codecControlRead(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_variable = codecControlRead(3);

    if ( (temp_variable & 0x00ff) != 0x0006) {
        codecError(3);
    }

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

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

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

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

#if 0
    for (;;) {
        /* Codec Loopback Test Code */
        mcbsp0Write((mcbsp0Read() & 0xfffe));
    }
#endif
}

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

    mcbsp0Write(0);
    mcbsp0Read ( );
    mcbsp0Write(1);
    mcbsp0Read ( );
    mcbsp0Write(regTemp);
    regTemp = mcbsp0Read ( );
    mcbsp0Write(0);
    mcbsp0Read ( );

    return (regTemp);
}

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

    mcbsp0Write(0);
    mcbsp0Read ( );
    mcbsp0Write(1);
    mcbsp0Read ( );
    mcbsp0Write(regTemp);
    mcbsp0Read ( );
    mcbsp0Write(0);
    mcbsp0Read ( );
}

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

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

⌨️ 快捷键说明

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