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

📄 dm6430-stream.c

📁 rt 6430 采集卡 linux下驱动源代码
💻 C
字号:
/*	FILE NAME: dm6430-stream.c	FILE DESCRIPTION: Streaming input sample program		This program demonstrates using streaming input to read		blocks of data from the digital input FIFO.  User timer/counter		1 output initiates digital input sampling.  Interrupts are		generated on digital input FIFO half full. The samples are		displayed on the screen.	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>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);    }}static 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)));}#define BUF_SIZE6	0x4000			// The size of the buffer#define NUM_OF_SAMPLES6	512			// Number of samples in a buffer#define RATE6		1000			// Clock rate in 'Hz'#define IRQCHANNEL6	DM6430HR_INT1		// interrupt channel#define	AD_SLOPE6	(65536.0/20.0)		// Number Bits divided by AD Rangeintmain(int argument_count, char **arguments_p_p) {    char		buffer[NUM_OF_SAMPLES6];    double		ActualRate0;    double		dummy;    int			descriptor;    int			status;    unsigned long	count = 0;    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");    status = SetUserClock6430(	descriptor, DM6430HR_CLK0, 8000000, 20000, &ActualRate0    );    verify_success(status, "SetUserClock6430() FAILED");    status = SetUserClock6430(	descriptor, DM6430HR_CLK1, ActualRate0, RATE6, &dummy    );    verify_success(status, "SetUserClock6430() FAILED");    status = ConfigDINClock6430(descriptor, DM6430HR_DI_FIFO_CLK_USER_TC1);    verify_success(status, "ConfigDINClock6430() FAILED");    status = SetIRQ0Source6430(descriptor, IRQS_DIO_FIFO_HALF_6430);    verify_success(status, "SetIRQ0Source6430() FAILED");    fprintf(stdout, "Digital Input Port Bit 0 sampled at %d Hz.\n", RATE6);    status = EnableIRQ6430(descriptor, IRQCHANNEL6);    verify_success(status, "EnableIRQ6430() FAILED");    status = ClearDINFIFO6430(descriptor);    verify_success(status, "ClearDINFIFO6430() FAILED");    status = DINClockEnable6430(descriptor, 1);    verify_success(status, "DINClockEnable6430() FAILED");    while (!isstdindata(200)) {	int		sample;	unsigned long	irq_counter;		status = GetIRQCounter6430(descriptor, IRQCHANNEL6, &irq_counter);	verify_success(status, "GetIRQCounter6430() FAILED");	if (count != irq_counter) {	    count = irq_counter;	    status = GetAutoincData6430(		descriptor,		rSTR_DIN_FIFO_6430,		DM6430HR_STR_TYPE_BYTE,		buffer,		sizeof(buffer)	    );	    verify_success(status, "GetAutoincData6430() FAILED");	    for (sample = 0; sample < 10; sample++)		fprintf(		    stdout,		    "DIN FIFO(%d/%d) = 0x%hhx\n",		    sample + 1,		    NUM_OF_SAMPLES6,		    buffer[sample]		);	    fprintf(stdout, "\n");	    status = ClearDINFIFO6430(descriptor);	    verify_success(status, "ClearDINFIFO6430() FAILED");	}    }    status = DisableIRQ6430(descriptor, IRQCHANNEL6);    verify_success(status, "DisableIRQ6430() FAILED");    status = DoneTimer6430(descriptor);    verify_success(status, "DoneTimer6430() FAILED");    exit(EXIT_SUCCESS);}

⌨️ 快捷键说明

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