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

📄 model.h

📁 这是个TI公司的TMS320VC5502的专门用的usb通讯程序
💻 H
字号:

/*************************************************************************************/
//
// Config CODEC control registers
//
/*************************************************************************************/
#include "CODEC_H"
#include "main.h"
#include <csl_dma.h>
#include <csl_i2c.h>
#include <csl_emif.h>
#include <csl_mcbsp.h>

#undef  CODEC_ADDR
#define CODEC_ADDR 0x1A

	// 数字音频接口格式设置
	// AIC23为主模式,数据为I2S模式,数据长度16位   
 Uint16 Digital_Audio_Inteface_Format[2]={
 	Codec_DAIF_REV,
 	DAIF_MS(1)+DAIF_LRSWAP(0)+DAIF_LRP(0)+DAIF_IWL(0)+DAIF_FOR(2)};

	// AIC23的波特率设置,采样率为8k,CLKIN=CLKOUT=MCLK
	// 时钟模式设为普通模式,基过采样率为250Fs
 Uint16 Sample_Rate_Control[2] = {
 	Codec_SRC_REV,
 	SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(3)+SRC_BOSR(0)+SRC_USB(0)};

	// AIC23寄存器复位
 Uint16 Reset[2] ={
 	Codec_RST_REV,
 	RST_RES};

	// AIC23节电方式设置,所有部分均处于工作状态
 Uint16 Power_Down_Control[2] ={
 	Codec_PDC_REV,
 	PDC_DEFAULT};

	// AIC23模拟音频的控制:关掉侧音
	// DAC使能,ADC输入选择为音频输入
 Uint16 Analog_Aduio_Path_Control[2] = {
  	Codec_AAPC_STA2(0),
  	AAPC_STA10(0)+AAPC_STE(0)+AAPC_DAC(1)+AAPC_BYP(0)+AAPC_INSEL(0)+AAPC_MICM(0)+AAPC_MICB(1)};

	// AIC23数字音频通路的控制
	// 使能ADC高通滤波
 Uint16 Digital_Audio_Path_Control[2] ={
  	Codec_DAPC_REV,
  	DAPC_DACM(0)+DAPC_DEEMP(0)+DAPC_ADCHP(1)};

	// AIC23数字接口的使能
 Uint16 Digital_Interface_Activation[2] ={
 	Codec_DIA_REV,
 	DIA_ACT(1)};

	// AIC23左通路音频调节	
 Uint16 Left_Line_Input_Volume_Control[2] ={
  	Codec_LLIVC_LPS(0),
  	LLIVC_LIM(0)+LLIVC_LIV(31)};

	// AIC23右通路音频调节
 Uint16 Right_Line_Input_Volume_Control[2] = {
 	Codec_RLIVC_RLS(0),
 	RLIVC_RIM(0)+RLIVC_RIV(31)};

	// AIC23耳机左通路音频调节
 Uint16 Left_Headphone_Volume_Control[2] = {
 	Codec_LHPVC_LRS(0),
 	LHPVC_LZC(0)+LHPVC_LHV(127)};

	// AIC23耳机右通路音频调节
 Uint16 Right_Headphone_Volume_Control[2] = {
 	Codec_RHPVC_RLS(0),
 	LHPVC_RZC(0)+LHPVC_RHV(127)};

/* 声明CSL库初始化、USB和定时器中断配置函数*/

void Csl_Config(void);
void Codec_Config(void);
void codec_sample_rate(unsigned int sample);
void Mcbsp_Config(void);
void MyDma_Config(void);

unsigned int sysreg_read(unsigned int port);
void SysInt_Enable();
void sysint_disable(unsigned int setdata);

void USB_Command_Write(unsigned int regdata);
unsigned int USB_Command_Read(void);
BOOL SX2_FifoWriteSingle(long int channel, int value);
unsigned int SX2_FifoReadSingle(long int channel);

/***************************************************************************************/
//
// Config I2C: Use I2C to interface CODEC control interface
//
/***************************************************************************************/

I2C_Setup Setup = {
					0, 		// 7 bit address mode 
					0x0000, // own address 
					100, 	// clkout value (Mhz) 
					400, 	// a number between 10 and 400
					0, 		// 8 bits/byte to be received or transmitted 
					0, 		// DLB mode off 
					0 		// FREE mode on 
				  };

