#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);
}
-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);
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;
}