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

📄 pci550x_adc_dma.c

📁 linux下面
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_CLOCK_SOURCE");			exit(1);		} else {			printf("Internal Pacer Clock Source selected\n");		}		/* set the PACER CLOCK RATE */		if (F) {			rc = ioctl(fd, PCI550X_IOCT_ADC_FPCEN,					PCI550X_ENABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_FPCEN");				exit(1);			}			rc = ioctl(fd, PCI550X_IOCS_ADC_FAST_CLOCK_RATE,				&ndelay);			if(rc == -1) {				perror("ioctl "					"PCI550X_IOCS_ADC_FAST_CLOCK_RATE");				exit(1);			} else {				printf("Pacer clock(0.25 usecs): %lu\n",					 ndelay);			}		} else {			rc = ioctl(fd, PCI550X_IOCT_ADC_FPCEN,				PCI550X_DISABLE);			if(rc == -1) {				perror("ioctl PCI550X_IOCT_ADC_FPCEN");				exit(1);			}			rc = ioctl(fd, PCI550X_IOCS_ADC_PACER_CLOCK_RATE,				 &udelay);			if(rc == -1) {				perror("ioctl "					"PCI550X_IOCS_ADC_PACER_CLOCK_RATE");				exit(1);			} else {				printf("ADC Pacer clock(usecs): %lu\n",					udelay);			}		}	}        /* select packed/unpacked data mode */        rc = ioctl(fd, PCI550X_IOCT_ADC_PDM, packed);        if(rc == -1) {                perror("ioctl PCI550X_IOCT_ADC_PDM");		free(buf);                exit(1);        } else {                if (packed)                       printf("PDM enabled\n");                else                       printf("PDM disabled\n");        }	/* About Trigger Mode */	if (A) {		rc = ioctl(fd, PCI550X_IOCS_ADC_CCOUNT, (int *)&ccount);		if (rc == -1) {			perror("ioctl PCI550X_IOCS_ADC_CCOUNT");			exit(1);		}		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);		}	} else {		rc = ioctl(fd, PCI550X_IOCT_ADC_ATEN, PCI550X_DISABLE);		if(rc == -1) {			perror("ioctl PCI550X_IOCT_ADC_ATEN");			exit(1);		} else			printf("About Trigger Mode disabled\n");	}	/* ADC FIFO Enable */        rc = ioctl(fd, PCI550X_IOCT_AD_STATUS_FFEN, PCI550X_ENABLE);        if(rc == -1) {                perror("ioctl PCI550X_IOCT_AD_STATUS_FFEN");		free(buf);                exit(1);        } else {		printf("ADC FIFO enabled\n");        }	/* 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");	} 	/* Set DMA Buffer Size */	rc = ioctl(fd, PCI550X_IOCT_ADC_DMA_BYTES, buf_size);        if(rc == -1) {                perror("ioctl PCI550X_IOCT_DMA_BYTES");		free(buf);                exit(1);        } else {		printf("DMA Buffer Size: %d bytes\n", buf_size);        }	/* ADC DMA Enable */        rc = ioctl(fd, PCI550X_IOCT_ADC_DMAEN, PCI550X_ENABLE);        if(rc == -1) {                perror("ioctl PCI550X_IOCT_ADC_DMAEN");		free(buf);                exit(1);        } else {		printf("DMA 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 Pacer Clock gated on\n");			}	}	/* ADC Convert Enable */        rc = ioctl(fd, PCI550X_IOCT_ADC_CVEN, PCI550X_ENABLE);        if(rc == -1) {                perror("ioctl PCI550X_IOCT_ADC_CVEN");		free(buf);                exit(1);        } else {		printf("ADC Conversions enabled\n");        }	/* install the signal handler */	signal(SIGINT, &sighandler);	/* blocking read */	while (1) {		bytes = read(fd, (void *)buf, buf_size);		if (bytes == 0) {			printf("ADC EOF\n");			free(buf);			exit(0);		} else if (bytes == -1) {			perror("pci550x read");			rc = ioctl(fd, PCI550X_IOCQ_ADC_STATUS);			if (rc == -1) {				perror("ioctl PCI550X_IOCQ_ADC_STATUS");				free(buf);				exit(1);			} else {				printf("ADC status 0x%x:", rc);				if (rc & AD_STATUS_MERR1)					printf("merr1\n");				else if (rc & AD_STATUS_MERR0)					printf("merr0\n");				else if (rc & AD_STATUS_FOVR)					printf("fifo overflow\n");				else if (rc & AD_STATUS_FUNDR)					printf("fifo underflow\n");				else if (rc & AD_STATUS_CERR)					printf("clocking error\n");				else if (rc & AD_STATUS_BERR)					printf("burst error\n");				else if (rc & AD_STATUS_CCTC)					printf("About Trigger: %d\n",						ccount);				else					printf("ADC DMA process error\n");			}			free(buf);			exit(1);		}		/* brief display */		if (brief) {		if (packed && bipolar)			printf("%c:%s:%s ADC reads %d bytes, "				"(P,B) %d sample values\n",				sentinal[mm++], device,				brd_names[brd_type], buf_size,				buf_size >> 1);		else if (packed & (!bipolar) )			printf("%c:%s:%s ADC reads %d bytes, "				"(P,U) %d sample values\n",				sentinal[mm++], device,				brd_names[brd_type], buf_size,				buf_size >> 1);		else if (bipolar)			printf("%c:%s:%s ADC reads %d bytes, "				"(U,B) %d sample values\n",				sentinal[mm++], device,				brd_names[brd_type], buf_size,				buf_size >> 2);		else			printf("%c:%s:%s ADC reads %d bytes, "				"(U,U) %d sample values\n",				sentinal[mm++], device,				brd_names[brd_type], buf_size,				buf_size >> 2);		mm %= sizeof(sentinal);		} else {		for (i = j = 0; i < samples; i++, j+=2, j %= samples) {			dma.raw_data = buf[i];			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],				dl_ccram.ccram[j],				dma.data_bp[0],				dma.data_bp[0] *					art[brd_type].bp_res[gain],				device, brd_names[brd_type],				dl_ccram.ccram[(j+1) % samples],				dma.data_bp[1],				dma.data_bp[1] *					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],				dl_ccram.ccram[i],				dma.data_up[0],				dma.data_up[0] *					art[brd_type].up_res[gain],				device, brd_names[brd_type],				dl_ccram.ccram[(i+1) % samples],				dma.data_up[1],				dma.data_up[1] *					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],				dma.data_bp[1],				dma.data_bp[0],				dma.data_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],				dma.data_up[1],				dma.data_up[0],				dma.data_up[0] *					art[brd_type].up_res[gain]);		}		}			}	close(fd);	return(0);	}

⌨️ 快捷键说明

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