/****************************************************************************************/
//
// Config McBSP:  Use McBSP to send and receive the data between DSP and AIC23B
//
/****************************************************************************************/

MCBSP_Config Mcbsp1Config = {
  MCBSP_SPCR1_RMK(    
    MCBSP_SPCR1_DLB_OFF,  			// DLB    = 0 
    MCBSP_SPCR1_RJUST_RZF,          // RJUST  = 0,right justify the data and zero fill the MSBs
    MCBSP_SPCR1_CLKSTP_DISABLE,     // CLKSTP = 0 
    MCBSP_SPCR1_DXENA_OFF,          // DXENA  = 1,DX delay enabler on 
    0,             				   	// Reserved   = 0 
    MCBSP_SPCR1_RINTM_RRDY,         // RINTM  = 0 
    MCBSP_SPCR1_RSYNCERR_NO,        // RSYNCER = 0 
    MCBSP_SPCR1_RFULL_NO,           // RFULL = 0  
    MCBSP_SPCR1_RRDY_NO,            // RRDY = 0  
    MCBSP_SPCR1_RRST_DISABLE 		// RRST   = 0; Disable receiver 
   ),
  MCBSP_SPCR2_RMK(  
    MCBSP_SPCR2_FREE_NO,            // FREE   = 0 
    MCBSP_SPCR2_SOFT_NO,            // SOFT   = 0 
    MCBSP_SPCR2_FRST_RESET,         // FRST   = 0 ; Disable the frame-sync logic
    MCBSP_SPCR2_GRST_RESET,         // GRST   = 0 ; The sample rate generator is in its reset state 
    MCBSP_SPCR2_XINTM_XRDY,         // XINTM  = 0 
    MCBSP_SPCR2_XSYNCERR_NO,        // XSYNCER =0 
    MCBSP_SPCR2_XEMPTY_NO,          // XEMPTY = 0 
    MCBSP_SPCR2_XRDY_NO,            // XRDY   = 0             
    MCBSP_SPCR2_XRST_DISABLE 	    // XRST   = 0 Disable transimitter 
   ),
   // 单数据相,接受数据长度为16位,每相2个数据
  MCBSP_RCR1_RMK( 
  	MCBSP_RCR1_RFRLEN1_OF(1),       // RFRLEN1 = 1 
  	MCBSP_RCR1_RWDLEN1_16BIT        // RWDLEN1 = 2 
  ),
  MCBSP_RCR2_RMK(    
    MCBSP_RCR2_RPHASE_SINGLE,       // RPHASE  = 0 
    MCBSP_RCR2_RFRLEN2_OF(1),       // RFRLEN2 = 0 
    MCBSP_RCR2_RWDLEN2_16BIT,       // RWDLEN2 = 2 
    MCBSP_RCR2_RCOMPAND_MSB,        // RCOMPAND = 0 No companding,any size data, MSB received first 
    MCBSP_RCR2_RFIG_NO,  		    // RFIG    = 1 Frame-sync ignore 
    MCBSP_RCR2_RDATDLY_1BIT  		// RDATDLY = 1 1-bit data delay 
    ),  
   MCBSP_XCR1_RMK(    
    MCBSP_XCR1_XFRLEN1_OF(1),       // XFRLEN1 = 1  
    MCBSP_XCR1_XWDLEN1_16BIT        // XWDLEN1 = 2   
 ),   
 MCBSP_XCR2_RMK(   
    MCBSP_XCR2_XPHASE_SINGLE,       // XPHASE  = 0 
    MCBSP_XCR2_XFRLEN2_OF(1),       // XFRLEN2 = 0 
    MCBSP_XCR2_XWDLEN2_16BIT,       // XWDLEN2 = 2 
    MCBSP_XCR2_XCOMPAND_MSB,        // XCOMPAND = 0 
    MCBSP_XCR2_XFIG_NO,             // XFIG    = 1 Unexpected Frame-sync ignore 
    MCBSP_XCR2_XDATDLY_1BIT         // XDATDLY = 1 1-bit data delay 
  ),            
 MCBSP_SRGR1_DEFAULT,
 MCBSP_SRGR2_DEFAULT,				 
 MCBSP_MCR1_DEFAULT,
 MCBSP_MCR2_DEFAULT, 
 MCBSP_PCR_RMK(
   MCBSP_PCR_IDLEEN_RESET,          // IDLEEN   = 0   
   MCBSP_PCR_XIOEN_SP,              // XIOEN    = 0   
   MCBSP_PCR_RIOEN_SP,              // RIOEN    = 0   
   MCBSP_PCR_FSXM_EXTERNAL,  		// FSXM     = 0 Tranmit frame-syn is provided by AIC23B 
   MCBSP_PCR_FSRM_EXTERNAL,         // FSRM     = 0 Receive frame-syn is provided by AIC23B 
   MCBSP_PCR_CLKXM_INPUT,   		// CLKR is input 
   MCBSP_PCR_CLKRM_INPUT,           // CLKX is input 
   MCBSP_PCR_SCLKME_NO,             // SCLKME=0 CLKG is taken from the McBSP internal input clock  
   MCBSP_PCR_CLKSSTAT_0,            // The signal on the CLKS pin is low   
   MCBSP_PCR_DXSTAT_0,              // Drive the signal on the DX pin low   
   MCBSP_PCR_DRSTAT_0,              // The signal on the DR pin is low   
   MCBSP_PCR_FSXP_ACTIVEHIGH,  		// FSXP     = 1 Because a falling edge on LRCIN or LRCOUT starts data transfer  
   MCBSP_PCR_FSRP_ACTIVELOW,        // FSRP     = 1   
   MCBSP_PCR_CLKXP_FALLING,         // CLKXP    = 1   The falling edge of BCLK starts data transfer 
   MCBSP_PCR_CLKRP_RISING           // CLKRP    = 0   
 ),
 MCBSP_RCERA_DEFAULT, 
 MCBSP_RCERB_DEFAULT, 
 MCBSP_RCERC_DEFAULT, 
 MCBSP_RCERD_DEFAULT, 
 MCBSP_RCERE_DEFAULT, 
 MCBSP_RCERF_DEFAULT, 
 MCBSP_RCERG_DEFAULT, 
 MCBSP_RCERH_DEFAULT, 
 MCBSP_XCERA_DEFAULT,
 MCBSP_XCERB_DEFAULT,
 MCBSP_XCERC_DEFAULT,
 MCBSP_XCERD_DEFAULT,  
 MCBSP_XCERE_DEFAULT,
 MCBSP_XCERF_DEFAULT,  
 MCBSP_XCERG_DEFAULT,
 MCBSP_XCERH_DEFAULT
 }; 
