您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > DSP28335-ADC程序-中文说明
*例程功能:利用中断定时器每隔一秒钟,从DSP28335的A0、A1口接收模拟信号,并转换为数字信号存放在SampleTable1,SampleTable2中。**/#includeDSP2833x_Device.h//DSP2833x头文件#includeDSP2833x_Examples.h//DSP2833xExamplesIncludeFile//ADC启动参数#if(CPU_FRQ_150MHZ)//Default-150MHzSYSCLKOUT#defineADC_MODCLK0x3//HSPCLK=SYSCLKOUT/2*ADC_MODCLK2=150/(2*3)=25.0MHz#endif#if(CPU_FRQ_100MHZ)#defineADC_MODCLK0x2//HSPCLK=SYSCLKOUT/2*ADC_MODCLK2=100/(2*2)=25.0MHz#endif#defineADC_CKPS0x1//ADCmoduleclock=HSPCLK/2*ADC_CKPS=25.0MHz/(1*2)=12.5MHz#defineADC_SHCLK0xf//S/HwidthinADCmoduleperiods=16ADCclocks#definePIEACK_GROUP10x0001interruptvoidISRTimer0(void);intSampleTable1=0,SampleTable2=0;intcount,count1,count2;main(){//步骤1.初始化系统控制:PLL,WatchDog,启用外设时钟该示例函数可在DSP2833x_SysCtrl.c文件中找到。InitSysCtrl();//ADC工作时钟设置:EALLOW;SysCtrlRegs.HISPCP.all=ADC_MODCLK;//HSPCLK=SYSCLKOUT/ADC_MODCLK,ADC工作的标准频率EDIS;//步骤2.初始化GPIO:该示例函数位于DSP2833x_Gpio.c文件中,并说明如何将GPIO设置为默认状态。//InitGpio();//在这个例子中被跳过//第3步。清除所有中断并初始化PIE矢量表:禁用CPU中断DINT;//初始化PIE控制寄存器为默认状态。默认状态是禁止所有的PIE中断并清除标志。//这个函数可以在DSP2833x_PieCtrl.c文件中找到。InitPieCtrl();//禁用CPU中断并清除所有CPU中断标志:IER=0x0000;IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR).//这将填充整个表,即使在这个例子中没有使用中断。这对于调试目的很有用。//TheshellISRroutinesarefoundinDSP2833x_DefaultIsr.c.//该函数在DSP2833x_PieVect.c中找到。InitPieVectTable();EALLOW;PieVectTable.TINT0=&ISRTimer0;//告诉定时器0的中断地址为中断向量表的INT0EDIS;InitCpuTimers();ConfigCpuTimer(&CpuTimer0,150,1000000);StartCpuTimer0();//CPU第一组中断将会产生,并使能第一组中断的第七个小中断IER|=M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7=1;//步骤4.初始化所有器件外设:此功能可在DSP2833x_InitPeripherals.c中找到InitAdc();//ADC初始化设置//ADC工作方式设置:AdcRegs.ADCTRL1.bit.ACQ_PS=ADC_SHCLK;//设置采集窗的大小。该控制位控制SOC脉冲的宽度,SOC脉冲信号的宽度等于ADCLK周期*(ADC_SHCLK+1)AdcRegs.ADCTRL3.bit.ADCCLKPS=ADC_CKPS;//核心时钟分频。ADC模块时钟=HSPCLK/2*ADC_CKPS=25.0MHz/(1*2)=12.5MHzAdcRegs.ADCTRL1.bit.SEQ_CASC=1;//建立级联序列方式AdcRegs.ADCTRL1.bit.CONT_RUN=1;//读取完转换序列后停止AdcRegs.ADCTRL1.bit.SEQ_OVRD=1;//使能排序覆盖AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//设置ADCINA0作为第一个变换AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;//设置ADCINA1作为第一个变换AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0x1;//最大采集通道//第5步。用户特定的代码,启用中断:EINT;//启用全局中断INTMERTM;//启用全局实时中断DBGMAdcRegs.ADCTRL2.all=0x2000;//启动SEQ1}interruptvoidISRTimer0(void){while(AdcRegs.ADCST.bit.INT_SEQ1==0){}//等待中断AdcRegs.ADCTRL3.bit.SMODE_SEL=1;//设置同步采样模式AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//向该位写1,清除SEQ1中断标志位SampleTable1=((AdcRegs.ADCRESULT04));//取A0数据并记录在SampleTable1数组中SampleTable2=((AdcRegs.ADCRESULT14));//取A1数据并记录在SampleTable2数组中PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//0x0001赋给12组中断ACKnowlwdge寄存器,对其全部清除,不接受其它中断CpuTimer0Regs.TCR.bit.TIF=1;//定时到了指定时间,标志位置位,清除标志CpuTimer0Regs.TCR.bit.TRB=1;//重载Timer0的定时数据}
本文标题:DSP28335-ADC程序-中文说明
链接地址:https://www.777doc.com/doc-4388678 .html