]> rtime.felk.cvut.cz Git - mf624-simulink.git/blob - mf624_SIMULINK.h
Minor change of HW-in-the-Loop model -
[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 #include "simstruc.h"
9
10 /* Hardware specific */
11 /* BAR0 */
12 #define GPIOC_reg               0x54
13
14 /* BAR2 */
15 #define ADCTRL_reg              0x00
16 #define ADDATA0_reg             0x00
17 #define ADDATA1_reg             0x02
18 #define ADDATA2_reg             0x04
19 #define ADDATA3_reg             0x06
20 #define ADDATA4_reg             0x08
21 #define ADDATA5_reg             0x0a
22 #define ADDATA6_reg             0x0c
23 #define ADDATA7_reg             0x0e
24 #define ADSTART_reg             0x20
25
26 #define DOUT_reg                0x10
27 #define DIN_reg                 0x10
28 #define DA0_reg                 0x20
29 #define DA1_reg                 0x22
30 #define DA2_reg                 0x24
31 #define DA3_reg                 0x26
32 #define DA4_reg                 0x28
33 #define DA5_reg                 0x2A
34 #define DA6_reg                 0x2C
35 #define DA7_reg                 0x2E
36
37 /* BAR4 */
38 #define CTR0MODE     0x00
39 #define CTR1MODE     0x10
40 #define CTR2MODE     0x20
41 #define CTR3MODE     0x30
42 #define CTR4MODE     0x40
43 #define CTR0         0x04
44 #define CTR1         0x14
45 #define CTR2         0x24
46 #define CTR3         0x34
47 #define CTR4         0x44
48 #define CTRXCTRL     0x60
49
50 #define GPIOC_DACEN_mask        (1 << 26)
51 #define GPIOC_LDAC_mask         (1 << 23)
52 #define GPIOC_EOLC_mask         (1 << 17)
53
54 #define MFST2REG(mfst, bar_num, reg_offs) \
55         ((void *)(mfst->bar##bar_num.virt_addr + (reg_offs)))
56
57
58 typedef struct bar_mapping_t {
59         uintptr_t virt_addr;
60         void *    mmap_addr;
61         off_t     mmap_offset;
62         uintptr_t phys_addr;
63         uint32_t  size;
64         uint32_t  offset;
65 } bar_mapping_t;
66
67
68 typedef enum {DA0, DA1, DA2, DA3, DA4, DA5, DA6, DA7} dac_channel_t;
69 typedef enum {AD0, AD1, AD2, AD3, AD4, AD5, AD6, AD7} adc_channel_t;
70
71 typedef struct mf624_state_t {
72         int device_fd;
73         char *uio_dev;
74         bar_mapping_t bar0;
75         bar_mapping_t bar2;
76         bar_mapping_t bar4;
77         int status;
78         int ADC_enabled; // Which ADCs are enabled
79     int DOut;
80 } mf624_state_t;
81
82 //extern mf624_state_t mf624_state;
83 extern mf624_state_t* mfst;
84
85 static uint32_t dac_channel2reg[] = {
86         [DA0] = DA0_reg,
87         [DA1] = DA1_reg,
88         [DA2] = DA2_reg,
89         [DA3] = DA3_reg,
90         [DA4] = DA4_reg,
91         [DA5] = DA5_reg,
92         [DA6] = DA6_reg,
93         [DA7] = DA7_reg,
94 };
95
96 static uint32_t adc_channel2reg[] = {
97         [AD0] = ADDATA0_reg,
98         [AD1] = ADDATA1_reg,
99         [AD2] = ADDATA2_reg,
100         [AD3] = ADDATA3_reg,
101         [AD4] = ADDATA4_reg,
102         [AD5] = ADDATA5_reg,
103         [AD6] = ADDATA6_reg,
104         [AD7] = ADDATA7_reg,
105 };
106
107 static inline int16_t mf624_read16(void *ptr)
108 {
109         return *(volatile uint16_t*)ptr;
110 }
111
112 static inline int32_t mf624_read32(void *ptr)
113 {
114         return *(volatile uint32_t*) ptr;
115 }
116
117 static inline void mf624_write16(uint16_t val, void *ptr)
118 {
119         *(volatile uint16_t*) ptr = val;
120 }
121
122 static inline void mf624_write32(uint32_t val, void *ptr)
123 {
124         *(volatile uint32_t*) ptr = val;
125 }
126
127 extern void DIO_write(mf624_state_t* mfst, int16_t val);
128
129 extern uint16_t DIO_read(mf624_state_t* mfst);
130
131 extern void DAC_enable(mf624_state_t* mfst);
132
133 extern int DAC_write(mf624_state_t* mfst, dac_channel_t channel, int val);
134
135 extern int ADC_enable(mf624_state_t* mfst, adc_channel_t channel);
136
137 extern double ADC_read(mf624_state_t* mfst, adc_channel_t channel);
138
139 int mf624_init(SimStruct *S);
140 int mf624_check(SimStruct *S);
141 int mf624_done();
142
143 #endif