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

📄 ad.c

📁 TI5416DSP上运行的AD/DA两个程序
💻 C
字号:
#define	TIM		*(int *)0x24
#define	PRD     	*(int *)0x25
#define	TCR		*(int *)0x26
#define	IMR		*(int *)0x0
#define	IFR		*(int *)0x1		
#define	PMST		*(int *)0x1d	

ioport unsigned int port3,port4,port2;

#define AD_DATA	port2
#define AD_SEL  port3
#define AD_HOLD port4

void interrupt time(void);
int *ptr,k;
signed int uWork,uWork1;

main()
{
	int i,j;
	
	asm("	ssbx	INTM");	// 关闭可屏蔽中断
	k=0;
	ptr=(int *)0x3000;	// 转换数据的保存区,从数据区3000H开始
				// 3000H-3200H保存第1通道(AIN1)的转换结果
				// 3200H-3400H保存第2通道(AIN2)的转换结果
	for(i=0;i<0x400;i++)	// 将转换数据的保存区清0
      		*(ptr+i)=0;
	j= PMST; 		      
	PMST = j&0xff;
	IMR = 0x8;
	TCR = 0x412;		// 计数器分频系数=2
	TIM = 0;
	PRD = 0x100;		// 定时器周期=256,采样周期=周期*分频系数*时钟周期
	TCR = 0x422;		//                         =512时钟=64us
	IFR = 0x100;		//   其中,时钟周期为8MHz

	AD_SEL=6;		// 通道选择 A0,A1

	asm("	rsbx	INTM");	// 开中断进行转换
      
	while ( 1 );
}

// 定时器中断服务程序,完成:保存转换结果、启动下次转换
void interrupt time(void)	
{
	uWork=AD_DATA;		// 从FIFO中读取转换结果
	uWork1=( (uWork&0x0f000)==0x8000 )?(0):(0x200);
	uWork<<=4;			// 去掉高4位
	uWork>>=4;
	*(ptr+k+uWork1)=uWork;		// 保存结果	
  
	uWork=AD_DATA;		// 从FIFO中读取转换结果
	uWork1=( (uWork&0x0f000)==0x8000 )?(0):(0x200);
	uWork<<=4;			// 去掉高4位
	uWork>>=4;
	*(ptr+k+uWork1)=uWork;	// 保存结果	
	
	k++; 
	if ( k>=0x200 )
	{
		k=0;			// 软中断位置
	}

	AD_HOLD =0;		// 送转换信号
	for ( uWork=0;uWork<10;uWork++ );
	AD_HOLD=1;
}

⌨️ 快捷键说明

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