main.c

来自「F2812实现电机控制源程序.rar」· C语言 代码 · 共 112 行

C
112
字号
/*********************************************************************
**	Module Name:		AUDIO   				    				**
**	Author:				Cbq  			    						**
**	Version:			1.0			    							**
**	CreateDate:			2008-05-22		    						**
**	Description:		            			    				**
**	Remark:				Huozq		    							**
**	Revision History:	2008-11-10			    					**
**********************************************************************/

/*********************************************************************
**	实验目的:通过学习音频实验,了解DSP的MCBSP的应用                  **
**	实验说明:我们从原理图可看到,TLV320AIC23的9,10脚分别用做PHONE的  **
**           左右声道输出端,17,18脚用做MIC的输入端,21脚用做了片选.  **
**           23,24分别用SPI的2线制作为控制信号的输入端.3,4,5,6,7是  **
**           做为AUDIO数据的基准时钟,串行数据输出,串行数据输入,帧同 **
**           步输入,帧同步输出端,这些都是由DSP的MCBSP引出的.这里大  **
**           家可以翻开我们提供的手册,来查看具体的管脚说明.         **
**	实验结果:运行程序,可以听到警报声。                              **
**********************************************************************/


#include "DSP28_Device.h"


Uint16	  	volume;
int ADbuf[500];
int DA_wptr,DA_rptr,y;
int play_mode;	//模式选择,录音还是放音。为0是连续放音,警报声;选1是边录音边放。

//MCLK=12M,BCLK=2M,FSOUT/FSIN=44.1K

unsigned int * SIAdd  = (unsigned int *) 0x4600;
//bit0->CS  bit1->Data  bit2->SCLK


void main(void)
{
	Uint16	temp,i;
	
	/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;
	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE矢量表*/
	InitPieVectTable();	
	InitPeripherals();	
  
	InitAic23();	
	delay(5000);
	
	EALLOW;	// This is needed to write to EALLOW protected registers
	PieVectTable.MRINTA = &ISRMcbspSend;
	EDIS;   // This is needed to disable write to EALLOW protected registers
	IER |= M_INT6;
	PieCtrl.PIEIER6.bit.INTx5 = 1;//McBSP接收中断
	
    // Enable global Interrupts and higher priority real-time debug events:
	
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM
	
	play_mode = 0;
	
	* SIAdd=0x0001;

    while(1)
    	{	
    		for(temp=30000;temp>0;temp-=100)
    			{
       				for(i=0;i<2;i++)
      					{
         					y=20000;       
         					delay(temp);
         					y=-20000;       
         					delay(temp);
       					}
     			} 
     	}		 
}
interrupt void  ISRMcbspSend(void)
{
    int temp;
	PieCtrl.PIEACK.all = 0xFFFF;
	PieCtrl.PIEIFR6.bit.INTx5 = 0;
	ERTM;
        
      temp=McbspRegs.DRR1.all; 
        
      DA_rptr++;
      if(DA_rptr>=500)
            DA_rptr=0;

      ADbuf[DA_rptr]=temp;   		//保存录音数据
      
      if(play_mode==0)
        McbspRegs.DXR1.all = y;		//警报声的幅值              
      else
        McbspRegs.DXR1.all = temp;  //放音
	
}


//========================== NO MORE ===========================

⌨️ 快捷键说明

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