📄 dm6430-timers.c
字号:
/* FILE NAME: dm6430-timers.c FILE DESCRIPTION: User timer sample program This program demonstrates how to program the 8254 programmable interval timers (PITs). Counter 0 is programmed to run at 200 Hz. Counter 1 is used to count these pulses. The result is converted into seconds and printed 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)));}intmain(int argument_count, char **arguments_p_p) { 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"); status = SelectTimerCounter6430(descriptor, DM6430HR_USER_TC); verify_success(status, "SelectTimerCounter6430() FAILED"); status = ClockMode6430(descriptor, DM6430HR_CLK0, DM6430HR_CLK_MODE2); verify_success(status, "ClockMode6430() FAILED"); status = ClockMode6430(descriptor, DM6430HR_CLK1, DM6430HR_CLK_MODE0); verify_success(status, "ClockMode6430() FAILED"); status = ClockDivisor6430(descriptor, DM6430HR_CLK0, 40000); verify_success(status, "ClockDivisor6430() FAILED"); status = ClockDivisor6430(descriptor, DM6430HR_CLK1, 0xFFFF); verify_success(status, "ClockDivisor6430() FAILED"); fprintf( stdout, "Counter 0 programmed to run at 200 Hz.\n" "Counter 1 is used to count these pulses.\n" "The result is converted into seconds.\n" ); while (!isstdindata(200)) { u_int16_t value; status = ReadTimerCounter6430( descriptor, DM6430HR_USER_TC, DM6430HR_CLK1, &value ); verify_success(status, "ReadTimerCounter6430() failed"); fprintf(stdout, "\t%6.1lf seconds\n", ((65535 - value) / 200.0)); } status = DoneTimer6430(descriptor); verify_success(status, "DoneTimer6430() failed"); exit(EXIT_SUCCESS);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -