1 /* Copyright (C) 2012-2013 Czech Technical University in Prague
4 * - Michal Horn <hornmich@fel.cvut.cz>
6 * This document contains proprietary information belonging to Czech
7 * Technical University in Prague. Passing on and copying of this
8 * document, and communication of its contents is not permitted
9 * without prior written authorization.
12 * This file contains gpio pins definitions
14 * On TMS570 MCU pins can operates as GIO on ports DMM, GIOA, GIOB,
15 * HET1 and HET2. Those pins, that are defined in this file, can be
16 * accessed directly as GPIO by hal_gpio_set_value and
17 * hal_gpio_get_value. Pin configuration can be modified by functions
18 * defined in hal_gpio_tms570 source and header files.
20 * NOTE: Although the configuration functions are implemented and
21 * should be ready to use, they were only slightly tested and are not
22 * used by the RPP software yet.
25 #include "drv/_tms570_rpp/digital_io_def.h"
26 #include "drv/digital_io.h"
28 #include "drv/_tms570_rpp/adc.h"
31 #define PORT_PIN(p,n,conf) (((p)<<DIO_PORT_SHIFT) | (n) | (conf))
33 #define PORT_CONF_GPIO_OUT_HI_PD_PEN_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_HIGH|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_OFF
34 #define PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_OFF
35 #define PORT_CONF_GPIO_OUT_LO_PU_PEN_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PU|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_OFF
36 #define PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_ON
37 #define PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODON DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_ON
38 #define PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_OFF
39 #define PORT_CONF_GPIO_OUT_LO_PU_PDIS_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_OUT|DIO_PORT_CONF_MODE_PU|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_OFF
40 #define PORT_CONF_GPIO_IN_HI_PU_PEN_ODON DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_HIGH|DIO_PORT_CONF_DIR_IN|DIO_PORT_CONF_MODE_PU|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_ON
41 #define PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_HIGH|DIO_PORT_CONF_DIR_IN|DIO_PORT_CONF_MODE_PU|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_ON
42 #define PORT_CONF_GPIO_IN_LO_PD_PDIS_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_IN|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_OFF
43 #define PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_IN|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PEN|DIO_PORT_CONF_OD_OFF
44 #define PORT_CONF_GPIO_IN_LO_PU_PDIS_ODOFF DIO_PORT_CONF_FNC_GPIO|DIO_PORT_CONF_INIT_LOW|DIO_PORT_CONF_DIR_IN|DIO_PORT_CONF_MODE_PD|DIO_PORT_CONF_MODE_PDIS|DIO_PORT_CONF_OD_OFF
46 /* Pins descriptors */
47 #define PIN_DSC_FANCTRL PORT_PIN(DIO_PORT_ID_DMM, 0, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
48 #define PIN_DSC_ETHRST PORT_PIN(DIO_PORT_ID_DMM, 1, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
49 #define PIN_DSC_VBAT1EN PORT_PIN(DIO_PORT_ID_DMM, 2, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON)
50 #define PIN_DSC_VBAT2EN PORT_PIN(DIO_PORT_ID_DMM, 3, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON)
51 #define PIN_DSC_VBAT3EN PORT_PIN(DIO_PORT_ID_DMM, 4, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON)
52 #define PIN_DSC_VBATEN PORT_PIN(DIO_PORT_ID_DMM, 5, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
53 #define PIN_DSC_SPICSA PORT_PIN(DIO_PORT_ID_DMM, 7, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
54 #define PIN_DSC_SPICSB PORT_PIN(DIO_PORT_ID_DMM, 8, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
55 #define PIN_DSC_MOUT1EN PORT_PIN(DIO_PORT_ID_DMM, 11, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
56 #define PIN_DSC_MOUT2EN PORT_PIN(DIO_PORT_ID_DMM, 12, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
57 #define PIN_DSC_CANNSTB PORT_PIN(DIO_PORT_ID_DMM, 13, PORT_CONF_GPIO_OUT_HI_PD_PEN_ODOFF)
58 #define PIN_DSC_CANEN PORT_PIN(DIO_PORT_ID_DMM, 15, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
59 #define PIN_DSC_LIN2NSLP PORT_PIN(DIO_PORT_ID_DMM, 16, PORT_CONF_GPIO_OUT_HI_PD_PEN_ODOFF)
60 #define PIN_DSC_LIN1NSLP PORT_PIN(DIO_PORT_ID_DMM, 17, PORT_CONF_GPIO_OUT_HI_PD_PEN_ODOFF)
61 #define PIN_DSC_DININT PORT_PIN(DIO_PORT_ID_DMM, 18, PORT_CONF_GPIO_IN_LO_PD_PDIS_ODOFF)
62 #define PIN_DSC_DIN8 PORT_PIN(DIO_PORT_ID_GIOA, 0, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
63 #define PIN_DSC_DIN9 PORT_PIN(DIO_PORT_ID_GIOA, 1, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
64 #define PIN_DSC_DIN10 PORT_PIN(DIO_PORT_ID_GIOA, 2, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
65 #define PIN_DSC_DIN11 PORT_PIN(DIO_PORT_ID_GIOA, 3, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
66 #define PIN_DSC_DIN12 PORT_PIN(DIO_PORT_ID_GIOA, 4, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
67 #define PIN_DSC_DIN13 PORT_PIN(DIO_PORT_ID_GIOA, 5, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
68 #define PIN_DSC_DIN14 PORT_PIN(DIO_PORT_ID_GIOA, 6, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
69 #define PIN_DSC_DIN15 PORT_PIN(DIO_PORT_ID_GIOA, 7, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
70 #define PIN_DSC_MOUT6EN PORT_PIN(DIO_PORT_ID_GIOB, 0, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
71 #define PIN_DSC_MOUT5EN PORT_PIN(DIO_PORT_ID_GIOB, 1, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
72 #define PIN_DSC_MOUT6IN PORT_PIN(DIO_PORT_ID_GIOB, 2, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
73 #define PIN_DSC_MOUT5IN PORT_PIN(DIO_PORT_ID_GIOB, 3, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
74 #define PIN_DSC_MOUT4EN PORT_PIN(DIO_PORT_ID_GIOB, 4, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
75 #define PIN_DSC_MOUT3EN PORT_PIN(DIO_PORT_ID_GIOB, 5, PORT_CONF_GPIO_IN_HI_PU_PDIS_ODON)
76 #define PIN_DSC_MOUT4IN PORT_PIN(DIO_PORT_ID_GIOB, 6, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
77 #define PIN_DSC_MOUT3IN PORT_PIN(DIO_PORT_ID_GIOB, 7, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
78 #define PIN_DSC_HBREN PORT_PIN(DIO_PORT_ID_HET1, 1, PORT_CONF_GPIO_OUT_LO_PU_PDIS_ODOFF)
79 #define PIN_DSC_HBRDIR PORT_PIN(DIO_PORT_ID_HET1, 4, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON)
80 #define PIN_DSC_HBRPWM PORT_PIN(DIO_PORT_ID_HET1, 7, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODON)
81 #define PIN_DSC_MOUT1IN PORT_PIN(DIO_PORT_ID_HET1, 9, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
82 #define PIN_DSC_MOUT2IN PORT_PIN(DIO_PORT_ID_HET1, 14, PORT_CONF_GPIO_OUT_LO_PD_PDIS_ODOFF)
83 #define PIN_DSC_HOUT1IN PORT_PIN(DIO_PORT_ID_HET1, 16, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
84 #define PIN_DSC_HOUT1DIAG PORT_PIN(DIO_PORT_ID_HET1, 17, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
85 #define PIN_DSC_HOUT2IN PORT_PIN(DIO_PORT_ID_HET1, 18, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
86 #define PIN_DSC_HOUT2DIAG PORT_PIN(DIO_PORT_ID_HET1, 19, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
87 #define PIN_DSC_HOUT3IN PORT_PIN(DIO_PORT_ID_HET1, 20, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
88 #define PIN_DSC_HOUT3DIAG PORT_PIN(DIO_PORT_ID_HET1, 21, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
89 #define PIN_DSC_HOUT4IN PORT_PIN(DIO_PORT_ID_HET1, 22, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
90 #define PIN_DSC_HOUT4DIAG PORT_PIN(DIO_PORT_ID_HET1, 23, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
91 #define PIN_DSC_HOUT5IN PORT_PIN(DIO_PORT_ID_HET1, 25, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
92 #define PIN_DSC_HOUT5DIAG PORT_PIN(DIO_PORT_ID_HET1, 27, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
93 #define PIN_DSC_HOUT6IN PORT_PIN(DIO_PORT_ID_HET1, 29, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
94 #define PIN_DSC_HOUT6DIAG PORT_PIN(DIO_PORT_ID_HET1, 31, PORT_CONF_GPIO_IN_LO_PD_PEN_ODOFF)
95 #define PIN_DSC_DMM_UNUSED(b) PORT_PIN(DIO_PORT_ID_HET2, b, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
96 #define PIN_DSC_GIOA_UNUSED(b) PORT_PIN(DIO_PORT_ID_HET2, b, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
97 #define PIN_DSC_GIOB_UNUSED(b) PORT_PIN(DIO_PORT_ID_HET2, b, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
98 #define PIN_DSC_HET1_UNUSED(b) PORT_PIN(DIO_PORT_ID_HET2, b, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
99 #define PIN_DSC_HET2_UNUSED(b) PORT_PIN(DIO_PORT_ID_HET2, b, PORT_CONF_GPIO_OUT_LO_PD_PEN_ODOFF)
102 * Array of ports used as GPIO. Thanks to that array, we can
103 * determine port just by index in pin_desc at 5th bit */
104 gioPORT_t *dio_port_id_map[DIO_MAX_PORT_CNT] = {
105 (gioPORT_t *)dmmPORT,
106 (gioPORT_t *)gioPORTA,
107 (gioPORT_t *)gioPORTB,
108 (gioPORT_t *)hetPORT1,
109 (gioPORT_t *)hetPORT2
113 * Map of pin names to pin descriptors. Each pin can be then easily
114 * found just by its name given as a string to hal_gpio_get_pin_dsc
116 dio_pin_map_element_t dio_pin_map[DIO_MAX_PIN_CNT] = {
118 { .pin_name = DIO_PIN_NAME_FANCTRL, .pin_desc = PIN_DSC_FANCTRL },
119 { .pin_name = DIO_PIN_NAME_ETHRST, .pin_desc = PIN_DSC_ETHRST },
120 { .pin_name = DIO_PIN_NAME_VBAT1EN, .pin_desc = PIN_DSC_VBAT1EN },
121 { .pin_name = DIO_PIN_NAME_VBAT2EN, .pin_desc = PIN_DSC_VBAT2EN },
122 { .pin_name = DIO_PIN_NAME_VBAT3EN, .pin_desc = PIN_DSC_VBAT3EN },
123 { .pin_name = DIO_PIN_NAME_VBATEN, .pin_desc = PIN_DSC_VBATEN },
124 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_DMM_UNUSED(6) },
125 { .pin_name = DIO_PIN_NAME_SPICSA, .pin_desc = PIN_DSC_SPICSA },
126 { .pin_name = DIO_PIN_NAME_SPICSB, .pin_desc = PIN_DSC_SPICSB },
127 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_DMM_UNUSED(9)},
128 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_DMM_UNUSED(10) },
129 { .pin_name = DIO_PIN_NAME_MOUT1EN, .pin_desc = PIN_DSC_MOUT1EN },
130 { .pin_name = DIO_PIN_NAME_MOUT2EN, .pin_desc = PIN_DSC_MOUT2EN },
131 { .pin_name = DIO_PIN_NAME_CANNSTB, .pin_desc = PIN_DSC_CANNSTB },
132 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_DMM_UNUSED(14) },
133 { .pin_name = DIO_PIN_NAME_CANEN, .pin_desc = PIN_DSC_CANEN },
134 { .pin_name = DIO_PIN_NAME_LIN2NSLP,.pin_desc = PIN_DSC_LIN2NSLP },
135 { .pin_name = DIO_PIN_NAME_LIN1NSLP,.pin_desc = PIN_DSC_LIN1NSLP },
136 { .pin_name = DIO_PIN_NAME_DININT, .pin_desc = PIN_DSC_DININT },
138 { .pin_name = DIO_PIN_NAME_DIN8, .pin_desc = PIN_DSC_DIN8 },
139 { .pin_name = DIO_PIN_NAME_DIN9, .pin_desc = PIN_DSC_DIN9 },
140 { .pin_name = DIO_PIN_NAME_DIN10, .pin_desc = PIN_DSC_DIN10 },
141 { .pin_name = DIO_PIN_NAME_DIN11, .pin_desc = PIN_DSC_DIN11 },
142 { .pin_name = DIO_PIN_NAME_DIN12, .pin_desc = PIN_DSC_DIN12 },
143 { .pin_name = DIO_PIN_NAME_DIN13, .pin_desc = PIN_DSC_DIN13 },
144 { .pin_name = DIO_PIN_NAME_DIN14, .pin_desc = PIN_DSC_DIN14 },
145 { .pin_name = DIO_PIN_NAME_DIN15, .pin_desc = PIN_DSC_DIN15 },
147 { .pin_name = DIO_PIN_NAME_MOUT6EN, .pin_desc = PIN_DSC_MOUT6EN },
148 { .pin_name = DIO_PIN_NAME_MOUT5EN, .pin_desc = PIN_DSC_MOUT5EN },
149 { .pin_name = DIO_PIN_NAME_MOUT6IN, .pin_desc = PIN_DSC_MOUT6IN },
150 { .pin_name = DIO_PIN_NAME_MOUT5IN, .pin_desc = PIN_DSC_MOUT5IN },
151 { .pin_name = DIO_PIN_NAME_MOUT4EN, .pin_desc = PIN_DSC_MOUT4EN },
152 { .pin_name = DIO_PIN_NAME_MOUT3EN, .pin_desc = PIN_DSC_MOUT3EN },
153 { .pin_name = DIO_PIN_NAME_MOUT4IN, .pin_desc = PIN_DSC_MOUT4IN },
154 { .pin_name = DIO_PIN_NAME_MOUT3IN, .pin_desc = PIN_DSC_MOUT3IN },
156 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(0) },
157 { .pin_name = DIO_PIN_NAME_HBREN, .pin_desc = PIN_DSC_HBREN },
158 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(2) },
159 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(3) },
160 { .pin_name = DIO_PIN_NAME_HBRDIR, .pin_desc = PIN_DSC_HBRDIR },
161 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(5) },
162 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(6) },
163 { .pin_name = DIO_PIN_NAME_HBRPWM, .pin_desc = PIN_DSC_HBRPWM },
164 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(8) },
165 { .pin_name = DIO_PIN_NAME_MOUT1IN, .pin_desc = PIN_DSC_MOUT1IN },
166 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(10) },
167 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(11) },
168 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(12) },
169 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(13) },
170 { .pin_name = DIO_PIN_NAME_MOUT2IN, .pin_desc = PIN_DSC_MOUT2IN },
171 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(15) },
172 { .pin_name = DIO_PIN_NAME_HOUT1IN, .pin_desc = PIN_DSC_HOUT1IN },
173 { .pin_name = DIO_PIN_NAME_HOUT1DIAG,.pin_desc = PIN_DSC_HOUT1DIAG },
174 { .pin_name = DIO_PIN_NAME_HOUT2IN, .pin_desc = PIN_DSC_HOUT2IN },
175 { .pin_name = DIO_PIN_NAME_HOUT2DIAG,.pin_desc = PIN_DSC_HOUT2DIAG },
176 { .pin_name = DIO_PIN_NAME_HOUT3IN, .pin_desc = PIN_DSC_HOUT3IN },
177 { .pin_name = DIO_PIN_NAME_HOUT3DIAG,.pin_desc = PIN_DSC_HOUT3DIAG },
178 { .pin_name = DIO_PIN_NAME_HOUT4IN, .pin_desc = PIN_DSC_HOUT4IN },
179 { .pin_name = DIO_PIN_NAME_HOUT4DIAG,.pin_desc = PIN_DSC_HOUT4DIAG },
180 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(22) },
181 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(23) },
182 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(24) },
183 { .pin_name = DIO_PIN_NAME_HOUT5IN, .pin_desc = PIN_DSC_HOUT5IN },
184 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(26) },
185 { .pin_name = DIO_PIN_NAME_HOUT5DIAG,.pin_desc = PIN_DSC_HOUT5DIAG },
186 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(28) },
187 { .pin_name = DIO_PIN_NAME_HOUT6IN, .pin_desc = PIN_DSC_HOUT6IN },
188 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET1_UNUSED(30) },
189 { .pin_name = DIO_PIN_NAME_HOUT6DIAG,.pin_desc = PIN_DSC_HOUT6DIAG },
191 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(0) },
192 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(1) },
193 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(2) },
194 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(3) },
195 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(4) },
196 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(5) },
197 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(6) },
198 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(7) },
199 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(8) },
200 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(9) },
201 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(10) },
202 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(11) },
203 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(12) },
204 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(13) },
205 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(14) },
206 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(15) },
207 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(16) },
208 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(17) },
209 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(18) },
210 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(19) },
211 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(20) },
212 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(21) },
213 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(22) },
214 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(23) },
215 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(24) },
216 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(25) },
217 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(26) },
218 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(27) },
219 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(28) },
220 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(29) },
221 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(30) },
222 { .pin_name = DIO_PIN_NAME_UNUSED, .pin_desc = PIN_DSC_HET2_UNUSED(31) }
225 // FIXME Upper layer dependency/coupling
226 // Declared in drv/adc.h
227 extern uint32_t adc_get_port_val(uint32_t *config, uint32_t num_channels, uint32_t *values);
230 // Lists of pins assigned to the ports
231 static uint32_t port_cfg_dinmcu[] = {
232 PIN_DSC_DIN8, PIN_DSC_DIN9, PIN_DSC_DIN10, PIN_DSC_DIN11,
233 PIN_DSC_DIN12, PIN_DSC_DIN13, PIN_DSC_DIN14, PIN_DSC_DIN15
235 static uint32_t port_cfg_dinspi[] = { 1, 0 };
236 static uint32_t port_cfg_houtdiag[] = {
237 PIN_DSC_HOUT1DIAG, PIN_DSC_HOUT2DIAG, PIN_DSC_HOUT3DIAG,
238 PIN_DSC_HOUT4DIAG, PIN_DSC_HOUT5DIAG, PIN_DSC_HOUT6DIAG
240 static uint32_t port_cfg_houtin[] = {
241 PIN_DSC_HOUT1IN, PIN_DSC_HOUT2IN, PIN_DSC_HOUT3IN,
242 PIN_DSC_HOUT4IN, PIN_DSC_HOUT5IN, PIN_DSC_HOUT6IN
244 static uint32_t port_cfg_houtifbk[] = { (uint32_t)adcREG2, adcGROUP1, 0 };
245 static uint32_t port_cfg_adc[] = { (uint32_t)adcREG1, adcGROUP1, 1 };
246 static uint32_t port_cfg_lout[] = { 1, 1 };
247 static uint32_t port_cfg_dac1_2[] = { 3, 0 };
248 static uint32_t port_cfg_dac3_4[] = { 3, 1 };
249 static uint32_t port_cfg_dacdref[] = { 3, 2 };
250 static uint32_t port_cfg_hbr[] = { 4, 0 };
251 static uint32_t port_cfg_fray1[] = { 4, 1 };
252 static uint32_t port_cfg_fray2[] = { 4, 2 };
253 static uint32_t port_cfg_mouten[] = {
254 PIN_DSC_MOUT1EN, PIN_DSC_MOUT2EN, PIN_DSC_MOUT3EN,
255 PIN_DSC_MOUT4EN, PIN_DSC_MOUT5EN, PIN_DSC_MOUT6EN
257 static uint32_t port_cfg_moutin[] = {
258 PIN_DSC_MOUT1IN, PIN_DSC_MOUT2IN, PIN_DSC_MOUT3IN,
259 PIN_DSC_MOUT4IN, PIN_DSC_MOUT5IN, PIN_DSC_MOUT6IN
263 static dio_port_desc_t port_desc_dinmcu = {
264 .config = port_cfg_dinmcu,
266 .interfaceType = GPIO,
267 .port_getfnc_ptr = &dio_gpio_port_get_val,
268 .port_setfnc_ptr = ((void *)0),
270 static dio_port_desc_t port_desc_dinspi = {
271 .config = port_cfg_dinspi,
273 .interfaceType = SPI,
274 .port_getfnc_ptr = ((void *)0),
275 .port_setfnc_ptr = &dio_spi_port_transfer_command,
277 static dio_port_desc_t port_desc_houtdiag = {
278 .config = port_cfg_houtdiag,
280 .interfaceType = GPIO,
281 .port_getfnc_ptr = &dio_gpio_port_get_val,
282 .port_setfnc_ptr = ((void *)0),
284 static dio_port_desc_t port_desc_houtin = {
285 .config = port_cfg_houtin,
287 .interfaceType = GPIO,
288 .port_getfnc_ptr = &dio_gpio_port_get_val,
289 .port_setfnc_ptr = &dio_gpio_port_set_val,
291 static dio_port_desc_t port_desc_houtifbk = {
292 .config = port_cfg_houtifbk,
294 .interfaceType = ADC,
295 .port_getfnc_ptr = &adc_get_port_val,
296 .port_setfnc_ptr = ((void *)0),
298 static dio_port_desc_t port_desc_adc = {
299 .config = port_cfg_adc,
301 .interfaceType = ADC,
302 .port_getfnc_ptr = &adc_get_port_val,
303 .port_setfnc_ptr = ((void *)0),
305 static dio_port_desc_t port_desc_lout = {
306 .config = port_cfg_lout,
308 .interfaceType = SPI,
309 .port_getfnc_ptr = ((void *)0),
310 .port_setfnc_ptr = &dio_spi_port_transfer_command,
312 static dio_port_desc_t port_desc_dac1_2 = {
313 .config = port_cfg_dac1_2,
315 .interfaceType = SPI,
316 .port_getfnc_ptr = ((void *)0),
317 .port_setfnc_ptr = &dio_spi_port_transfer_command,
319 static dio_port_desc_t port_desc_dac3_4 = {
320 .config = port_cfg_dac3_4,
322 .interfaceType = SPI,
323 .port_getfnc_ptr = ((void *)0),
324 .port_setfnc_ptr = &dio_spi_port_transfer_command,
326 static dio_port_desc_t port_desc_dacdref = {
327 .config = port_cfg_dacdref,
329 .interfaceType = SPI,
330 .port_getfnc_ptr = ((void *)0),
331 .port_setfnc_ptr = &dio_spi_port_transfer_command,
333 static dio_port_desc_t port_desc_hbr = {
334 .config = port_cfg_hbr,
336 .interfaceType = SPI,
337 .port_getfnc_ptr = ((void *)0),
338 .port_setfnc_ptr = &dio_spi_port_transfer_command,
340 static dio_port_desc_t port_desc_fray1 = {
341 .config = port_cfg_fray1,
343 .interfaceType = SPI,
344 .port_getfnc_ptr = ((void *)0),
345 .port_setfnc_ptr = &dio_spi_port_transfer_command,
347 static dio_port_desc_t port_desc_fray2 = {
348 .config = port_cfg_fray2,
350 .interfaceType = SPI,
351 .port_getfnc_ptr = ((void *)0),
352 .port_setfnc_ptr = &dio_spi_port_transfer_command,
354 static dio_port_desc_t port_desc_mouten = {
355 .config = port_cfg_mouten,
357 .interfaceType = GPIO,
358 .port_getfnc_ptr = &dio_gpio_port_get_val,
359 .port_setfnc_ptr = ((void *)0),
361 static dio_port_desc_t port_desc_moutin = {
362 .config = port_cfg_moutin,
364 .interfaceType = GPIO,
365 .port_getfnc_ptr = &dio_gpio_port_get_val,
366 .port_setfnc_ptr = &dio_gpio_port_set_val,
369 // Maps of port names to port descriptors
370 dio_port_def_t dio_port_definition[DIO_PORT_CNT] = {
371 {.name = DIO_PORT_NAME_DINMCU, .desc = &port_desc_dinmcu},
372 {.name = DIO_PORT_NAME_DINSPI, .desc = &port_desc_dinspi},
373 {.name = DIO_PORT_NAME_HOUTDIAG, .desc = &port_desc_houtdiag},
374 {.name = DIO_PORT_NAME_HOUTIN, .desc = &port_desc_houtin},
375 {.name = DIO_PORT_NAME_HOUTIFBK, .desc = &port_desc_houtifbk},
376 {.name = DIO_PORT_NAME_ADC, .desc = &port_desc_adc},
377 {.name = DIO_PORT_NAME_LOUT, .desc = &port_desc_lout},
378 {.name = DIO_PORT_NAME_DAC1_2, .desc = &port_desc_dac1_2},
379 {.name = DIO_PORT_NAME_DAC3_4, .desc = &port_desc_dac3_4},
380 {.name = DIO_PORT_NAME_DACDREF, .desc = &port_desc_dacdref},
381 {.name = DIO_PORT_NAME_HBR, .desc = &port_desc_hbr},
382 {.name = DIO_PORT_NAME_FRAY1, .desc = &port_desc_fray1},
383 {.name = DIO_PORT_NAME_FRAY2, .desc = &port_desc_fray2},
384 {.name = DIO_PORT_NAME_MOUTEN, .desc = &port_desc_mouten},
385 {.name = DIO_PORT_NAME_MOUTIN, .desc = &port_desc_moutin}