]> rtime.felk.cvut.cz Git - mf6xx.git/commitdiff
First try to read MF614 ADC from userspace. It does something but don't know if it...
authorRostislav Lisovy <lisovy@gmail.com>
Mon, 14 Feb 2011 01:54:44 +0000 (02:54 +0100)
committerRostislav Lisovy <lisovy@gmail.com>
Mon, 14 Feb 2011 01:54:44 +0000 (02:54 +0100)
src/uio/userspace/test_application/main [deleted file]
src/uio/userspace/test_application/main.c

diff --git a/src/uio/userspace/test_application/main b/src/uio/userspace/test_application/main
deleted file mode 100755 (executable)
index ee65be1..0000000
Binary files a/src/uio/userspace/test_application/main and /dev/null differ
index 10226e919c4211e377487672d39dabb211a84667..ecb1213035035a29d926b68873fdcf3c2b088ec7 100644 (file)
@@ -6,12 +6,33 @@
 #include <string.h>
 #include <dirent.h>
 #include <sys/types.h>
+#include <sys/mman.h>
+#include <stdint.h> // uintX_t
+#include <unistd.h>
+
+/* Hardware specific */
+#define AD_LO           0x0
+#define AD_HI           0x1
+#define AD_CTRL                0x0
+
+
+#define BUFF_SMALL      32
+#define BUFF_MID        256
+#define min(a, b)       ((a) > (b) ? (b) : (a))
 
-#define BUFF_SMALL     32
-#define BUFF_MID       256
-#define min(a, b) ((a) > (b) ? (b) : (a))
 
 int status;
+void* mf614_mem = NULL;
+
+void delay()
+{
+       for (int i = 0; i < 65000; i++) {}
+}
+
+void mf614_adc_init(int channel)
+{
+       *(((uint8_t *) mf614_mem) + AD_CTRL) = 1 << 6 | 0 << 5 | 0 << 4 /* RNG */| 0 << 3 /*BIP*/| channel;
+}
 
 int open_device(char* path) {
        status = open(path, O_RDWR);
@@ -132,19 +153,14 @@ void list_available_io_ports(char *device)
 }
 
 
-int main(int argc, char* argv[])
+void run_simple_tests(char* dev_name)
 {
        int device_fd;
        char buff[BUFF_SMALL];
        memset(buff, '\0', BUFF_SMALL);
 
-       if (argc < 2) {
-               printf("Usage: %s UIO_DEVICE\n   UIO_DEVICE\tname of uio device in /dev\n", argv[0]);
-               return 1;
-       }       
-
        strncat(buff, "/dev/", 5);
-       strncat(buff, argv[1], min(strlen(argv[1]), 8));
+       strncat(buff, dev_name, min(strlen(dev_name), 8));
 
        printf("Opening %s\n", buff);
 
@@ -165,10 +181,59 @@ int main(int argc, char* argv[])
 
 
        printf("Checking for available memory regions exported by the UIO driver\n");
-       list_available_mem_regions(argv[1]);
+       list_available_mem_regions(dev_name);
 
        printf("Checking for available IO ports exported by the UIO driver\n");
-       list_available_io_ports(argv[1]);
+       list_available_io_ports(dev_name);
+}
+
+
+int main(int argc, char* argv[])
+{
+       int device_fd;
+       int mem_size = 1; //TODO
+       float adc_value;
+       char buff[BUFF_SMALL];
+       char read_buff[BUFF_SMALL];
+       memset(buff, '\0', BUFF_SMALL);
+
+
+       if (argc < 2) {
+               printf("Usage: %s UIO_DEVICE\n   UIO_DEVICE\tname of uio device in /dev\n", argv[0]);
+               return 1;
+       }       
+
+
+       strncat(buff, "/dev/", 5);
+       strncat(buff, argv[1], min(strlen(argv[1]), 8));
+
+       device_fd = open_device(buff);
+       if (device_fd != -1) {
+               mf614_mem = mmap(0, mem_size * sysconf(_SC_PAGESIZE), PROT_READ | PROT_WRITE, MAP_SHARED, device_fd, 0);
+               if (mf614_mem == MAP_FAILED) {
+                       perror("mmap()");
+               }
+       
+
+               while(1) {
+                       
+                       
+                       for (int i = 0; i <= 7; i++) {
+                               mf614_adc_init(i);
+                               //enable_interrupts(device_fd);
+                               //read(device_fd, read_buff, 1); // should block until interrupt erceived
+
+                               // ... got interrupt -- handle it
+                               //disable_interrupts(device_fd);
+                               
+                               delay();
+                               adc_value = *(((uint8_t *) mf614_mem) + AD_LO) | (*(((uint8_t *) mf614_mem) + AD_HI) << 8);
+                               printf("[CH %d] ADC = %f V\n", i, adc_value/819);
+                       }
+                       printf("\n");
+               }
+       }
+
 
        return 0;
 }