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

📄 dm6430-auto-scan.c

📁 rt 6430 采集卡 linux下驱动源代码
💻 C
字号:
/*	FILE NAME: dm6430-auto-scan.c	FILE DESCRIPTION: 	Automatic channel scan sample program		This program uses the sample counter and the pacer clock		features of the DM6430 to do MULTI-SCAN sampling.  The board		is set up to sample a set of channels, 3 times every time the		board receives a trigger from the on board 8254.		While the measurement is running the acquired A/D data is		displayed on the screen, one line with every sample.	PROJECT NAME: Linux DM6430 Driver, Library, and Example Programs	PROJECT VERSION: (Defined in README.TXT)	Copyright 2004 RTD Embedded Technologies, Inc.  All Rights Reserved.*/#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/poll.h>#include <unistd.h>#include <dm6430lib.h>#define FIRST_CHAN2	DM6430HR_AIN1	// First channel to scan.#define NUM_OF_CHAN2	4		// Number of channels to scan.#define RATE2		1000		// Sample rate in [Hz].#define USER_RATE2	1		// Measurement trigger period in [Hz].#define ADSLOPE2	(65536.0/20.0)	// Number Bits divided by AD Range.char *program_name_p;static voidusage(void) {    fprintf(	stderr,	"\n"        "Usage: %s MINOR_NUMBER"        "\n",	program_name_p    );    exit(EXIT_FAILURE);}static voidverify_success(int status, const char *message_p) {    if (status == -1) {	perror(message_p);	exit(EXIT_FAILURE);    }}intisstdindata(int timeout) {    struct pollfd	in = {0, POLLIN | POLLERR | POLLPRI, 0};    int			num_fds;    while (((num_fds = poll(&in, 1, timeout)) == -1) && (errno == EINTR))	;    return ((num_fds == 1) && (in.revents & (POLLIN | POLLPRI)));}intmain(int argument_count, char **arguments_p_p) {    ADTableRow		ADTable[NUM_OF_CHAN2];    double		ActualRate0;    double		dummy;    int			channel;    int			descriptor;    int			status;    unsigned int	minor_number;    program_name_p = arguments_p_p[0];    if (argument_count != 2) {	fprintf(stderr, "Invalid number of options given.\n");	usage();    }    if (sscanf(arguments_p_p[1], "%u", &minor_number) == 0) {	fprintf(stderr, "Invalid device minor number.\n");	usage();    }    descriptor = OpenBoard6430(minor_number);    verify_success(descriptor, "OpenBoard6430() FAILED");    status = InitBoard6430(descriptor);    verify_success(status, "InitBoard6430() FAILED");    for (channel = 0; channel < NUM_OF_CHAN2; channel++) {	ADTable[channel].Channel = (FIRST_CHAN2 + channel);	ADTable[channel].Gain = DM6430HR_GAINx1;	ADTable[channel].Se_Diff = DM6430HR_SE_SE;	ADTable[channel].Pause = 0;	ADTable[channel].Skip = 0;    }    status = SetPacerClock6430(descriptor, RATE2 * NUM_OF_CHAN2, &dummy);    verify_success(status, "SetPacerClock6430() FAILED");    status = SetUserClock6430(	descriptor,	DM6430HR_CLK0,	8000000,	20000,	&ActualRate0    );    verify_success(status, "SetUserClock6430() FAILED");    status = SetUserClock6430(	descriptor,	DM6430HR_CLK1,	ActualRate0,	USER_RATE2,	&dummy    );    verify_success(status, "SetUserClock6430() FAILED");    status = SetTriggerRepeat6430(descriptor, DM6430HR_REPEAT_REPEAT);    verify_success(status, "SetTriggerRepeat6430() FAILED");    status = SetStartTrigger6430(descriptor, DM6430HR_START_TRIG_USER_TC1);    verify_success(status, "SetStartTrigger6430() FAILED");    status = SetStopTrigger6430(descriptor, DM6430HR_STOP_TRIG_SAMPLE_CNT);    verify_success(status, "SetStopTrigger6430() FAILED");    status = SetConversionSelect6430(descriptor, DM6430HR_CONV_PACER_CLOCK);    verify_success(status, "SetConversionSelect6430() FAILED");    status = LoadADSampleCounter6430(descriptor, NUM_OF_CHAN2 * 3);    verify_success(status, "LoadADSampleCounter6430() FAILED");    status = LoadADTable6430(descriptor, NUM_OF_CHAN2, ADTable);    verify_success(status, "LoadADTable6430() FAILED");    status = EnableTables6430(descriptor, 1, 0);    verify_success(status, "EnableTables6430() FAILED");    status = ClearADFIFO6430(descriptor);    verify_success(status, "ClearADFIFO6430() FAILED");    fprintf(stdout, "AIN1 - AIN4 range = bipolar 10V\nPress Enter for stop\n");    status = StartConversion6430(descriptor);    verify_success(status, "StartConversion6430() FAILED");    while (!isstdindata(200)) {	for (channel = 0; channel < NUM_OF_CHAN2; channel++ ) {	    int		empty_flag;	    int16_t	data;	    do {		status = IsADFIFOEmpty6430(descriptor, &empty_flag);		verify_success(status, "IsADFIFOEmpty6430() FAILED");	    } while (empty_flag);	    status = ReadADData6430(descriptor, &data);	    verify_success(status, "ReadADData6430() FAILED");	    fprintf(		stdout, "CH%d: %+04.1lf mV\n", (channel + 1), data / ADSLOPE2	    );	}	fprintf(stdout, "\n");    }    exit(EXIT_SUCCESS);}

⌨️ 快捷键说明

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