me8100_test_counter/me8100_test_counter.c
changeset 0 c9b8efdb5369
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/me8100_test_counter/me8100_test_counter.c	Wed Jan 16 14:01:55 2002 +0100
@@ -0,0 +1,199 @@
+/*
+ * Source File : me8100_test_counter.c
+ * Destination : me8100_test_counter
+ * Author      : GG (Guenter Gebhardt)                                 
+ *    
+ *                                                                     
+ * File History: Version   Date       Editor   Action                  
+ *---------------------------------------------------------------------
+ *               1.00.00   01.07.12   GG       first release           
+ *                                                                     
+ *---------------------------------------------------------------------
+ *                                                                     
+ * Description:
+ *   This program shows the use of the driver and the counter part 
+ *   of the me8100 board. It configures the counters in mode 3 (symetric 
+ *   devisor) with a counter value of 4. So each frequency of a signal 
+ *   put in at CLK is devided by 4.
+ */
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <linux/spinlock.h>
+
+#include "../me8100.h"
+
+
+int main(void){
+  int err = 0;
+  int minor = 0;
+  int count = 0;
+  static int file_handle = -1;
+
+  unsigned char cctrl_0;
+  unsigned char cctrl_1;
+  unsigned char cctrl_2;
+  unsigned char clvalue_0;
+  unsigned char chvalue_0;
+  unsigned char clvalue_1;
+  unsigned char chvalue_1;
+  unsigned char clvalue_2;
+  unsigned char chvalue_2;
+
+  printf("%c%3s", 27, "[2J");
+  printf("<<<--- ME8100 TESTPROGRAM FOR COUNTER --->>>\n\n");
+
+  /*
+   * You can select up to four me8100 baords, if installed.
+   * 0 is the first board.
+   */
+  printf("Please type in the Minor Device Number of Board to open : ");
+  count = scanf("%d", &minor);
+  if(!count){
+    printf("Invalid Input !\n");
+    return 1;
+  }
+  printf("Open path /dev/me8100_%d !\n\n", minor);
+  
+  switch(minor){
+  case 0:
+    file_handle = open("/dev/me8100_0", O_RDWR, 0);
+    break;
+  case 1:
+    file_handle = open("/dev/me8100_1", O_RDWR, 0);
+    break;
+  case 2:
+    file_handle = open("/dev/me8100_2", O_RDWR, 0);
+    break;
+  case 3:
+    file_handle = open("/dev/me8100_3", O_RDWR, 0);
+    break;
+  default:
+    printf("Invalid Input !\n");
+    return 1;
+  }
+
+  if(file_handle < 0){
+    printf("Cannot open path !\n");
+    return 1;
+  }
+
+  /*
+   * Counter 
+   *
+   * Now that you have access to the me8100 you have to configurate
+   * the board according to your needs. 
+   * The ME8100 has got 3 counters with 16 bit each. First you have
+   * to configure the counters control register according to your needs.
+   * Then you can write the proper value to the counter.
+   */
+
+
+  /*--------------- ALL COUNTER IN MODE 3 AND BINARY ------------------------*/
+
+  printf("Please press return to test counter in mode 3/binary :\n");
+  getchar();
+  getchar();
+  
+  /* 
+   * Configure COUNTER_0 as asynchronous devisor,
+   * as binary counter and LSB/MSB.
+   */
+  cctrl_0 = 0x36; 
+  err = ioctl(file_handle , ME8100_SETUP_COUNTER, &cctrl_0);
+  if(err){
+    printf("Cannot setup counter 0\n");
+    return 1;
+  }
+
+  /* 
+   * Configure COUNTER_1 as asynchronous devisor,
+   * as binary counter and LSB/MSB.
+   */
+  cctrl_1 = 0x76;
+  err = ioctl(file_handle , ME8100_SETUP_COUNTER, &cctrl_1);
+  if(err){
+    printf("Cannot setup counter 1\n");
+    return 1;
+  }
+
+  /* 
+   * Configure COUNTER_2 as asynchronous devisor,
+   * as binary counter and LSB/MSB.
+   */
+  cctrl_2 = 0xB6;
+  err = ioctl(file_handle , ME8100_SETUP_COUNTER, &cctrl_2);
+  if(err){
+    printf("Cannot setup counter 2\n");
+    return 1;
+  }
+
+
+  /*---------------------------- LOAD COUNTER -------------------------------*/
+  
+  /* Counter 0 */
+  clvalue_0 = 0x4;
+  chvalue_0 = 0x0;
+  /* Write lower byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_0, &clvalue_0);
+  if(err){
+    printf("Cannot write to counter 0\n");
+    return 1;
+  }
+  /* Write higher byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_0, &chvalue_0);
+  if(err){
+    printf("Cannot write to counter 0\n");
+    return 1;
+  }
+
+  /* Counter 1 */
+  clvalue_1 = 0x4;
+  chvalue_1 = 0x0;
+  /* Write lower byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_1, &clvalue_1);
+  if(err){
+    printf("Cannot write to counter 1\n");
+    return 1;
+  }
+  /* Write higher byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_1, &chvalue_1);
+  if(err){
+    printf("Cannot write to counter 1\n");
+    return 1;
+  }
+
+  /* Counter 2 */
+  clvalue_2 = 0x4;
+  chvalue_2 = 0x0;
+  /* Write lower byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_2, &clvalue_2);
+  if(err){
+    printf("Cannot write to counter 2\n");
+    return 1;
+  }
+  /* Write higher byte */
+  err = ioctl(file_handle , ME8100_WRITE_COUNTER_2, &chvalue_2);
+  if(err){
+    printf("Cannot write to counter 2\n");
+    return 1;
+  }
+
+
+
+  /*-------------------------------- END ------------------------------------*/
+
+  printf("Please press return to terminate program :\n");
+  getchar();
+
+  printf("Close path to me8100_%d\n", minor);
+  err = close(file_handle);
+  if(err){
+    printf("Kann Pfad nicht schliessen\n");
+    return 1;
+  }
+
+  return 0;
+}