]> rtime.felk.cvut.cz Git - mf624-simulink.git/blob - mf624_SIMULINK.h
Updated test model with new filename of mf624_SIMULINK.c.
[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 /* BAR4 */
37 #define CTR0MODE     0x00
38 #define CTR1MODE     0x10
39 #define CTR2MODE     0x20
40 #define CTR3MODE     0x30
41 #define CTR4MODE     0x40
42 #define CTR0         0x04
43 #define CTR1         0x14
44 #define CTR2         0x24
45 #define CTR3         0x34
46 #define CTR4         0x44
47 #define CTRXCTRL     0x60
48
49 #define GPIOC_DACEN_mask        (1 << 26)
50 #define GPIOC_LDAC_mask         (1 << 23)
51 #define GPIOC_EOLC_mask         (1 << 17)
52
53 #define MFST2REG(mfst, bar_num, reg_offs) \
54         ((void *)(mfst->bar##bar_num.virt_addr + (reg_offs)))
55
56
57 typedef struct bar_mapping_t {
58         uintptr_t virt_addr;
59         void *    mmap_addr;
60         off_t     mmap_offset;
61         uintptr_t phys_addr;
62         uint32_t  size;
63         uint32_t  offset;
64 } bar_mapping_t;
65
66
67 typedef enum {DA0, DA1, DA2, DA3, DA4, DA5, DA6, DA7} dac_channel_t;
68 typedef enum {AD0, AD1, AD2, AD3, AD4, AD5, AD6, AD7} adc_channel_t;
69
70 typedef struct mf624_state_t {
71         int device_fd;
72         char *uio_dev;
73         bar_mapping_t bar0;
74         bar_mapping_t bar2;
75         bar_mapping_t bar4;
76         int status;
77         int ADC_enabled; // Which ADCs are enabled
78     int DOut;
79 } mf624_state_t;
80
81 //extern mf624_state_t mf624_state;
82 extern mf624_state_t* mfst;
83
84 static uint32_t dac_channel2reg[] = {
85         [DA0] = DA0_reg,
86         [DA1] = DA1_reg,
87         [DA2] = DA2_reg,
88         [DA3] = DA3_reg,
89         [DA4] = DA4_reg,
90         [DA5] = DA5_reg,
91         [DA6] = DA6_reg,
92         [DA7] = DA7_reg,
93 };
94
95 static uint32_t adc_channel2reg[] = {
96         [AD0] = ADDATA0_reg,
97         [AD1] = ADDATA1_reg,
98         [AD2] = ADDATA2_reg,
99         [AD3] = ADDATA3_reg,
100         [AD4] = ADDATA4_reg,
101         [AD5] = ADDATA5_reg,
102         [AD6] = ADDATA6_reg,
103         [AD7] = ADDATA7_reg,
104 };
105
106 extern void print_8bin(int nr);
107
108 static inline int16_t mf624_read16(void *ptr)
109 {
110         return *(volatile uint16_t*)ptr;
111 }
112
113 static inline int32_t mf624_read32(void *ptr)
114 {
115         return *(volatile uint32_t*) ptr;
116 }
117
118 static inline void mf624_write16(uint16_t val, void *ptr)
119 {
120         *(volatile uint16_t*) ptr = val;
121 }
122
123 static inline void mf624_write32(uint32_t val, void *ptr)
124 {
125         *(volatile uint32_t*) ptr = val;
126 }
127
128 extern void DIO_write(mf624_state_t* mfst, int16_t val);
129
130 extern uint16_t DIO_read(mf624_state_t* mfst);
131
132 extern void DAC_enable(mf624_state_t* mfst);
133
134 extern int DAC_write(mf624_state_t* mfst, dac_channel_t channel, int val);
135
136 extern int ADC_enable(mf624_state_t* mfst, adc_channel_t channel);
137
138 extern double ADC_read(mf624_state_t* mfst, adc_channel_t channel);
139
140 extern int open_device(char* path);
141
142 extern void wait_for_interrupts(int device_fd);
143
144 extern int disable_interrupts(int device_fd);
145
146 extern int enable_interrupts(int device_fd);
147
148 extern void list_available_mem_regions(char* device);
149
150 extern void list_available_io_ports(char *device);
151
152 extern int mmap_regions(mf624_state_t* mfst);
153
154 #endif