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

📄 dmac2isr.c

📁 1.利用Matlab进行产生频率为1000Hz和6000Hz的正弦信号
💻 C
字号:
#include <codec.h>
#include <firlab.h>

extern	unsigned int channel;      /*IN: DMA channel number              */
extern	unsigned int dmsefc;       /*IN: Value to set sync & fr reg      */
extern	unsigned int dmmcr;        /*IN: Value to set mode control reg   */
extern	unsigned int dmctr;	   	  /*IN: Value to set element count reg  */
extern	unsigned int src_page;     /*IN: Value to set source page reg    */
extern	unsigned int src_addr;     /*IN: Value to set source addr reg    */
extern	unsigned int dst_page;     /*IN: Value to set dest page reg      */
extern	unsigned int dst_addr;     /*IN: Value to set dest addr reg      */

extern int buffer[0x500];
extern int out_buffer[0x500];//
extern int coeffs[16];
extern int delaybuff[16]; 
extern int frame; 
extern int flag;
extern int currbuff;
extern int *delayptr1;

void	init_dma3(void)
{
	    	while(DMPREC&0x0008) {};	//DMA3的传送是否结束
	    
	    	/* Initialize DMA channel 3 */

			dmsefc = ((DSYNC_REVT1 <<12));
    		dmmcr = 0x4141;			//AUTOINIT=0,DINM=1,IMOD=0,CTMOD=0,SIND=0x001;DMS=0x01,DIND=0x000,DMD=0x01
    		dmctr = 0xFF;			//256 element/frame
    		src_addr = (unsigned int) &buffer+0x300+((unsigned int)currbuff*0x100);
    		dst_addr = DXR1_ADDR(HANDSET_CODEC);

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

		/* Set number of frames for channel 3 */
    
    		DMA_FRAMECOUNT(DMA_CH3, 0);		//2 frame/block
    		
    		/* Enable channel 3 */

    		DMA_ENABLE(DMA_CH3);
}

interrupt void DMAC2ISR(void)
{
	int *inp_buffer,*out_buffer; 
	int i;

	frame++;
	
	switch(frame)
	{
	  case 3:
	  case 2:
		init_dma3();
	    	break;
	  case 1:
	    if (flag)	//不是最早数据帧
	    	init_dma3();
	    else		//是最早数据帧
	    	flag=0xaa;
	    break;
	  
	  default:
	    break;
	}
	
	inp_buffer=buffer+(frame-1)*0x100;
	
	if (frame==3)	frame=0;
	
	out_buffer=buffer+0x300+currbuff*0x100;
	
	fir(inp_buffer,coeffs,out_buffer,&delayptr1,16,256);
	
	//for (i=0;i<256;i++)
		//*(out_buffer+i)=*(inp_buffer+i);
	
	currbuff^=1;

}


⌨️ 快捷键说明

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