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

📄 pci550x_adc_ssa.c

📁 linux下面
💻 C
📖 第 1 页 / 共 2 页
字号:
		rc = ioctl(fd, PCI550X_IOCT_ADC_ATEN, PCI550X_ENABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_ATEN");			exit(1);		} else {			printf("About Trigger Mode CCOUNT = %d\n", ccount);		}	}	/* enable ADC to do conversions */	rc = ioctl(fd, PCI550X_IOCT_ADC_CVEN, PCI550X_ENABLE);	if(rc == -1) {		perror("ioctl PCI550X_IOCT_ADC_CVEN");		exit(1);	} else {		printf("ADC enabled to do conversions\n");	}	/* ADC expansion inputs */	if (E) {		rc = ioctl(fd, PCI550X_IOCT_ADC_EMXEN, PCI550X_ENABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_EMXEN");			exit(1);		} else			printf("ADC expansion inputs Enabled\n");	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_EMXEN, PCI550X_DISABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_EMXEN");			exit(1);		}	}	/* ADC External Trigger Output */	if (o) {		rc = ioctl(fd, PCI550X_IOCT_ADC_TOEN, PCI550X_ENABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_TOEN");			exit(1);		} else			printf("ADC external Trigger Output Enabled\n");	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_TOEN, PCI550X_DISABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_TOEN");			exit(1);		}	}	/* ADC External Clock Output */	if (O) {		rc = ioctl(fd, PCI550X_IOCT_ADC_COEN, PCI550X_ENABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_COEN");			exit(1);		} else			printf("ADC external Clock Output Enabled\n");	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_COEN, PCI550X_DISABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_COEN");			exit(1);		}	}	/* select gate source for the onboard pacer clock */	if (g | G | t | T) {		rc = ioctl(fd, PCI550X_IOCT_ADC_CGSL, PCI550X_ENABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_CGSL");			exit(1);		} else			printf("ADC external ");		if (g | G ) {			rc = ioctl(fd, PCI550X_IOCT_ADC_TGSL, PCI550X_ENABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_TGSL");				exit(1);			} else				printf("level ");			if (G) {				rc = ioctl(fd, PCI550X_IOCT_ADC_TGPL,					PCI550X_ENABLE);				if(rc == -1) {					perror("ioctl PCI550X_IOCT_ADC_TGPL");					exit(1);				} else					printf("(high) gate enabled\n");				g = PCI550X_DISABLE;			} else {				rc = ioctl(fd, PCI550X_IOCT_ADC_TGPL,					PCI550X_DISABLE);				if(rc == -1) {					perror("ioctl PCI550X_IOCT_ADC_TGPL");					exit(1);				} else					printf("(low) gate enabled\n");				G = PCI550X_DISABLE;			}			t = T = PCI550X_DISABLE;		} else {			rc = ioctl(fd, PCI550X_IOCT_ADC_TGSL, PCI550X_DISABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_TGSL");				exit(1);			} else				printf("edge ");			g = G = PCI550X_DISABLE;			if (T) {				rc = ioctl(fd, PCI550X_IOCT_ADC_TGPL,					PCI550X_ENABLE);				if(rc == -1) {					perror("ioctl PCI550X_IOCT_ADC_TGPL");					exit(1);				} else					printf("(rising) trigger enabled\n");				t = PCI550X_DISABLE;			} else {				rc = ioctl(fd, PCI550X_IOCT_ADC_TGPL,					PCI550X_DISABLE);				if(rc == -1) {					perror("ioctl PCI550X_IOCT_ADC_TGPL");					exit(1);				} else					printf("(falling) trigger enabled\n");				T = PCI550X_DISABLE;			}		}	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_CGSL, PCI550X_DISABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_CGSL");			exit(1);		} else			printf("ADC Internal Software Gate enabled\n");	}	/* ADC gate enable */	if (g | G | t | T) {		rc = ioctl(fd, PCI550X_IOCT_ADC_TGEN, PCI550X_ENABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_TGEN");				exit(1);			} else {				printf("ADC external gate enabled\n");			}	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_CGEN, PCI550X_ENABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_CGEN");				exit(1);			} else {				printf("ADC software gate enabled\n");			}	}	/* enable ADC FIFO */	rc = ioctl(fd, PCI550X_IOCT_AD_STATUS_FFEN, PCI550X_ENABLE);	if(rc == -1) {		perror("ioctl PCI550X_IOCT_AD_STATUS_FFEN");		exit(1);	} else {		printf("ADC FIFO enabled\n");	}	/* start conversion  - 1st sample in ADC pipeline */	while (1) {		/* wait for ADC ready */		ad_status = 0;		while (!(ad_status & AD_STATUS_READY )) {			rc = ioctl(fd, PCI550X_IOCG_AD_STATUS,				&ad_status);			if(rc == -1) {				perror("ioctl PCI550X_IOCG_AD_STATUS");				exit(1);			}		}		rc = ioctl(fd, PCI550X_IOC_AD_STATUS_CONV, NULL);		if(rc == -1) {			if (errno == EAGAIN)				printf("ADC gated OFF"				" or waiting for trigger\n");			else {				perror("ioctl PCI550X_IOC_AD_STATUS_CONV");				exit(1);			}		 } else			break;	}	/* start conversion  - 2nd sample in ADC Pipeline */	if (delay)		usleep(delay);	else {		/* wait for ADC ready */		ad_status = 0;		while (!(ad_status & AD_STATUS_READY )) {			rc = ioctl(fd, PCI550X_IOCG_AD_STATUS,				&ad_status);			if(rc == -1) {				perror("ioctl PCI550X_IOCG_AD_STATUS");				exit(1);			}		}	}	while (1) {		rc = ioctl(fd, PCI550X_IOC_AD_STATUS_CONV, NULL);		if(rc == -1) {			if (errno == EAGAIN)				printf("ADC gated OFF"				" or waiting for trigger\n");			else {				perror("ioctl PCI550X_IOC_AD_STATUS_CONV");				exit(1);			}		 } else			break;	}	while (1) {	if (packed) {		if (delay)			usleep(delay);		else {			/* wait for ADC ready */			ad_status = 0;			while (!(ad_status & AD_STATUS_READY )) {				rc = ioctl(fd, PCI550X_IOCG_AD_STATUS,					&ad_status);				if(rc == -1) {					perror("ioctl"					" PCI550X_IOCG_AD_STATUS");					exit(1);				}			}		}		while (1) {			rc = ioctl(fd, PCI550X_IOC_AD_STATUS_CONV, NULL);			if(rc == -1) {				if (errno == EAGAIN)					printf("ADC gated OFF"					" or waiting for trigger\n");				else {					perror("ioctl"					" PCI550X_IOC_AD_STATUS_CONV");					exit(1);				}			} else				break;		}	}	/* wait for FIFO not empty */	ad_status = 0;	while (!(ad_status & AD_STATUS_FNE)) {		rc = ioctl(fd, PCI550X_IOCG_AD_STATUS, &ad_status);		if(rc == -1) {			perror("ioctl PCI550X_IOCG_AD_STATUS");			exit(1);		}	}	/* get the FIFO sample data */	rc = ioctl(fd, PCI550X_IOCG_AD_FIFO, &u1.ad_fifo);	if(rc == -1) {		perror("ioctl PCI550X_IOCG_AD_FIFO");		exit(1);	} else {		if (packed && bipolar)			printf("%s:%s ADC Channel 0x%04hx "			"(P,B):"			"0x%04hx; %f Volts;\n"			"%s:%s ADC Channel 0x%04hx (P,B):"			"0x%04hx; %f Volts\n",			device, brd_names[brd_type], channel,			u1.fifo_bp[1],			u1.fifo_bp[1] * art[brd_type].bp_res[gain],			device, brd_names[brd_type], channel,			u1.fifo_bp[0],			u1.fifo_bp[0] * art[brd_type].bp_res[gain]);		else if (packed && (!bipolar))			printf("%s:%s ADC Channel 0x%04hx "			"(P,U):"			"0x%04hx; %f Volts;\n"			"%s:%s ADC Channel 0x%04hx (P,U):"			"0x%04hx; %f Volts\n",			device, brd_names[brd_type], channel,			u1.fifo_up[1],			u1.fifo_up[1] * art[brd_type].up_res[gain],			device, brd_names[brd_type], channel,			u1.fifo_up[0],			u1.fifo_up[0] * art[brd_type].up_res[gain]);		else if (bipolar)			printf("%s:%s ADC Channel 0x%04hx "			"(U,B):"			"0x%04hx; %f Volts\n",			 device, brd_names[brd_type],			 u1.fifo_bp[1], u1.fifo_bp[0],			 u1.fifo_bp[0] * art[brd_type].bp_res[gain]);		else			printf("%s:%s ADC Channel 0x%04hx "			"(U,U):"			"0x%04hx; %f Volts\n",			device, brd_names[brd_type],			u1.fifo_up[1], u1.fifo_up[0],			u1.fifo_up[0] * art[brd_type].up_res[gain]);	}	if (delay)		usleep(delay);	else {		/* wait for ADC ready */		ad_status = 0;		while (!(ad_status & AD_STATUS_READY )) {			rc = ioctl(fd, PCI550X_IOCG_AD_STATUS,				&ad_status);			if(rc == -1) {				perror("ioctl PCI550X_IOCG_AD_STATUS");				exit(1);			}		}	}	/* next sample */	while (1) {		rc = ioctl(fd, PCI550X_IOC_AD_STATUS_CONV, NULL);		if(rc == -1) {			if (errno == EAGAIN)				printf("ADC gated OFF"				" or waiting for trigger\n");			else {				perror("ioctl PCI550X_IOC_AD_STATUS_CONV");				exit(1);			}		 } else			break;	}	}	close(fd);	return(0);	}

⌨️ 快捷键说明

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