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

📄 codec.c

📁 dsp6416开发的底层驱动
💻 C
字号:
/*H******************************************************************************* $Archive::                                                                   $* $Revision::                                                                  $* $Date::                                                                      $* $Author::                                                                    $** DESCRIPTION:  TMS320C64xx TEB CODEC interface.** GLOBALS ** PUBLIC FUNCTIONS:*   GLOBAL int     CODEC_SetConfiguration( CODEC_CONFIG *pCodeConfig )*   GLOBAL int     CODEC_WriteMode(  int ModeReg, int ModeVal )*   GLOBAL int     CODEC_AudioSample( AUDIO_SAMPLE pAudioSample )** PRIVATE FUNCTIONS:** USAGE/LIMITATIONS:** NOTES: Assumes TMS320C64x TEB, with CPLD connected to EMIF B, TBCE0,*        little endian.***H***************************************************************************/#define codec_c/*---- compilation control switches ----------------------------------------*//****************************************************************************** INCLUDE FILES*****************************************************************************//*---- system and platform files -------------------------------------------*/#include <stdlib.h>#include <stdio.h>#include <c6x.h>/*---- program files -------------------------------------------------------*/#include "c6416teb.h"#include "cpld.h"#include "codec.h"/****************************************************************************** EXTERNAL REFERENCE    *****************************************************************************//*---- data declarations ---------------------------------------------------*//*---- function prototypes -------------------------------------------------*//****************************************************************************** PUBLIC DECLARATIONS *****************************************************************************//*---- data declarations ---------------------------------------------------*//****************************************************************************** PRIVATE DECLARATIONS  *****************************************************************************//*---- context -------------------------------------------------------------*/MCBSP_Handle hMcbsp = NULL;int sin_table[]  = { 0, 23170, 32767, 23170, 0, -23170, -32767, -23170 };int ChannelMode  = BOTH_CHANNEL;/*---- data declarations ---------------------------------------------------*//*---- function prototypes -------------------------------------------------*//*---- macros --------------------------------------------------------------*//****************************************************************************** PUBLIC FUNCTION DEFINITIONS*****************************************************************************//*F**************************************************************************** NAME:   MCBSP_Init()** DESCRIPTION: Init the C64xx McBSP 0             *       * NOTES:*   *F***************************************************************************/void MCBSP_Init( void ){	// #PCR 			// FSXP/FSRP falling	// CLKXP falling	// CLKRP rising		// # RCR	// RWDLEN1 32 bits 0x5	// RFRLEN1 2 (Left/Right)		// # XCR	// XWDLEN1 32 bits 0x5	// XRRLEN1 2 (Left/Right)  		// # SPCR	// RRST  ON	// RJUST Left-justify and zero fill LSB of DDR	// XRST  ON	// FREE  ON		MCBSP_Config  Config;	MCBSP_getConfig(hMcbsp, &Config);	Config.pcr  = 0x0000000F;	Config.rcr  = 0x000001A0;	Config.xcr  = 0x000001A0;	Config.spcr = 0x02014001;	MCBSP_config(hMcbsp, &Config);		// Dummy write	MCBSP_write(hMcbsp, 0 );  }/*F**************************************************************************** NAME:  MCBSP_Write()** DESCRIPTION: Wait for xrdy and write value to McBSP            *       * NOTES:*   *F***************************************************************************/void MCBSP_Write( int Data ){    while(!MCBSP_xrdy(hMcbsp));  MCBSP_write(hMcbsp, (Uint32)Data );}/*F**************************************************************************** NAME:   MCBSP_Read()** DESCRIPTION: Wait for rrdy and read value from McBSP          *       * NOTES:*   *F***************************************************************************/int MCBSP_Read( void ){  Uint32 Temp;    while(!MCBSP_rrdy(hMcbsp));   Temp = MCBSP_read(hMcbsp);  return( Temp>>16 );}/*F**************************************************************************** NAME:   CODEC_SetConfiguration()** DESCRIPTION: Set Codec config via the CPLD               *       * NOTES:*   *F***************************************************************************/intCODEC_SetConfiguration( CODEC_CONFIG *pCodeConfig ){    CODEC_WriteMode( MODE_REG0, pCodeConfig->ModeReg0 );    CODEC_WriteMode( MODE_REG1, pCodeConfig->ModeReg1 );    CODEC_WriteMode( MODE_REG2, pCodeConfig->ModeReg2 );    CODEC_WriteMode( MODE_REG3, pCodeConfig->ModeReg3 );            return( 0 );}/*F**************************************************************************** NAME:   CODEC_WriteMode()** DESCRIPTION: Write the code mode via the CPLD            *       * NOTES:*   *F***************************************************************************/int     CODEC_WriteMode(  int ModeReg, int ModeVal ){    int ModeMask;    int Timeout;        switch( ModeReg )    {        case 0:        case 1:         case 2:             ModeMask = 0x01FF;             break;                    case 3:            ModeMask = 0x002E;            break;                    default:             return( 0 );	}		ModeVal &= ModeMask;	ModeVal |= (ModeReg << 9);	Timeout = 1000;	do	{		if( CPLD_IsCodecReady() )		{			CPLD_WriteCodecMode( ModeVal );        	return( ModeVal );        }	}while( Timeout-- > 0 );	// Fail return 0    return(0);}/*F**************************************************************************** NAME:   CODEC_AudioSample()** DESCRIPTION: Write/Read a audio sample to/from the right or left channel            *       * NOTES:*   *F***************************************************************************/int     CODEC_AudioSample( AUDIO_SAMPLE * pAudioSample ){	if( ChannelMode & RIGHT_CHANNEL )	{		MCBSP_Write( pAudioSample->RChOut );		pAudioSample->RChIn = MCBSP_Read();	}		if( ChannelMode & LEFT_CHANNEL )	{		MCBSP_Write( pAudioSample->LChOut );		pAudioSample->LChIn =  MCBSP_Read();	}	    return( 0 );}/*F**************************************************************************** NAME:   CODEC_PlayTone()** DESCRIPTION: Play a tune, mate, uh I mean a tone.            *       * NOTES:*   *F***************************************************************************/void CODEC_PlayTone( int Number, int TonePlayBk, int LR_Channel){  int i,j;  AUDIO_SAMPLE AudioSample;  CODEC_CONFIG  CodecConfig = { MR0_DEFAULT,                                MR1_DEFAULT,                                MR2_DEFAULT,                                MR3_DEFAULT };  hMcbsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);  CODEC_SetConfiguration( &CodecConfig );  MCBSP_Init();    if(TonePlayBk)  {    for (i=0;i<Number;i++)    {      for (j=0;j<8;j++)      {          // If both channels are on, (McBsp is two word frame)          // then send tone data or 0 based on the user LR_Channel          // request.          //          if( ChannelMode == BOTH_CHANNEL )          {              MCBSP_Write(  (LR_Channel &  RIGHT_CHANNEL )                          ?  sin_table[j]                          : 0 );                                        MCBSP_Write(  (LR_Channel & LEFT_CHANNEL )                          ?  sin_table[j]                          : 0 );          }          else          	MCBSP_Write(sin_table[j]);      }    }  }  else  {    AudioSample.LChOut = 0;    AudioSample.RChOut = 0;    AudioSample.LChIn  = 0;    AudioSample.RChIn  = 0;  	CODEC_AudioSample( &AudioSample );    for (i=0;i<Number;i++)    {  		AudioSample.LChOut = AudioSample.LChIn;  		AudioSample.RChOut = AudioSample.RChIn;      	CODEC_AudioSample( &AudioSample );    }  }    MCBSP_close(hMcbsp);  }

⌨️ 快捷键说明

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