]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blob - include/het.h
Rewritten for using one task and direct usage of interrupts
[pes-rpp/rpp-test-sw.git] / include / het.h
1 /** @file het.h\r
2 *   @brief HET Driver Definition File\r
3 *   @date 15.Mar.2012\r
4 *   @version 03.01.00\r
5 *   \r
6 */\r
7 \r
8 /* (c) Texas Instruments 2009-2012, All rights reserved. */\r
9 \r
10 \r
11 #ifndef __HET_H__\r
12 #define __HET_H__\r
13 \r
14 #include "sys_common.h"\r
15 #include "gio.h"\r
16 #include <string.h>\r
17 \r
18 /* USER CODE BEGIN (0) */\r
19 /* USER CODE END */\r
20 \r
21 /** @def pwm0\r
22 *   @brief Pwm signal 0\r
23 *\r
24 *   Alias for pwm signal 0\r
25 */\r
26 #define pwm0 0U\r
27 \r
28 /** @def pwm1\r
29 *   @brief Pwm signal 1\r
30 *\r
31 *   Alias for pwm signal 1\r
32 */\r
33 #define pwm1 1U\r
34 \r
35 /** @def pwm2\r
36 *   @brief Pwm signal 2\r
37 *\r
38 *   Alias for pwm signal 2\r
39 */\r
40 #define pwm2 2U\r
41 \r
42 /** @def pwm3\r
43 *   @brief Pwm signal 3\r
44 *\r
45 *   Alias for pwm signal 3\r
46 */\r
47 #define pwm3 3U\r
48 \r
49 /** @def pwm4\r
50 *   @brief Pwm signal 4\r
51 *\r
52 *   Alias for pwm signal 4\r
53 */\r
54 #define pwm4 4U\r
55 \r
56 /** @def pwm5\r
57 *   @brief Pwm signal 5\r
58 *\r
59 *   Alias for pwm signal 5\r
60 */\r
61 #define pwm5 5U\r
62 \r
63 /** @def pwm6\r
64 *   @brief Pwm signal 6\r
65 *\r
66 *   Alias for pwm signal 6\r
67 */\r
68 #define pwm6 6U\r
69 \r
70 /** @def pwm7\r
71 *   @brief Pwm signal 7\r
72 *\r
73 *   Alias for pwm signal 7\r
74 */\r
75 #define pwm7 7U\r
76 \r
77 \r
78 /** @def edge0\r
79 *   @brief Edge signal 0\r
80 *\r
81 *   Alias for edge signal 0\r
82 */\r
83 #define edge0 0U\r
84 \r
85 /** @def edge1\r
86 *   @brief Edge signal 1\r
87 *\r
88 *   Alias for edge signal 1\r
89 */\r
90 #define edge1 1U\r
91 \r
92 /** @def edge2\r
93 *   @brief Edge signal 2\r
94 *\r
95 *   Alias for edge signal 2\r
96 */\r
97 #define edge2 2U\r
98 \r
99 /** @def edge3\r
100 *   @brief Edge signal 3\r
101 *\r
102 *   Alias for edge signal 3\r
103 */\r
104 #define edge3 3U\r
105 \r
106 /** @def edge4\r
107 *   @brief Edge signal 4\r
108 *\r
109 *   Alias for edge signal 4\r
110 */\r
111 #define edge4 4U\r
112 \r
113 /** @def edge5\r
114 *   @brief Edge signal 5\r
115 *\r
116 *   Alias for edge signal 5\r
117 */\r
118 #define edge5 5U\r
119 \r
120 /** @def edge6\r
121 *   @brief Edge signal 6\r
122 *\r
123 *   Alias for edge signal 6\r
124 */\r
125 #define edge6 6U\r
126 \r
127 /** @def edge7\r
128 *   @brief Edge signal 7\r
129 *\r
130 *   Alias for edge signal 7\r
131 */\r
132 #define edge7 7U\r
133 \r
134 \r
135 /** @def cap0\r
136 *   @brief Capture signal 0\r
137 *\r
138 *   Alias for capture signal 0\r
139 */\r
140 #define cap0 0U\r
141 \r
142 /** @def cap1\r
143 *   @brief Capture signal 1\r
144 *\r
145 *   Alias for capture signal 1\r
146 */\r
147 #define cap1 1U\r
148 \r
149 /** @def cap2\r
150 *   @brief Capture signal 2\r
151 *\r
152 *   Alias for capture signal 2\r
153 */\r
154 #define cap2 2U\r
155 \r
156 /** @def cap3\r
157 *   @brief Capture signal 3\r
158 *\r
159 *   Alias for capture signal 3\r
160 */\r
161 #define cap3 3U\r
162 \r
163 /** @def cap4\r
164 *   @brief Capture signal 4\r
165 *\r
166 *   Alias for capture signal 4\r
167 */\r
168 #define cap4 4U\r
169 \r
170 /** @def cap5\r
171 *   @brief Capture signal 5\r
172 *\r
173 *   Alias for capture signal 5\r
174 */\r
175 #define cap5 5U\r
176 \r
177 /** @def cap6\r
178 *   @brief Capture signal 6\r
179 *\r
180 *   Alias for capture signal 6\r
181 */\r
182 #define cap6 6U\r
183 \r
184 /** @def cap7\r
185 *   @brief Capture signal 7\r
186 *\r
187 *   Alias for capture signal 7\r
188 */\r
189 #define cap7 7U\r
190 \r
191 /** @def pwmEND_OF_DUTY\r
192 *   @brief Pwm end of duty\r
193 *\r
194 *   Alias for pwm end of duty notification\r
195 */\r
196 #define pwmEND_OF_DUTY 2U\r
197 \r
198 /** @def pwmEND_OF_PERIOD\r
199 *   @brief Pwm end of period\r
200 *\r
201 *   Alias for pwm end of period notification\r
202 */\r
203 #define pwmEND_OF_PERIOD 4U\r
204 \r
205 /** @def pwmEND_OF_BOTH\r
206 *   @brief Pwm end of duty and period\r
207 *\r
208 *   Alias for pwm end of duty and period notification\r
209 */\r
210 #define pwmEND_OF_BOTH 6U\r
211 \r
212 /* USER CODE BEGIN (1) */\r
213 /* USER CODE END */\r
214 \r
215 /** @struct hetBase\r
216 *   @brief HET Register Definition\r
217 *\r
218 *   This structure is used to access the HET module egisters.\r
219 */\r
220 /** @typedef hetBASE_t\r
221 *   @brief HET Register Frame Type Definition\r
222 *\r
223 *   This type is used to access the HET Registers.\r
224 */\r
225 \r
226 enum hetPinSelect\r
227 {\r
228     PIN_HET_0 = 0,\r
229     PIN_HET_1 = 1,\r
230     PIN_HET_2 = 2,\r
231     PIN_HET_3 = 3,\r
232     PIN_HET_4 = 4,\r
233     PIN_HET_5 = 5,\r
234     PIN_HET_6 = 6,\r
235     PIN_HET_7 = 7,\r
236     PIN_HET_8 = 8,\r
237     PIN_HET_9 = 9,\r
238     PIN_HET_10 = 10,\r
239     PIN_HET_11 = 11,\r
240     PIN_HET_12 = 12,\r
241     PIN_HET_13 = 13,\r
242     PIN_HET_14 = 14,\r
243     PIN_HET_15 = 15,\r
244     PIN_HET_16 = 16,\r
245     PIN_HET_17 = 17,\r
246     PIN_HET_18 = 18,\r
247     PIN_HET_19 = 19,\r
248     PIN_HET_20 = 20,\r
249     PIN_HET_21 = 21,\r
250     PIN_HET_22 = 22,\r
251     PIN_HET_23 = 23,\r
252     PIN_HET_24 = 24,\r
253     PIN_HET_25 = 25,\r
254     PIN_HET_26 = 26,\r
255     PIN_HET_27 = 27,\r
256     PIN_HET_28 = 28,\r
257     PIN_HET_29 = 29,\r
258     PIN_HET_30 = 30,\r
259     PIN_HET_31 = 31\r
260 };\r
261 \r
262 /** @struct hetBase\r
263 *   @brief HET Base Register Definition\r
264 *\r
265 *   This structure is used to access the HET module egisters.\r
266 */\r
267 /** @typedef hetBASE_t\r
268 *   @brief HET Register Frame Type Definition\r
269 *\r
270 *   This type is used to access the HET Registers.\r
271 */\r
272 \r
273 typedef volatile struct hetBase\r
274 {\r
275     uint32_t GCR;     /**< 0x0000: Global control register              */\r
276     uint32_t PFR;     /**< 0x0004: Prescale factor register             */\r
277     uint32_t ADDR;    /**< 0x0008: Current address register             */\r
278     uint32_t OFF1;    /**< 0x000C: Interrupt offset register 1          */\r
279     uint32_t OFF2;    /**< 0x0010: Interrupt offset register 2          */\r
280     uint32_t INTENAS; /**< 0x0014: Interrupt enable set register        */\r
281     uint32_t INTENAC; /**< 0x0018: Interrupt enable clear register      */\r
282     uint32_t EXC1;    /**< 0x001C: Exeption control register 1          */\r
283     uint32_t EXC2;    /**< 0x0020: Exeption control register 2          */\r
284     uint32_t PRY;     /**< 0x0024: Interrupt priority register          */\r
285     uint32_t FLG;     /**< 0x0028: Interrupt flag register              */\r
286     uint32_t AND;     /**< 0x002C: AND share control register         */\r
287     uint32_t : 32U;   /**< 0x0030: Reserved                             */\r
288     uint32_t HRSH;    /**< 0x0034: High resoltion share register        */\r
289     uint32_t XOR;     /**< 0x0038: XOR share register                   */\r
290     uint32_t REQENS;  /**< 0x003C: Request enable set register          */\r
291     uint32_t REQENC;  /**< 0x0040: Request enable clear register        */\r
292     uint32_t REQDS;   /**< 0x0044: Request destination select register  */\r
293     uint32_t : 32U;   /**< 0x0048: Reserved                             */\r
294     uint32_t DIR;     /**< 0x004C: Direction register                   */\r
295     uint32_t DIN;     /**< 0x0050: Data input register                  */\r
296     uint32_t DOUT;    /**< 0x0054: Data output register                 */\r
297     uint32_t DSET;    /**< 0x0058: Data output set register             */\r
298     uint32_t DCLR;    /**< 0x005C: Data output clear register           */\r
299     uint32_t PDR;     /**< 0x0060: Open drain register                  */\r
300     uint32_t PULDIS;  /**< 0x0064: Pull disable register                */\r
301     uint32_t PSL;     /**< 0x0068: Pull select register                 */\r
302     uint32_t : 32U;   /**< 0x006C: Reserved                             */\r
303     uint32_t : 32U;   /**< 0x0070: Reserved                             */\r
304     uint32_t PCREG;   /**< 0x0074: Parity control register              */\r
305     uint32_t PAR;     /**< 0x0078: Parity address register              */\r
306     uint32_t PPR;     /**< 0x007C: Parity pin select register           */\r
307     uint32_t SFPRLD;  /**< 0x0080: Suppression filter preload register  */\r
308     uint32_t SFENA;   /**< 0x0084: Suppression filter enable register   */\r
309     uint32_t : 32U;   /**< 0x0088: Reserved                             */\r
310     uint32_t LBPSEL;  /**< 0x008C: Loop back pair select register       */\r
311     uint32_t LBPDIR;  /**< 0x0090: Loop back pair direction register    */\r
312     uint32_t PINDIS;  /**< 0x0094: Pin disable register                 */\r
313     uint32_t : 32U;   /**< 0x0098: Reserved                             */\r
314     uint32_t HWAPINSEL;/**< 0x009C: HWAG Pin select register            */\r
315     uint32_t HWAGCR0;  /**< 0x00A0: HWAG Global control register 0      */\r
316     uint32_t HWAGCR1;  /**< 0x00A4: HWAG Global control register 1      */\r
317     uint32_t HWAGCR2;  /**< 0x00A8: HWAG Global control register 2      */\r
318     uint32_t HWAENASET;/**< 0x00AC: HWAG Interrupt enable set register  */\r
319     uint32_t HWAENACLR;/**< 0x00B0: HWAG Interrupt enable clear register*/\r
320     uint32_t HWALVLSET;/**< 0x00B4: HWAG Interrupt level set register   */\r
321     uint32_t HWALVLCLR;/**< 0x00B8: HWAG Interrupt level clear register */\r
322     uint32_t HWAFLG;   /**< 0x00BC: HWAG Interrupt flag register        */\r
323     uint32_t HWAOFF1;  /**< 0x00C0: HWAG Interrupt offset 1 register    */\r
324     uint32_t HWAOFF2;  /**< 0x00C4: HWAG Interrupt offset 2 register    */\r
325     uint32_t HWAACNT;  /**< 0x00C8: HWAG Angle value register           */\r
326     uint32_t HWAPCNT1; /**< 0x00CC: HWAG Period value register 1        */\r
327     uint32_t HWAPCNT;  /**< 0x00D0: HWAG Period value register          */\r
328     uint32_t HWASTWD;  /**< 0x00D4: HWAG Step width register            */\r
329     uint32_t HWATHNB;  /**< 0x00D8: HWAG Teeth number register          */\r
330     uint32_t HWATHVL;  /**< 0x00DC: HWAG Teeth Value register           */\r
331     uint32_t HWAFIL;   /**< 0x00E0: HWAG Filter register                */\r
332     uint32_t : 32U;    /**< 0x00E4: Reserved                            */\r
333     uint32_t HWAFIL2;  /**< 0x00E8: HWAG Second filter register         */\r
334     uint32_t : 32U;    /**< 0x00EC: Reserved                            */\r
335     uint32_t HWAANGI;  /**< 0x00F0: HWAG Angle increment register       */\r
336 } hetBASE_t;\r
337 \r
338 \r
339 /** @def hetREG1\r
340 *   @brief HET Register Frame Pointer\r
341 *\r
342 *   This pointer is used by the HET driver to access the het module registers.\r
343 */\r
344 #define hetREG1 ((hetBASE_t *)0xFFF7B800U)\r
345 \r
346 \r
347 /** @def hetPORT1\r
348 *   @brief HET GIO Port Register Pointer\r
349 *\r
350 *   Pointer used by the GIO driver to access I/O PORT of HET1\r
351 *   (use the GIO drivers to access the port pins).\r
352 */\r
353 #define hetPORT1 ((gioPORT_t *)0xFFF7B84CU)\r
354 \r
355 \r
356 /** @def hetREG2\r
357 *   @brief HET2 Register Frame Pointer\r
358 *\r
359 *   This pointer is used by the HET driver to access the het module registers.\r
360 */\r
361 #define hetREG2 ((hetBASE_t *)0xFFF7B900U)\r
362 \r
363 \r
364 /** @def hetPORT2\r
365 *   @brief HET2 GIO Port Register Pointer\r
366 *\r
367 *   Pointer used by the GIO driver to access I/O PORT of HET2\r
368 *   (use the GIO drivers to access the port pins).\r
369 */\r
370 #define hetPORT2 ((gioPORT_t *)0xFFF7B94CU)\r
371 \r
372 \r
373 \r
374 /** @struct hetInstructionBase\r
375 *   @brief HET Instruction Definition\r
376 *\r
377 *   This structure is used to access the HET RAM.\r
378 */\r
379 /** @typedef hetINSTRUCTION_t\r
380 *   @brief HET Instruction Type Definition\r
381 *\r
382 *   This type is used to access a HET Instruction.\r
383 */\r
384 typedef volatile struct hetInstructionBase\r
385 {\r
386     uint32_t Program;\r
387     uint32_t Control;\r
388     uint32_t Data;\r
389     uint32_t : 32U;\r
390 } hetINSTRUCTION_t;\r
391 \r
392 \r
393 /** @struct hetRamBase\r
394 *   @brief HET RAM Definition\r
395 *\r
396 *   This structure is used to access the HET RAM.\r
397 */\r
398 /** @typedef hetRAMBASE_t\r
399 *   @brief HET RAM Type Definition\r
400 *\r
401 *   This type is used to access the HET RAM.\r
402 */\r
403 typedef volatile struct het1RamBase\r
404 {\r
405     hetINSTRUCTION_t Instruction[160U];\r
406 } hetRAMBASE_t;\r
407 \r
408 \r
409 #define hetRAM1 ((hetRAMBASE_t *)0xFF460000U)\r
410 \r
411 #define hetRAM2 ((hetRAMBASE_t *)0xFF440000U)\r
412 \r
413 #define NHET1RAMPARLOC  (*(unsigned int *)0xFF462000U)\r
414 #define NHET1RAMLOC             (*(unsigned int *)0xFF460000U)\r
415 \r
416 #define NHET2RAMPARLOC  (*(unsigned int *)0xFF442000U)\r
417 #define NHET2RAMLOC             (*(unsigned int *)0xFF440000U)\r
418 \r
419 /** @struct hetSignal\r
420 *   @brief HET Signal Definition\r
421 *\r
422 *   This structure is used to define a pwm signal.\r
423 */\r
424 /** @typedef hetSIGNAL_t\r
425 *   @brief HET Signal Type Definition\r
426 *\r
427 *   This type is used to access HET Signal Information.\r
428 */\r
429 typedef struct hetSignal\r
430 {\r
431         uint32_t duty;   /**< Duty cycle in % of the period  */\r
432         double   period; /**< Period in us                   */\r
433 } hetSIGNAL_t;\r
434 \r
435 \r
436 /* HET Interface Functions */\r
437 void hetInit(void);\r
438 \r
439 /* PWM Interface Functions */\r
440 void        pwmStart(hetRAMBASE_t * hetRAM,uint32_t pwm);\r
441 void        pwmStop(hetRAMBASE_t * hetRAM,uint32_t pwm);\r
442 void        pwmSetDuty(hetRAMBASE_t * hetRAM,uint32_t pwm, uint32_t duty);\r
443 void        pwmSetSignal(hetRAMBASE_t * hetRAM,uint32_t pwm, hetSIGNAL_t signal);\r
444 hetSIGNAL_t pwmGetSignal(hetRAMBASE_t * hetRAM,uint32_t pwm);\r
445 void        pwmEnableNotification(hetBASE_t * hetREG,uint32_t pwm, uint32_t notification);\r
446 void        pwmDisableNotification(hetBASE_t * hetREG,uint32_t pwm, uint32_t notification);\r
447 void        pwmNotification(hetBASE_t * hetREG,uint32_t pwm, uint32_t notification);\r
448 \r
449 /* Edge Interface Functions */\r
450 void     edgeResetCounter(hetRAMBASE_t * hetRAM,uint32_t edge);\r
451 uint32_t edgeGetCounter(hetRAMBASE_t * hetRAM,uint32_t edge);\r
452 void     edgeEnableNotification(hetBASE_t * hetREG,uint32_t edge);\r
453 void     edgeDisableNotification(hetBASE_t * hetREG,uint32_t edge);\r
454 void     edgeNotification(hetBASE_t * hetREG,uint32_t edge);\r
455 \r
456 /* Captured Signal Interface Functions */\r
457 hetSIGNAL_t capGetSignal(hetRAMBASE_t * hetRAM,uint32_t cap);\r
458 \r
459 /* Timestamp Interface Functions */\r
460 void     hetResetTimestamp(hetRAMBASE_t * hetRAM);\r
461 uint32_t hetGetTimestamp(hetRAMBASE_t * hetRAM);\r
462 \r
463 /** @fn void hetNotification(hetBASE_t *het, uint32_t offset)\r
464 *   @brief het interrupt callback\r
465 *   @param[in] het - Het module base address\r
466 *              - hetREG1: HET1 module base address pointer\r
467 *              - hetREG2: HET2 module base address pointer\r
468 *   @param[in] offset - het interrupt offset / Source number\r
469 *\r
470 *   @note This function has to be provide by the user.\r
471 *\r
472 * This is a interrupt callback that is provided by the application and is call upon\r
473 * an het interrupt.  The paramer passed to the callback is a copy of the interrupt \r
474 * offset register which is used to decode the interrupt source.\r
475 */\r
476 void hetNotification(hetBASE_t *het, uint32_t offset);\r
477 \r
478 /* USER CODE BEGIN (3) */\r
479 /* USER CODE END */\r
480 \r
481 #endif\r