#include <stdint.h> // uintX_t
#include <inttypes.h>
+#include "simstruc.h"
/* Hardware specific */
/* BAR0 */
#define CTR4 0x44
#define CTRXCTRL 0x60
+#define IRCSTATUS_reg 0x6C
+#define IRCCTRL_reg 0x6C
+#define IRC0_reg 0x70
+#define IRC1_reg 0x74
+#define IRC2_reg 0x78
+#define IRC3_reg 0x7C
+
+#define IRCCTRL_IRC0MODE_mask 0x00000003
+#define IRCCTRL_IRC0COUNT_mask 0x0000000C
+#define IRCCTRL_IRC0RESET_mask 0x00000070
+#define IRCCTRL_IRC0FILTER_mask 0x00000080
+
+#define IRCCTRL_IRC1MODE_mask 0x00000300
+#define IRCCTRL_IRC1COUNT_mask 0x00000C00
+#define IRCCTRL_IRC1RESET_mask 0x00007000
+#define IRCCTRL_IRC1FILTER_mask 0x00008000
+
+#define IRCCTRL_IRC2MODE_mask 0x00030000
+#define IRCCTRL_IRC2COUNT_mask 0x000C0000
+#define IRCCTRL_IRC2RESET_mask 0x00700000
+#define IRCCTRL_IRC2FILTER_mask 0x00800000
+
+#define IRCCTRL_IRC3MODE_mask 0x03000000
+#define IRCCTRL_IRC3COUNT_mask 0x0C000000
+#define IRCCTRL_IRC3RESET_mask 0x70000000
+#define IRCCTRL_IRC3FILTER_mask 0x80000000
+
+#define IRCCTRL_CHANNEL_SHIFT 8
+
+#define IRCCTRL_MODE_mask(ch) (0x03<<((ch)*IRCCTRL_CHANNEL_SHIFT))
+#define IRCCTRL_COUNT_mask(ch) (0x0C<<((ch)*IRCCTRL_CHANNEL_SHIFT))
+#define IRCCTRL_RESET_mask(ch) (0x70<<((ch)*IRCCTRL_CHANNEL_SHIFT))
+#define IRCCTRL_FILTER_mask(ch) (0x80<<((ch)*IRCCTRL_CHANNEL_SHIFT))
+
+#define IRCCTRL_MODE_IRC 0
+#define IRCCTRL_MODE_BIDIR_RE 1
+#define IRCCTRL_MODE_BIDIR_FE 2
+#define IRCCTRL_MODE_BIDIR_BOTH 3
+
+#define IRCCTRL_COUNT_ENABLED 0
+#define IRCCTRL_COUNT_DISABLED 1
+#define IRCCTRL_COUNT_IF_IDX_LO 2
+#define IRCCTRL_COUNT_IF_IDX_HI 3
+
+#define IRCCTRL_RESET_DISABLED 0
+#define IRCCTRL_RESET_ALWAYS 1
+#define IRCCTRL_RESET_IF_IDX_LO 2
+#define IRCCTRL_RESET_IF_IDX_HI 3
+#define IRCCTRL_RESET_IF_IDX_RE 4
+#define IRCCTRL_RESET_IF_IDX_FE 5
+#define IRCCTRL_RESET_IF_IDX_BOTH 6
+
+#define IRCSTATUS_IRC0INDEX_mask 0x00000001
+#define IRCSTATUS_IRC1INDEX_mask 0x00000100
+#define IRCSTATUS_IRC2INDEX_mask 0x00000100
+#define IRCSTATUS_IRC3INDEX_mask 0x00000100
+
+#define IRCSTATUS_CHANNEL_SHIFT 8
+
+#define IRCSTATUS_INDEX_mask(ch) (0x01<<((ch)*IRCSTATUS_CHANNEL_SHIFT))
+
#define GPIOC_DACEN_mask (1 << 26)
#define GPIOC_LDAC_mask (1 << 23)
#define GPIOC_EOLC_mask (1 << 17)
[AD7] = ADDATA7_reg,
};
-extern void print_8bin(int nr);
-
static inline int16_t mf624_read16(void *ptr)
{
return *(volatile uint16_t*)ptr;
extern double ADC_read(mf624_state_t* mfst, adc_channel_t channel);
-extern int open_device(char* path);
-
-extern void wait_for_interrupts(int device_fd);
-
-extern int disable_interrupts(int device_fd);
-
-extern int enable_interrupts(int device_fd);
-
-extern void list_available_mem_regions(char* device);
-
-extern void list_available_io_ports(char *device);
-
-extern int mmap_regions(mf624_state_t* mfst);
+int mf624_init(SimStruct *S);
+int mf624_check(SimStruct *S);
+int mf624_done();
#endif