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

📄 rtdxlab.c

📁 SEED_TMS320vc5402dsk是在TI的TMS320VC5402DSK板基础上简化开发出来的
💻 C
字号:
/*****************************************************************************/
/* FIRlab.C  AIC,McBSP,DMA initialization for FIR lab Filter                 */ 
/*                                                                           */
/* Goal:  This code performs the following functions:                        */
/*			- toggle the three LEDs on the DSK								 */
/*			- setup AIC (CODEC) parameters									 */
/*  		- initialize DMA Channel (CH2-input)			                 */
/*			- turn on interrupts											 */
/*			- run forever (waiting for DMA interrupts to transfer data)		 */
/*																			 */
/* Author: Scott Bland     Date: 03/20/2000									 */
/*****************************************************************************/
   
/*****************************************************************************/
/* Include Files                                                             */
/*****************************************************************************/

#include <rtdx.h>	/* $MJB RTDX include files */
#include <type.h>
#include <board.h>
#include <codec.h>
#include <firlab.h>


/*****************************************************************************/
/* Function Prototypes                                                       */
/*****************************************************************************/

void delay(s16 period);
extern void DMAC2ISR();


/*****************************************************************************/
/* Global Variables                                                          */
/*****************************************************************************/

HANDLE hHandset;
unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;
unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;

/* Create specific data section for buffer (symbol, section_name) */
#pragma DATA_SECTION(buffer,"audio_buffer");
int buffer[0x500];

/* Create specific data section for coeffiecients */
#pragma DATA_SECTION(coeffs,"coefficients");
/* Low  Pass Filter */ 
   int coeffs[16]={0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800};
/* High Pass Filter */ 
/* int coeffs[16]={0xF59B,0x147D,0xF2A3,0x0992,0xD430,0x0028,0x9FAF,0x73AA,0x73AA,0x9FAF,0x0028,0xD430,0x0992,0xF2A3,0x147D,0xF59B}; */
/* Band Pass Filter */ 
/* int coeffs[16]={0x0732,0xEC84,0x0113,0xE374,0xEC95,0xEFE1,0xB991,0x7E4C,0x7E4C,0xB991,0xEFE1,0xEC95,0xE374,0x0113,0xEC84,0x0732}; */
/* Band Stop Filter */
/* int coeffs[16]={0xO3D6,0x014A,0xEF21,0x0609,0xCBAE,0x4E78,0x0510,0x6012,0x6012,0x0510,0x4E78,0xCBAE,0x0609,0xEF21,0x014A,0xO3D6}; */

/* Create specific data section for delay buffer  */
#pragma DATA_SECTION(delaybuff,"delay");
int delaybuff[16]={0}; 
 

/* declare and initialize two variables for DMAC ISRs */

int frame=0; 
int flag=0;
int temp;   
int currbuff = 0;
int filt_flag = 0;


/* delayptr holds the address of the start of the delay buffer */
     
int *delayptr1 = &(delaybuff[0]);                

/* $MJB RTDX message array  */
    struct {
        int filt_flag;  	/* on/off flag for filter */
        int h[16]; 			/* filter coefficients    */
    } rtdx_msg;

/* $MJB macros creates input channel */
    RTDX_CreateInputChannel(ichan);	


/*****************************************************************************/
/* MAIN                                                                      */
/*****************************************************************************/

void main()
{   

	s16 cnt=1;
	
/* These are the items that BIOS will set when we use it */

    BSCR = 0x8806;
    XPC = 0;
    PMST = 0xA0;
    brd_set_cpu_freq(100);
    TIMER_HALT(0); 
    brd_set_wait_states(7, 7, 9);
    TIMER_RESET(0); 
    
/* ----------------------------------------------------- */

	if(brd_init_bios())	  			
        return;
         
	while ( cnt-- )
	{
		brd_led_toggle(BRD_LED0);
		delay(3000);
		brd_led_toggle(BRD_LED0);
		brd_led_toggle(BRD_LED1);
		delay(3000);
		brd_led_toggle(BRD_LED1);
		brd_led_toggle(BRD_LED2);
		delay(3000);
		brd_led_toggle(BRD_LED2);
	}   
	
/* $MJB Initialize RTDX */
    RTDX_enableInput(&ichan);	

/* Open Handset Codec */

    hHandset = codec_open(HANDSET_CODEC);               /* Acquire handle to codec */

/* Set codec parameters */

    codec_dac_mode(hHandset, CODEC_DAC_15BIT);          /* DAC in 15-bit mode */
    codec_adc_mode(hHandset, CODEC_ADC_15BIT);          /* ADC in 15-bit mode */
    codec_ain_gain(hHandset, CODEC_AIN_6dB);            /* 6dB gain on analog input to ADC */
    codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB);    /* -6dB gain on analog output from DAC */
    codec_sample_rate(hHandset,SR_16000);               /* 16KHz sampling rate */

/* Clear IFR */
 
   INTR_CLR_FLAG(DMAC2);

/* Reset all DMA channels */ 

    dma_reset_all();


/* Initialize DMA channel 2 */

    dmsefc = ((DSYNC_REVT1 <<12));
    dmmcr = ((AUTOINIT_ENABLE << 15) | (DINM_ENABLE << 14) | (IMOD_HALFBLOCK <<13) | (CTMOD_DEC <<12) | (INDEXMODE_NOMOD << 8) | (SPACE_DATA << 6) | (INDEXMODE_INC << 2) | (SPACE_DATA));
    dmctr = 0xFF;
    src_addr = DRR1_ADDR(HANDSET_CODEC);
    dst_addr = (unsigned int) &buffer;

    dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);

/* Set number of frames for channel 2 */
    
    DMA_FRAMECOUNT(DMA_CH2, 2);
     
/* Set up global autoinit registers for DMA CH2 Input */

    dmgsa = src_addr;
    dmgda = dst_addr;
    dmgcr = 0xFF;
    dmgfr = 2;
    
/* Set up global priority and enable control register for Ch2 */

    dmpre = ((HIGH_PRIORITY << 10) | (INTSEL_01 << 6));
    dmsrcp = SPACE_DATA;
    dmdstp = SPACE_DATA;
    dmidx0 = 0;
    dmidx1 = 0;
    dmfri0 = 0;
    dmfri1 = 0;

    dma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);

/* Enable channel 2 */

    DMA_ENABLE(DMA_CH2);  
    
/* prime the serial port to begin input buffer stream */
    temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);  
     
/* Enable DMAC2 interrupt */
 
    INTR_ENABLE(DMAC2);
   
/* Enable Global Interrupts */ 

    INTR_GLOBAL_ENABLE;

/* Endless loop waiting for DMAC2 interrupt */
    
	for(;;){                   

	  RTDX_readNB( &ichan, &rtdx_msg, sizeof(rtdx_msg) );	
	  	                 
	  while ( RTDX_channelBusy(&ichan) ) {
		/* RTDX_Poll(); in the foreground interrupt */
	  } /* while() */
	  
	  for (cnt=0; cnt<16; cnt++) coeffs[cnt] = rtdx_msg.h[cnt];
      filt_flag = rtdx_msg.filt_flag;
	  		  			                               
	} /* for() */

} /* main() */


/*****************************************************************************/
/* delay()   											 */
/*****************************************************************************/

void delay(s16 period)
{
    int i, j;
    
    for(i=0; i<period; i++)
    {
        for(j=0; j<period>>1; j++);
    }
}  

⌨️ 快捷键说明

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