// 定义McBSP的句柄
MCBSP_Handle hMcbsp;

/********************************************************************************************/
//	
// DMA configration struction
//
/********************************************************************************************/

DMA_Config  MyConfig = {
  DMA_DMACSDP_RMK(					/* Source and destination parameters register */
    DMA_DMACSDP_DSTBEN_NOBURST,		// Bursting disabled (single access enabled) at the destination
    DMA_DMACSDP_DSTPACK_OFF,		// Packing disabled at the destination
    DMA_DMACSDP_DST_DARAM,			// DARAM via internal memory port 1	
    DMA_DMACSDP_SRCBEN_NOBURST,
    DMA_DMACSDP_SRCPACK_OFF,
    DMA_DMACSDP_SRC_EMIF,			// DMA_DMACSDP_SRC_EMIF
    DMA_DMACSDP_DATATYPE_16BIT
  ),                                
  DMA_DMACCR_RMK(					/* Channel control register  */
    DMA_DMACCR_DSTAMODE_POSTINC,	// Automatic post increment
    DMA_DMACCR_SRCAMODE_POSTINC,
    DMA_DMACCR_ENDPROG_OFF,			// Configuration registers ready for programming / Programming in progress
    DMA_DMACCR_REPEAT_OFF,			// Repeat only if ENDPROG = 1
    DMA_DMACCR_AUTOINIT_OFF,		// Auto-initialization is disabled
    DMA_DMACCR_EN_STOP,				// Channel is disabled
    DMA_DMACCR_PRIO_HI,				// High priority
    DMA_DMACCR_FS_ENABLE,			// Frame synchronization
    DMA_DMACCR_SYNC_NONE			// No synchronization event  这个得改成什么同步?
  ),                                     
  DMA_DMACICR_RMK(					/* Interrupt control register */
    DMA_DMACICR_BLOCKIE_OFF,
    DMA_DMACICR_LASTIE_OFF,
    DMA_DMACICR_FRAMEIE_ON,
    DMA_DMACICR_FIRSTHALFIE_OFF,
    DMA_DMACICR_DROPIE_OFF,
    DMA_DMACICR_TIMEOUTIE_OFF
  ),                                      
    (DMA_AdrPtr) &codecdat,     /* DMA Channel Source Start Address (Lower Bits) */
    0,                          /* DMA Channel Source Start Address (Upper Bits) */
    (DMA_AdrPtr)&epdataw,       /* DMA Channel Source Destination Address(Lower Bits) */
    0,                          /* DMA Channel Source Destination Address (Upper Bits) */
    400,         		/* Channel Element Number Register */
    1,                  /* Channel Frame Number Register */
    0,                  /* DMA Channel Source Frame Index Register */
    0,                  /* DMA Channel Source Element Index Register */
    0,					/* DMA Channel Destination Frame Index Register */
    0     				/* DMA Channel Destination Element Index */
};

