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

📄 dac.c

📁 这是一个32通道的DA转换的程序
💻 C
字号:

#include "stdio.h"
#include "addr.h"
#include "conv_da.c"


/*定义32路I/O端口 */
volatile	ioport	u16  port0020;
volatile	ioport	u16  port0021;
volatile	ioport	u16  port0022;
volatile	ioport	u16  port0023;
volatile	ioport	u16  port0024;
volatile	ioport	u16  port0025;
volatile	ioport	u16  port0026;
volatile	ioport	u16  port0027;

volatile	ioport	u16  port0048;
volatile	ioport	u16  port0049;
volatile	ioport	u16  port004A;

volatile	ioport	u16  port004B;
volatile	ioport	u16  port004C;
volatile	ioport	u16  port004D;
volatile	ioport	u16  port004E;
volatile	ioport	u16  port004F;
volatile	ioport	u16  port0050;
volatile	ioport	u16  port0051;
volatile	ioport	u16  port0052;
volatile	ioport	u16  port0053;
volatile	ioport	u16  port0054;
volatile	ioport	u16  port0055;
volatile	ioport	u16  port0056;
volatile	ioport	u16  port0057;
volatile	ioport	u16  port0058;
volatile	ioport	u16  port0059;
volatile	ioport	u16  port005A;
volatile	ioport	u16  port005B;
volatile	ioport	u16  port005C;
volatile	ioport	u16  port005D;
volatile	ioport	u16  port005E;
volatile	ioport	u16  port005F;
volatile	ioport	u16  port00FC;


/*声明32路通道的DA转换函数*/
extern void conv_da1(void);
extern void conv_da2(void);
extern void conv_da3(void);
extern void conv_da4(void);
extern void conv_da5(void);
extern void conv_da6(void);
extern void conv_da7(void);
extern void conv_da8(void);
extern void conv_da9(void);
extern void conv_da10(void);
extern void conv_da11(void);
extern void conv_da12(void);
extern void conv_da13(void);
extern void conv_da14(void);
extern void conv_da15(void);
extern void conv_da16(void);
extern void conv_da17(void);
extern void conv_da18(void);
extern void conv_da19(void);
extern void conv_da20(void);
extern void conv_da21(void);
extern void conv_da22(void);
extern void conv_da23(void);
extern void conv_da24(void);
extern void conv_da25(void);
extern void conv_da26(void);
extern void conv_da27(void);
extern void conv_da29(void);
extern void conv_da30(void);
extern void conv_da31(void);
extern void conv_da32(void);


/*声明单、双极性通道的校准函数*/
extern	u16	da_adjust1();
extern	u16	da_adjust2();


/*申明停止D/A操作的函数*/
extern void stop_da(void);

