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

📄 ad.c

📁 TMS320LF2407ADSPA/D采样源程序(工程) 内含串口调试助手
💻 C
字号:
#include "2407c.h"                    
                   

#define ADCNUMBER 256

void interrupt gptime1(void);	/* 中断服务程序,用于设置保存标志 */
void ADInit(void);		/* 初始化A/D转换模块和通用定时器1 及SCI模块*/
void wait(int nWait); 
void scisent(void);
unsigned int uWork,uWork1,nADCount,*pResult1;
int nNewConvert,nWork;
unsigned int nADCIn0[ADCNUMBER];	/* 存储区1,保存通道ADCIN0的转换结果,循环保存 */
unsigned int byte[3];

main()
{   
   
	asm(" CLRC 	SXM");	/* 清标志,关中断 */
	asm(" CLRC 	OVM");
	asm(" CLRC 	CNF");

	pResult1=RESULT0;
	
	nNewConvert=0;
	
	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;	/* 关闭看门狗中断 */
	*SCSR1=0x81fe;	/* 打开所有外设,设置时钟频率为40MHz */
	uWork=(*WSGR);	/* 设置I/O等待状态为0  */
	uWork&=0x0fe3f;
	(*WSGR)=uWork;
	
	
	ADInit();	/* 初始化A/D相关设备 */
    
	*IMR=3;		/* 使能定时器中断 */
	*IFR=0xffff;	/* 清所有中断标志    */
	asm(" clrc INTM");	/* 开中断 */         
	while ( 1 )
	{
		if ( nNewConvert )	/* 如果保存标志置位,以下开始转换和保存转换结果 */
		{
			nNewConvert=0;		/* 清保存标志 */
			uWork=(*pResult1);	/* 取ADCINT0通道转换结果 */
			uWork>>=6;		/* 移位去掉低6位 */
			nADCIn0[nADCount]=uWork;/* 保存结果 */
		    byte[0]=byte[1]=nADCIn0[nADCount];   /*低8位*/
		    byte[1]>>=8;   /*移位去掉低8位*/    /*得到高8位*/
		    byte[2]=0xff;
			scisent();
			nADCount++;
			if ( nADCount>=ADCNUMBER )	
			{
				nADCount=0;             
				
				
				}
			}
		}
	}	
               

void ADInit(void)       /* 初始化设置 */
{
	int i;

	for ( i=0;i<ADCNUMBER;i++ )	/* 缓冲区清0 */
		nADCIn0[i]=0;

	*ADCTRL1= 0x2040;	/* 设置连续转换模式 */
	*MAXCONV = 0x1;		/* 每次完成转换两个通道 */
	*CHSELSEQ1=0x10;	/* 转换次序,先ADCIN0,再ADCIN1 */
	*ADCTRL2= 0x2000;    	/* 启动转换 */
	nADCount=nWork=0;
				/* 以下设置通用定时器参数 */
	*EVAIMRA = 0x80;	/* 使能T1PINT */
	*EVAIFRA = 0xffff;	/* 清中断标志 */
	*GPTCONA = 0x0100;	
	*T1PR    = 100000;	/* 保存结果周期=2000*25ns=50us=20KHz */
	*T1CNT   = 0;		/* 计数器从0开始计数 */
	*T1CON   = 0x1040;	/* 连续增计数方式,启动计数器 */
               /*以下设置SCI参数*/
	uWork=(*MCRA);
	uWork|=0x03;		/* use SCITXD,SCIRXD */
	(*MCRA)=uWork;
	(*SCICCR)=0x07;		/* 8位字符,1停止位,无校验*/
	(*SCICTL1)=0x03;	/* 使能发送和接收 */
	(*SCICTL2)=0x00;	/* 禁止接收和发送中断 */
	(*SCIHBAUD)=0x02;	/* 波特率=208H,40MHz */
	(*SCILBAUD)=0x08;	/* 208h=40*10^6/(9600*8)-1 */
	(*SCICTL1)=0x23;	/* 使能发送和接收,复位SCI */

}

void interrupt gptime1(void)
{
   uWork1=(*PIVR);
   switch ( uWork1 )
   {  
   		case 0x27:
   		{
			nNewConvert=1;	/* 设置保存标志 */
			(*EVAIFRA)=0x80;/* 清中断标志位 */
   		   	break;
   		}
   }
}                       

void scisent(void)
{
    int i;

	for ( i=0;i<3;i++ )
			{	
				do
				{ 
					uWork=(*SCICTL2);
				} while ( uWork&0x0c0 != 0x0c0 );    /*检查缓冲区是否为空*/
				(*SCITXBUF)=byte[i];                 /*传送高低8位*/
				
				wait(100);		                      /*延时*/
		  
	}

		
		}
		
	

void wait(int nWait)
{
	int i,j,k=0;
	for ( i=0;i<nWait;i++ )
		for ( j=0;j<64;j++ )
			k++;
}

⌨️ 快捷键说明

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