int BAR2_phys_addr;
int BAR4_phys_addr;
+void print_8bin(int nr)
+{
+ int i;
+ for (i = 7; i >= 0; i--) {
+ printf("%d" , ((nr & (1 << i)) > 0));
+ }
+
+ printf("\n");
+}
+
static inline int16_t mf624_read16(uint16_t *ptr)
{
- return *ptr;
+ return (volatile uint16_t) *ptr;
}
static inline int32_t mf624_read32(uint32_t *ptr)
{
- return *ptr;
+ return (volatile uint32_t) *ptr;
}
static inline void mf624_write16(uint16_t val, uint16_t *ptr)
mf624_write16(val, ((uint16_t*) mf624_BAR2) + (DOUT_reg/2));
}
+uint16_t DIO_read()
+{
+ return mf624_read16(((uint16_t*) mf624_BAR2) + (DOUT_reg/2)) & 0xF;
+}
int open_device(char* path) {
status = open(path, O_RDWR);
list_available_io_ports(dev_name);
}
-void mmap_regions(int device_fd)
+void mmap_regions(int device_fd, char* uio_dev)
{
- char buff[BUFF_SMALL];
+ char path[BUFF_MID];
FILE *file;
- file = fopen("/sys/class/uio/uio0/maps/map0/addr", "rb");
+ sprintf(path, "/sys/class/uio/%s/maps/map0/addr", uio_dev);
+ file = fopen(path, "rb");
fscanf(file, "%llx", &BAR0_phys_addr);
fclose(file);
- file = fopen("/sys/class/uio/uio0/maps/map1/addr", "rb");
+ sprintf(path, "/sys/class/uio/%s/maps/map1/addr", uio_dev);
+ file = fopen(path, "rb");
fscanf(file, "%llx", &BAR2_phys_addr);
fclose(file);
- file = fopen("/sys/class/uio/uio0/maps/map2/addr", "rb");
+ sprintf(path, "/sys/class/uio/%s/maps/map2/addr", uio_dev);
+ file = fopen(path, "rb");
fscanf(file, "%llx", &BAR4_phys_addr);
fclose(file);
strncat(buff, argv[1], min(strlen(argv[1]), 8));
device_fd = open_device(buff);
- mmap_regions(device_fd);
+ mmap_regions(device_fd, argv[1]);
if (device_fd != -1) {
while (1){
+ printf("Reading DIO = ");
+ print_8bin(DIO_read());
+
printf("Setting DIO to 0xff\n");
DIO_set(0xff);
sleep(1);