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

📄 ad_da.c

📁 tms320c6713AD与DA的程序,能够实现AD与DA的连接
💻 C
字号:

#include "ICETEK-C6713-A.h"


#define AD_CTL       *(unsigned char*)0x90100006
#define AD_DATA_BASE          0x90140000
#define ORDER         2
#define AD_CHA0      *(unsigned short int*)(AD_DATA_BASE+0*ORDER)
#define AD_CHC0      *(unsigned short int*)(AD_DATA_BASE+1*ORDER)
#define AD_CHB0      *(unsigned short int*)(AD_DATA_BASE+2*ORDER)
#define AD_CHA1      *(unsigned short int*)(AD_DATA_BASE+4*ORDER)
#define AD_CHC1      *(unsigned short int*)(AD_DATA_BASE+5*ORDER)
#define AD_CHB1      *(unsigned short int*)(AD_DATA_BASE+6*ORDER)

#define DA_DATA_H    *( char *)0x90100008 
#define DA_DATA_L    *( char *)0x9010000A 
#define DA_CTL       *( char *)0x9010000c 
#define DA_CHN1      0x0
#define DA_CHN2      0x40 
#define DA_CHN3      0x80
#define DA_CHN4      0xc0


void interrupt Timer( void );
void initInterrupt(void);
void DAcontrol(void) ;
unsigned short int a,b,c,d,e,f;
 int nChannelA0[256],nChannelA1[256];
 int nAD0[256],nAD1[256];
int nPointNumber;
int loop;
main()
{
    loop=0;
    nPointNumber=0;
	INT_DisableGlobal();
//	PLL_Init();
    init_emif();	// 初始化emif
    INT_EnableGlobal();
    initInterrupt();
	while ( 1 )
	{
	}
}
void interrupt Timer( void )   // 控制  AD 采数
{
     int i;
     int nWork;
     a= AD_CHA0 ;
     b= AD_CHA1 ;
     c= AD_CHB0 ;
     d= AD_CHB1 ;
     e= AD_CHC0 ;
     f= AD_CHC1 ; 
     if ( (a&0x8000)&&(b&0x8000) )	// 数据有效性判断
     {
		a<<=4; nWork=a; nWork/=16;	// 去除高4位
		nChannelA0[nPointNumber]=nWork;
	//	b<<=4; nWork=b; nWork/=16;	// 去除高4位
	//	nChannelA1[nPointNumber]=nWork;
		nPointNumber++;
		DAcontrol();
		if ( nPointNumber>=256 )
		{
			for ( i=0;i<256;i++ )
			{
				nAD0[i]=nChannelA0[i];
			//	nAD1[i]=nChannelA1[i];
				
			}
			//DAcontrol();			
			nPointNumber=0;		// 软中断位置
		}
     }
     AD_CTL = 0x0;	// 发送控制脉冲信号,进行下次转换 如果只需A0,A1通道只需送6即可
     for (i=0;i<20;i++);
     AD_CTL = 0x7;	// 产生高电平
     return;
}

void DAcontrol(void)    // 控制 DA 输出
{  //short i;
     
		DA_DATA_L=nChannelA0[loop]&0xff;
		DA_DATA_H=((nChannelA0[loop]>>8)&0x0f)|DA_CHN2; 
		DA_CTL=0;	  
		 loop++;
         if(loop==256)
         loop=0;
        //Delay(2); 
	   
	return;
}
	
void initInterrupt(void)
{
	// 设置中断控制寄存器
	CSR&=0xfffffffe;	// 关中断 GIE=0
	ISTP=0x00000c00;	// 重置中断向量表到0C00h
   	IMH=0x08000000;		// 指定Timer1产生int15中断
   	IML=0;
   	ICR=0xff;			// 清除等待的中断
	IER=0x8003;			// 使能int15中断
	// 设置定时器产生中断信号的频率
	TIMER1PRD=0x100;	// 定时器1的周期=0x1000
	TIMER1CTL=0x3c0;	// 开始计数
	CSR=CSR|1; 			// 开中断
}

⌨️ 快捷键说明

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