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

📄 mcbsp_test.c

📁 这里面包括所有的DSP程序例程
💻 C
字号:

#include "DSP28_Device.h"
#include "comm.h"
#include "mcbsp.h"
/*************************************************************************/
unsigned int SampleLong=1024;
///////////////////////////////////////////
PmcbspForDec preceive; 
///////////////////////////////////////////
unsigned int i,j,Com_state;
//////////////////
unsigned int Ad_data[1536]={0};
unsigned int convcount = 0;
volatile unsigned int adconvover =0;
/*******************************************************/
interrupt void ISRTimer2(void);
interrupt void ad(void);
/*******************************************************/
void main(void)
{

		/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE矢量表*/
	InitPieVectTable();	
	
	/*初始化MCBSP外设*/
	InitMcbsp();
	
	//初始化cputimer
    InitCpuTimers();
    
	ConfigCpuTimer(&CpuTimer2, 150, 22);	
 	StartCpuTimer2();
  
	InitAdc();
    
   	EALLOW;	// This is needed to write to EALLOW protected registers
   	PieVectTable.MRINTA= &MRINTA_ISR;
   	
	PieVectTable.TINT2 = &ISRTimer2;
	PieVectTable.ADCINT = &ad;
	EDIS;   // This is needed to disa
    
   	/*开中断*/
	IER |= M_INT1;//ADC中断
	IER |= M_INT6;//MCBSP
	IER |= M_INT14;
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM

	adconvover=0;

	while(adconvover==0);
	
	for(i=0;i<SampleLong;i++)	{
		Ad_data[i]=(Ad_data[i]>>4)-0x555;//偏移量1v。
	}
    //进行数据发送  
    Com_Datareq(SampleLong,NUM_DATASEND);
	for(;;){					
		Com_state=Com_Staterev(&mcbspr[0]);
	   	if(Com_state==2)  {
	       	continue;
	   	}
    	if((Com_state == 0xffff)||(Com_state == 3)) {
	   		 //通知主机程序通讯出错,准备重发
	    	Com_Checkerr(CHECK_ERR);
		}
		if(Com_state == 0){
	    	preceive=(PmcbspForDec)(&mcbspr[0]);
			if(preceive->Data[0]==CHECK_ERR)
	        	Com_Dataagin(SampleLong);
		}
       	//数据发送
	   	if(preceive->Data[0] == DATA_RECEIVE)
        	Com_Datasend( SampleLong,&Ad_data[0]);
    	preceive->Data[0] = 0;
	}
} 	
interrupt void ad(void)
{
	IFR=0x0000;
	PieCtrl.PIEACK.all=0xffff;
	if(adconvover==0){
		Ad_data[convcount] = AdcRegs.RESULT0;
		convcount++;
	}
	if (convcount==(SampleLong+SampleLong/2))
	{
		convcount=0;
 		adconvover=1;//接满标志	
	}	
}

interrupt void ISRTimer2(void)
{
	AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
	AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;	
	
}

/***********************************************************************/
//	No	more
/***********************************************************************/

⌨️ 快捷键说明

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