📄 pci550x_adc_ssa.c
字号:
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 + -