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

📄 dm6430-digital-io.c

📁 rt 6430 采集卡 linux下驱动源代码
💻 C
字号:
/*	FILE NAME: dm6430-digital-io.c	FILE DESCRIPTION: Digital I/O sample program		Sample program that demonstrates how to read and write the		digital I/O ports.  The program constantly displays the value		of the input port lines on the screen.  Wiring the input port		lines to the corresponding output port lines will allow you to		change the output lines and view the changes at the same time.		Port 0 is used for input and port 1 is used for output.	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)));}intmain(int argument_count, char **arguments_p_p) {    int			descriptor;    int			status;    unsigned int	minor_number;    u_int8_t		output_value;    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 = DIOSetPort0Direction6430(descriptor, 0);    verify_success(status, "DIOSetPort0Direction6430() FAILED");    status = DIOSetPort1Direction6430(descriptor, 1);    verify_success(status, "DIOSetPort1Direction6430() FAILED");    fprintf(stdout, "Digital output at port 1\n");    fprintf(stdout, "Digital input at port 0.\nPress Enter for stop\n");    /*     * Start digital output value at 0.  This will be updated in the loop     * below to provide different values.     */    output_value = 0;    while (!isstdindata(200)) {	unsigned char	input_value;	status = DIOWrite6430(descriptor, DM6430HR_DIO1, output_value);	verify_success(status, "DIOWrite6430() FAILED");	fprintf(stdout, "DIO(1) output: 0x%02x", output_value);	status = DIORead6430(descriptor, DM6430HR_DIO0, &input_value);	verify_success(status, "DIORead6430() FAILED");	fprintf(stdout, ", DIO(0) input: 0x%02x\n", input_value);	/*	 * Make a different digital output value.  When it reaches 255, it will	 * overflow to 0 and start all over again.	 */	output_value++;    }    exit(EXIT_SUCCESS);}

⌨️ 快捷键说明

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