/****************************************************************************************/
//
// Config EMIF:  Use emif to access control and data interface of USB
//
/****************************************************************************************/

EMIF_Config MyEmifConfig = {
EMIF_GBLCTL1_RMK(					// EMIF Global Control Register 1
  EMIF_GBLCTL1_NOHOLD_HOLD_ENABLED,	// Hold enable
  EMIF_GBLCTL2_EK2HZ_HIGHZ,			// EMIF_GBLCTL1_EK1HZ_EK1ENHigh-Z control
  EMIF_GBLCTL1_EK1EN_ENABLED		// ECLKOUT1 Enable
  ),
EMIF_GBLCTL2_RMK(					// EMIF Global Control Register 2
  EMIF_GBLCTL2_EK2RATE_1XCLK,		// ECLKOUT2 Rate
  EMIF_GBLCTL2_EK2HZ_HIGHZ,			// EMIF_GBLCTL2_EK2HZ_EK2ENEK2HZ = 0, ECLKOUT2 is driven with value specified by EKnEN during
  EMIF_GBLCTL2_EK2EN_DISABLED		// ECLKOUT2 Enable (enabled by default)
  ), 
EMIF_CE1CTL1_RMK(					// CE1 Space Control Register 1
  EMIF_CE1CTL1_TA_OF(3),			// Turn-Around time
  EMIF_CE1CTL1_READ_STROBE_OF(6),	// Read strobe width
  EMIF_CE1CTL1_MTYPE_16BIT_ASYNC,	// Access type
  EMIF_CE1CTL1_WRITE_HOLD_MSB_LOW,	// Write hold width MSB bit
  EMIF_CE1CTL1_READ_HOLD_OF(3)		// Read hold width
  ),
EMIF_CE1CTL2_RMK(					// CE1 Space Control Register 2
  EMIF_CE1CTL2_WRITE_SETUP_OF(2),	// Write setup width
  EMIF_CE1CTL2_WRITE_STROBE_OF(6),	// Write strobe width
  EMIF_CE1CTL2_WRITE_HOLD_OF(8),	// Write hold width
  EMIF_CE1CTL2_READ_SETUP_OF(2)		// Read setup width
  ),
EMIF_CE0CTL1_RMK(					// CE0 Space Control Register 1
  EMIF_CE0CTL1_TA_DEFAULT,
  EMIF_CE0CTL1_READ_STROBE_DEFAULT,
  EMIF_CE0CTL1_MTYPE_DEFAULT,
  EMIF_CE0CTL1_WRITE_HOLD_MSB_DEFAULT,
  EMIF_CE0CTL1_READ_HOLD_DEFAULT
  ),
EMIF_CE0CTL2_RMK(					// CE0 Space Control Register 2
  EMIF_CE0CTL2_WRITE_SETUP_DEFAULT,
  EMIF_CE0CTL2_WRITE_STROBE_DEFAULT,
  EMIF_CE0CTL2_WRITE_HOLD_DEFAULT,
  EMIF_CE0CTL2_READ_SETUP_DEFAULT
  ),
EMIF_CE2CTL1_RMK(					// CE2 Space Control Register 1
  EMIF_CE2CTL1_TA_DEFAULT,			// Not use for SDRAM (asynchronous memory types only)
  EMIF_CE2CTL1_READ_STROBE_DEFAULT,	// Read strobe width
  EMIF_CE2CTL1_MTYPE_32BIT_SDRAM,	// 32-bit-wide SDRAM
  EMIF_CE2CTL1_WRITE_HOLD_DEFAULT,	// Write hold width
  EMIF_CE2CTL1_READ_HOLD_DEFAULT	// Read hold width
  ),
EMIF_CE2CTL2_RMK(					// CE2 Space Control Register 2
  EMIF_CE2CTL2_WRITE_SETUP_DEFAULT,	// Write setup width
  EMIF_CE2CTL2_WRITE_STROBE_DEFAULT,// Write strobe width
  EMIF_CE2CTL2_WRITE_HOLD_DEFAULT,	// Write hold width
  EMIF_CE2CTL2_READ_SETUP_DEFAULT	// Read setup width
  ),
EMIF_CE3CTL1_RMK(					// CE3 Space Control Register 1
  EMIF_CE3CTL1_TA_DEFAULT,			// Not use for SDRAM (asynchronous memory types only)
  EMIF_CE3CTL1_READ_STROBE_DEFAULT,	// Read strobe width
  EMIF_CE2CTL1_MTYPE_32BIT_SDRAM,	// 32-bit-wide SDRAM
  EMIF_CE3CTL1_WRITE_HOLD_DEFAULT,	// Write hold width
  EMIF_CE3CTL1_READ_HOLD_DEFAULT	// Read hold width
  ),
EMIF_CE3CTL2_RMK(					// CE3 Space Control Register 2
  EMIF_CE3CTL2_WRITE_SETUP_DEFAULT,	// Write setup width
  EMIF_CE3CTL2_WRITE_STROBE_DEFAULT,// Write strobe width
  EMIF_CE3CTL2_WRITE_HOLD_DEFAULT,	// Write hold width
  EMIF_CE3CTL2_READ_SETUP_DEFAULT	// Read setup width
  ),
EMIF_SDCTL1_RMK(					// SDRAM Control Register 1
  EMIF_SDCTL1_TRC_OF(6),			// Specifies tRC value of the SDRAM in EMIF clock cycles.
  EMIF_SDCTL1_SLFRFR_DISABLED		// Auto-refresh mode
  ),
EMIF_SDCTL2_RMK(					// SDRAM Control Register 2
  0x11,								// 4 banks,11 row address, 8 column address
  EMIF_SDCTL2_RFEN_ENABLED,			// Refresh enabled
  EMIF_SDCTL2_INIT_INIT_SDRAM,
  EMIF_SDCTL2_TRCD_OF(1),			// Specifies tRCD value of the SDRAM in EMIF clock cycles
  EMIF_SDCTL2_TRP_OF(1)				// Specifies tRP value of the SDRAM in EMIF clock cycles
  ),
0x61B,								// SDRAM Refresh Control Register 1
0x0300,								// SDRAM Refresh Control Register 2
EMIF_SDEXT1_RMK(					// SDRAM Extension Register 1
  EMIF_SDEXT1_R2WDQM_1CYCLE,
  EMIF_SDEXT1_RD2WR_3CYCLES,
  EMIF_SDEXT1_RD2DEAC_1CYCLE,
  EMIF_SDEXT1_RD2RD_1CYCLE,
  EMIF_SDEXT1_THZP_OF(1),			// tPROZ2=2
  EMIF_SDEXT1_TWR_OF(0),			//
  EMIF_SDEXT1_TRRD_2CYCLES,
  EMIF_SDEXT1_TRAS_OF(4),
  EMIF_SDEXT1_TCL_2CYCLES
  ),
EMIF_SDEXT2_RMK(					// SDRAM Extension Register 2
  EMIF_SDEXT2_WR2RD_0CYCLES,
  EMIF_SDEXT2_WR2DEAC_1CYCLE,
  0,
  EMIF_SDEXT2_R2WDQM_1CYCLE
  ),
EMIF_CE1SEC1_DEFAULT,				// CE1 Secondary Control Register 1
EMIF_CE0SEC1_DEFAULT,				// CE0 Secondary Control Register 1
EMIF_CE2SEC1_DEFAULT,				// CE2 Secondary Control Register 1
EMIF_CE3SEC1_DEFAULT,				// CE3 Secondary Control Register 1
EMIF_CESCR_DEFAULT					// CE Size Control Register								
  };
  
//******************************************************************************//
//	No more
//******************************************************************************//

⌨️ 快捷键说明

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