]> rtime.felk.cvut.cz Git - mf624-simulink.git/blob - mf624_SIMULINK.h
Added gitignore for *.mexa64 and *.mat files.
[mf624-simulink.git] / mf624_SIMULINK.h
1 #ifndef MF624
2 #define MF624
3
4 #include <sys/types.h>
5 #include <stdint.h> // uintX_t
6 #include <inttypes.h>
7
8
9 /* Hardware specific */
10 /* BAR0 */
11 #define GPIOC_reg               0x54
12
13 /* BAR2 */
14 #define ADCTRL_reg              0x00
15 #define ADDATA0_reg             0x00
16 #define ADDATA1_reg             0x02
17 #define ADDATA2_reg             0x04
18 #define ADDATA3_reg             0x06
19 #define ADDATA4_reg             0x08
20 #define ADDATA5_reg             0x0a
21 #define ADDATA6_reg             0x0c
22 #define ADDATA7_reg             0x0e
23 #define ADSTART_reg             0x20
24
25 #define DOUT_reg                0x10
26 #define DIN_reg                 0x10
27 #define DA0_reg                 0x20
28 #define DA1_reg                 0x22
29 #define DA2_reg                 0x24
30 #define DA3_reg                 0x26
31 #define DA4_reg                 0x28
32 #define DA5_reg                 0x2A
33 #define DA6_reg                 0x2C
34 #define DA7_reg                 0x2E
35
36 #define GPIOC_DACEN_mask        (1 << 26)
37 #define GPIOC_LDAC_mask         (1 << 23)
38 #define GPIOC_EOLC_mask         (1 << 17)
39
40 #define MFST2REG(mfst, bar_num, reg_offs) \
41         ((void *)(mfst->bar##bar_num.virt_addr + (reg_offs)))
42
43
44 typedef struct bar_mapping_t {
45         uintptr_t virt_addr;
46         void *    mmap_addr;
47         off_t     mmap_offset;
48         uintptr_t phys_addr;
49         uint32_t  size;
50         uint32_t  offset;
51 } bar_mapping_t;
52
53
54 typedef enum {DA0, DA1, DA2, DA3, DA4, DA5, DA6, DA7} dac_channel_t;
55 typedef enum {AD0, AD1, AD2, AD3, AD4, AD5, AD6, AD7} adc_channel_t;
56
57 typedef struct mf624_state_t {
58         int device_fd;
59         char *uio_dev;
60         bar_mapping_t bar0;
61         bar_mapping_t bar2;
62         bar_mapping_t bar4;
63         int status;
64         int ADC_enabled; // Which ADCs are enabled
65 } mf624_state_t;
66
67 extern mf624_state_t mf624_state;
68
69 extern void print_8bin(int nr);
70
71 static inline int16_t mf624_read16(void *ptr)
72 {
73         return *(volatile uint16_t*)ptr;
74 }
75
76 static inline int32_t mf624_read32(void *ptr)
77 {
78         return *(volatile uint32_t*) ptr;
79 }
80
81 static inline void mf624_write16(uint16_t val, void *ptr)
82 {
83         *(volatile uint16_t*) ptr = val;
84 }
85
86 static inline void mf624_write32(uint32_t val, void *ptr)
87 {
88         *(volatile uint32_t*) ptr = val;
89 }
90
91 extern void DIO_write(mf624_state_t* mfst, int16_t val);
92
93 extern uint16_t DIO_read(mf624_state_t* mfst);
94
95 extern void DAC_enable(mf624_state_t* mfst);
96
97 extern int DAC_write(mf624_state_t* mfst, dac_channel_t channel, int val);
98
99 extern int ADC_enable(mf624_state_t* mfst, adc_channel_t channel);
100
101 extern double ADC_read(mf624_state_t* mfst, adc_channel_t channel);
102
103 extern int open_device(char* path);
104
105 extern void wait_for_interrupts(int device_fd);
106
107 extern int disable_interrupts(int device_fd);
108
109 extern int enable_interrupts(int device_fd);
110
111 extern void list_available_mem_regions(char* device);
112
113 extern void list_available_io_ports(char *device);
114
115 extern int mmap_regions(mf624_state_t* mfst);
116
117 #endif