/*开始D/A操作*/
void da_convert()
{
	u16	channel_num;	//通道地址
	u16 real_parameter;	//未经过校准的数据值,校准函数da_adjust的实参
	u16	sixth_bit;		//判断re_selc_addr第6位的变量
	u16	data_regulate;	//校准过的数据值
	
	asm(" STM #0001h,SWCR ");	//*SWWSR=0x7fff;	//设置14个等待
	
	real_parameter=*(volatile u16 *)re_data_addr;	//把读到的数据给da_adjust的实参
	
	
	sixth_bit=*(volatile u16 *)re_selc_addr && 0x0020;//先用第6位来判断是否停止D/A工作
	if(sixth_bit==0x0020)	{port00FC=0x0000;}		//如果第6位为1,则停止D/A
	else	//判断通道
	{
	  channel_num =*(volatile u16 *)re_selc_addr && 0x001F;	//求低5位
	
		switch(channel_num)
		{
		 case 0:	data_regulate=da_adjust1(real_parameter);//单极性8路
		 			port0020=data_regulate;	break;
		 				
		 case 1:	data_regulate=da_adjust1(real_parameter);
		 			port0021=data_regulate;	break;
		 			
		 case 2:	data_regulate=da_adjust1(real_parameter);
		 			port0022=data_regulate;	break;
		 			
		 case 3:	data_regulate=da_adjust1(real_parameter);
		 			port0023=data_regulate;	break;
		 			
		 case 4:	data_regulate=da_adjust1(real_parameter);
		 			port0024=data_regulate;	break;
		 
		 case 5:	data_regulate=da_adjust1(real_parameter);
		 			port0025=data_regulate;	break;
		 
		 case 6:	data_regulate=da_adjust1(real_parameter);
		 			port0026=data_regulate;	break;
		 
		 case 7:	data_regulate=da_adjust1(real_parameter);
		 			port0027=data_regulate;	break;
		 
		 case 8:	data_regulate=da_adjust1(real_parameter);//双极性带隔离3路
		 			port0048=data_regulate;	break;	
		 			
		 case 9:	data_regulate=da_adjust2(real_parameter);
		 			port0049=data_regulate;	break;
		 			
		 case 10:	data_regulate=da_adjust2(real_parameter);
		 			port004A=data_regulate;	break;
		 
		 case 11:	data_regulate=da_adjust2(real_parameter);//双极性21路
		 			port004B=data_regulate;	break;
		 				
		 case 12:	data_regulate=da_adjust2(real_parameter);
		 			port004C=data_regulate;	break;
		 
		 case 13:	data_regulate=da_adjust2(real_parameter);
		 			port004D=data_regulate;	break;
		 
		 case 14:	data_regulate=da_adjust2(real_parameter);
		 			port004E=data_regulate;	break;
		 
		 case 15:	data_regulate=da_adjust2(real_parameter);
		 			port004F=data_regulate;	break;
		 
		 case 16:	data_regulate=da_adjust2(real_parameter);
		 			port0050=data_regulate;	break;
		 
		 case 17:	data_regulate=da_adjust2(real_parameter);
		 			port0051=data_regulate;	break;
		 
		 case 18:	data_regulate=da_adjust2(real_parameter);
		 			port0052=data_regulate;	break;
		 
		 case 19:	data_regulate=da_adjust2(real_parameter);
		 			port0053=data_regulate;	break;
		 
		 case 20:	data_regulate=da_adjust2(real_parameter);
		 			port0054=data_regulate;	break;
		 
		 case 21:	data_regulate=da_adjust2(real_parameter);
		 			port0055=data_regulate;	break;
		 
		 case 22:	data_regulate=da_adjust2(real_parameter);
		 			port0056=data_regulate;	break;
		 
		 case 23:	data_regulate=da_adjust2(real_parameter);
		 			port0057=data_regulate;	break;
		 
		 case 24:	data_regulate=da_adjust2(real_parameter);
		 			port0058=data_regulate;	break;
		 
		 case 25:	data_regulate=da_adjust2(real_parameter);
		 			port0059=data_regulate;	break;
		 
		 case 26:	data_regulate=da_adjust2(real_parameter);
		 			port005A=data_regulate;	break;
		 
		 case 27:	data_regulate=da_adjust2(real_parameter);
		 			port005B=data_regulate;	break;
		 
		 case 28:	data_regulate=da_adjust2(real_parameter);
		 			port005C=data_regulate;	break;
		 
		 case 29:	data_regulate=da_adjust2(real_parameter);
		 			port005D=data_regulate;	break;
		 
		 case 30:	data_regulate=da_adjust2(real_parameter);
		 			port005E=data_regulate;	break;
		 
		 case 31:	data_regulate=da_adjust2(real_parameter);
		 			port005F=data_regulate;	break;	
		 
		 default:	*(volatile u16 *)tr_ctr_addr=0x0002;
		 			*(volatile u16 *)tr_selc_addr=0xffff;	//给0xffff表示地址出错
		 			goto	L1;		 
		}
	}

/***把信息回写给dsp***/
	*(volatile u16 *)tr_ctr_addr=0x0002;
	*(volatile u16 *)tr_selc_addr=*(volatile u16 *)re_selc_addr;
L1:	*(volatile u16 *)tr_dadata_addr=real_parameter;
/*********************/	

	asm(" STM #0000h,SWCR ");	//复位SWCR

}

⌨️ 快捷键说明

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