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

📄 dssdsk6211.c

📁 使用在dsp TI DSK6711中 很多controller 的例子
💻 C
字号:
/*

 *  Copyright 2003 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.

 *

 *  @(#) XDAS 2.51.00 11-29-2003 (xdas-2.50.00.9)

 */

/*

 *  ======== dssdsk6211.c ========

 *

 */



#include <std.h>

#include <log.h>



#include <c6x.h>

#include <dss.h>

#include <edma.h>



#include "c6211dsk.h"



#define MCSP_RXINT_BIT          0x00000800      /* bitmask McBSP interrupt */

#define DSP_6211_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_6211_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 6211                              */



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