]> git.sur5r.net Git - freertos/blob - Demo/AVR32_UC3/DRIVERS/TC/tc.h
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / AVR32_UC3 / DRIVERS / TC / tc.h
1 /*This file is prepared for Doxygen automatic documentation generation.*/\r
2 /*! \file *********************************************************************\r
3  *\r
4  * \brief Timer/Counter driver for AVR32 UC3.\r
5  *\r
6  * AVR32 Timer/Counter driver module.\r
7  *\r
8  * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32\r
9  * - Supported devices:  All AVR32 devices with a TC module can be used.\r
10  * - AppNote:\r
11  *\r
12  * \author               Atmel Corporation: http://www.atmel.com \n\r
13  *                       Support and FAQ: http://support.atmel.no/\r
14  *\r
15  ******************************************************************************/\r
16 \r
17 /* Copyright (c) 2007, Atmel Corporation All rights reserved.\r
18  *\r
19  * Redistribution and use in source and binary forms, with or without\r
20  * modification, are permitted provided that the following conditions are met:\r
21  *\r
22  * 1. Redistributions of source code must retain the above copyright notice,\r
23  * this list of conditions and the following disclaimer.\r
24  *\r
25  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
26  * this list of conditions and the following disclaimer in the documentation\r
27  * and/or other materials provided with the distribution.\r
28  *\r
29  * 3. The name of ATMEL may not be used to endorse or promote products derived\r
30  * from this software without specific prior written permission.\r
31  *\r
32  * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
33  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
34  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND\r
35  * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,\r
36  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
37  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
38  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
39  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
40  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
41  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
42  */\r
43 \r
44 \r
45 #ifndef _TC_H_\r
46 #define _TC_H_\r
47 \r
48 #include <avr32/io.h>\r
49 \r
50 \r
51 //! TC driver functions return value in case of invalid argument(s).\r
52 #define TC_INVALID_ARGUMENT                     (-1)\r
53 \r
54 //! Number of timer/counter channels.\r
55 #define TC_NUMBER_OF_CHANNELS                   (sizeof(((avr32_tc_t *)0)->channel) / sizeof(avr32_tc_channel_t))\r
56 \r
57 /*! \name External Clock Signal 0 Selection\r
58  */\r
59 //! @{\r
60 #define TC_CH0_EXT_CLK0_SRC_TCLK0               AVR32_TC_TC0XC0S_TCLK0\r
61 #define TC_CH0_EXT_CLK0_SRC_NO_CLK              AVR32_TC_TC0XC0S_NO_CLK\r
62 #define TC_CH0_EXT_CLK0_SRC_TIOA1               AVR32_TC_TC0XC0S_TIOA1\r
63 #define TC_CH0_EXT_CLK0_SRC_TIOA2               AVR32_TC_TC0XC0S_TIOA2\r
64 //! @}\r
65 \r
66 /*! \name External Clock Signal 1 Selection\r
67  */\r
68 //! @{\r
69 #define TC_CH1_EXT_CLK1_SRC_TCLK1               AVR32_TC_TC1XC1S_TCLK1\r
70 #define TC_CH1_EXT_CLK1_SRC_NO_CLK              AVR32_TC_TC1XC1S_NO_CLK\r
71 #define TC_CH1_EXT_CLK1_SRC_TIOA0               AVR32_TC_TC1XC1S_TIOA0\r
72 #define TC_CH1_EXT_CLK1_SRC_TIOA2               AVR32_TC_TC1XC1S_TIOA2\r
73 //! @}\r
74 \r
75 /*! \name External Clock Signal 2 Selection\r
76  */\r
77 //! @{\r
78 #define TC_CH2_EXT_CLK2_SRC_TCLK2               AVR32_TC_TC2XC2S_TCLK2\r
79 #define TC_CH2_EXT_CLK2_SRC_NO_CLK              AVR32_TC_TC2XC2S_NO_CLK\r
80 #define TC_CH2_EXT_CLK2_SRC_TIOA0               AVR32_TC_TC2XC2S_TIOA0\r
81 #define TC_CH2_EXT_CLK2_SRC_TIOA1               AVR32_TC_TC2XC2S_TIOA1\r
82 //! @}\r
83 \r
84 /*! \name Event/Trigger Actions on Output\r
85  */\r
86 //! @{\r
87 #define TC_EVT_EFFECT_NOOP                      AVR32_TC_NONE\r
88 #define TC_EVT_EFFECT_SET                       AVR32_TC_SET\r
89 #define TC_EVT_EFFECT_CLEAR                     AVR32_TC_CLEAR\r
90 #define TC_EVT_EFFECT_TOGGLE                    AVR32_TC_TOGGLE\r
91 //! @}\r
92 \r
93 /*! \name RC Compare Trigger Enable\r
94  */\r
95 //! @{\r
96 #define TC_NO_TRIGGER_COMPARE_RC                0\r
97 #define TC_TRIGGER_COMPARE_RC                   1\r
98 //! @}\r
99 \r
100 /*! \name Waveform Selection\r
101  */\r
102 //! @{\r
103 #define TC_WAVEFORM_SEL_UP_MODE                 AVR32_TC_WAVSEL_UP_NO_AUTO\r
104 #define TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER      AVR32_TC_WAVSEL_UP_AUTO\r
105 #define TC_WAVEFORM_SEL_UPDOWN_MODE             AVR32_TC_WAVSEL_UPDOWN_NO_AUTO\r
106 #define TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER  AVR32_TC_WAVSEL_UPDOWN_AUTO\r
107 //! @}\r
108 \r
109 /*! \name TIOA or TIOB External Trigger Selection\r
110  */\r
111 //! @{\r
112 #define TC_EXT_TRIG_SEL_TIOA                    1\r
113 #define TC_EXT_TRIG_SEL_TIOB                    0\r
114 //! @}\r
115 \r
116 /*! \name External Event Selection\r
117  */\r
118 //! @{\r
119 #define TC_EXT_EVENT_SEL_TIOB_INPUT             AVR32_TC_EEVT_TIOB_INPUT\r
120 #define TC_EXT_EVENT_SEL_XC0_OUTPUT             AVR32_TC_EEVT_XC0_OUTPUT\r
121 #define TC_EXT_EVENT_SEL_XC1_OUTPUT             AVR32_TC_EEVT_XC1_OUTPUT\r
122 #define TC_EXT_EVENT_SEL_XC2_OUTPUT             AVR32_TC_EEVT_XC2_OUTPUT\r
123 //! @}\r
124 \r
125 /*! \name Edge Selection\r
126  */\r
127 //! @{\r
128 #define TC_SEL_NO_EDGE                          AVR32_TC_EEVTEDG_NO_EDGE\r
129 #define TC_SEL_RISING_EDGE                      AVR32_TC_EEVTEDG_POS_EDGE\r
130 #define TC_SEL_FALLING_EDGE                     AVR32_TC_EEVTEDG_NEG_EDGE\r
131 #define TC_SEL_EACH_EDGE                        AVR32_TC_EEVTEDG_BOTH_EDGES\r
132 //! @}\r
133 \r
134 /*! \name Burst Signal Selection\r
135  */\r
136 //! @{\r
137 #define TC_BURST_NOT_GATED                      AVR32_TC_BURST_NOT_GATED\r
138 #define TC_BURST_CLK_AND_XC0                    AVR32_TC_BURST_CLK_AND_XC0\r
139 #define TC_BURST_CLK_AND_XC1                    AVR32_TC_BURST_CLK_AND_XC1\r
140 #define TC_BURST_CLK_AND_XC2                    AVR32_TC_BURST_CLK_AND_XC2\r
141 //! @}\r
142 \r
143 /*! \name Clock Invert\r
144  */\r
145 //! @{\r
146 #define TC_CLOCK_RISING_EDGE                    0\r
147 #define TC_CLOCK_FALLING_EDGE                   1\r
148 //! @}\r
149 \r
150 /*! \name Clock Selection\r
151  */\r
152 //! @{\r
153 #define TC_CLOCK_SOURCE_TC1                     AVR32_TC_TCCLKS_TIMER_DIV1_CLOCK\r
154 #define TC_CLOCK_SOURCE_TC2                     AVR32_TC_TCCLKS_TIMER_DIV2_CLOCK\r
155 #define TC_CLOCK_SOURCE_TC3                     AVR32_TC_TCCLKS_TIMER_DIV3_CLOCK\r
156 #define TC_CLOCK_SOURCE_TC4                     AVR32_TC_TCCLKS_TIMER_DIV4_CLOCK\r
157 #define TC_CLOCK_SOURCE_TC5                     AVR32_TC_TCCLKS_TIMER_DIV5_CLOCK\r
158 #define TC_CLOCK_SOURCE_XC0                     AVR32_TC_TCCLKS_XC0\r
159 #define TC_CLOCK_SOURCE_XC1                     AVR32_TC_TCCLKS_XC1\r
160 #define TC_CLOCK_SOURCE_XC2                     AVR32_TC_TCCLKS_XC2\r
161 //! @}\r
162 \r
163 \r
164 //! Timer/counter interrupts.\r
165 typedef struct\r
166 {\r
167   unsigned int                 :24;\r
168 \r
169   //! External trigger interrupt.\r
170   unsigned int etrgs           : 1;\r
171 \r
172   //! RB load interrupt.\r
173   unsigned int ldrbs           : 1;\r
174 \r
175   //! RA load interrupt.\r
176   unsigned int ldras           : 1;\r
177 \r
178   //! RC compare interrupt.\r
179   unsigned int cpcs            : 1;\r
180 \r
181   //! RB compare interrupt.\r
182   unsigned int cpbs            : 1;\r
183 \r
184   //! RA compare interrupt.\r
185   unsigned int cpas            : 1;\r
186 \r
187   //! Load overrun interrupt.\r
188   unsigned int lovrs           : 1;\r
189 \r
190   //! Counter overflow interrupt.\r
191   unsigned int covfs           : 1;\r
192 } tc_interrupt_t;\r
193 \r
194 //! Parameters when initializing a timer/counter in capture mode.\r
195 typedef struct\r
196 {\r
197   //! Channel to initialize.\r
198   unsigned int channel            ;\r
199 \r
200   unsigned int                 :12;\r
201 \r
202   //! RB loading selection:\n\r
203   //!   - \ref TC_SEL_NO_EDGE;\n\r
204   //!   - \ref TC_SEL_RISING_EDGE;\n\r
205   //!   - \ref TC_SEL_FALLING_EDGE;\n\r
206   //!   - \ref TC_SEL_EACH_EDGE.\r
207   unsigned int ldrb            : 2;\r
208 \r
209   //! RA loading selection:\n\r
210   //!   - \ref TC_SEL_NO_EDGE;\n\r
211   //!   - \ref TC_SEL_RISING_EDGE;\n\r
212   //!   - \ref TC_SEL_FALLING_EDGE;\n\r
213   //!   - \ref TC_SEL_EACH_EDGE.\r
214   unsigned int ldra            : 2;\r
215 \r
216   unsigned int                 : 1;\r
217 \r
218   //! RC compare trigger enable:\n\r
219   //!   - \ref TC_NO_TRIGGER_COMPARE_RC;\n\r
220   //!   - \ref TC_TRIGGER_COMPARE_RC.\r
221   unsigned int cpctrg          : 1;\r
222 \r
223   unsigned int                 : 3;\r
224 \r
225   //! TIOA or TIOB external trigger selection:\n\r
226   //!   - \ref TC_EXT_TRIG_SEL_TIOA;\n\r
227   //!   - \ref TC_EXT_TRIG_SEL_TIOB.\r
228   unsigned int abetrg          : 1;\r
229 \r
230   //! External trigger edge selection:\n\r
231   //!   - \ref TC_SEL_NO_EDGE;\n\r
232   //!   - \ref TC_SEL_RISING_EDGE;\n\r
233   //!   - \ref TC_SEL_FALLING_EDGE;\n\r
234   //!   - \ref TC_SEL_EACH_EDGE.\r
235   unsigned int etrgedg         : 2;\r
236 \r
237   //! Counter clock disable with RB loading:\n\r
238   //!   - \c FALSE;\n\r
239   //!   - \c TRUE.\r
240   unsigned int ldbdis          : 1;\r
241 \r
242   //! Counter clock stopped with RB loading:\n\r
243   //!   - \c FALSE;\n\r
244   //!   - \c TRUE.\r
245   unsigned int ldbstop         : 1;\r
246 \r
247   //! Burst signal selection:\n\r
248   //!   - \ref TC_BURST_NOT_GATED;\n\r
249   //!   - \ref TC_BURST_CLK_AND_XC0;\n\r
250   //!   - \ref TC_BURST_CLK_AND_XC1;\n\r
251   //!   - \ref TC_BURST_CLK_AND_XC2.\r
252   unsigned int burst           : 2;\r
253 \r
254   //! Clock invert:\n\r
255   //!   - \ref TC_CLOCK_RISING_EDGE;\n\r
256   //!   - \ref TC_CLOCK_FALLING_EDGE.\r
257   unsigned int clki            : 1;\r
258 \r
259   //! Clock selection:\n\r
260   //!   - \ref TC_CLOCK_SOURCE_TC1;\n\r
261   //!   - \ref TC_CLOCK_SOURCE_TC2;\n\r
262   //!   - \ref TC_CLOCK_SOURCE_TC3;\n\r
263   //!   - \ref TC_CLOCK_SOURCE_TC4;\n\r
264   //!   - \ref TC_CLOCK_SOURCE_TC5;\n\r
265   //!   - \ref TC_CLOCK_SOURCE_XC0;\n\r
266   //!   - \ref TC_CLOCK_SOURCE_XC1;\n\r
267   //!   - \ref TC_CLOCK_SOURCE_XC2.\r
268   unsigned int tcclks          : 3;\r
269 } tc_capture_opt_t;\r
270 \r
271 //! Parameters when initializing a timer/counter in waveform mode.\r
272 typedef struct\r
273 {\r
274   //! Channel to initialize.\r
275   unsigned int channel            ;\r
276 \r
277   //! Software trigger effect on TIOB:\n\r
278   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
279   //!   - \ref TC_EVT_EFFECT_SET;\n\r
280   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
281   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
282   unsigned int bswtrg          : 2;\r
283 \r
284   //! External event effect on TIOB:\n\r
285   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
286   //!   - \ref TC_EVT_EFFECT_SET;\n\r
287   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
288   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
289   unsigned int beevt           : 2;\r
290 \r
291   //! RC compare effect on TIOB:\n\r
292   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
293   //!   - \ref TC_EVT_EFFECT_SET;\n\r
294   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
295   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
296   unsigned int bcpc            : 2;\r
297 \r
298   //! RB compare effect on TIOB:\n\r
299   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
300   //!   - \ref TC_EVT_EFFECT_SET;\n\r
301   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
302   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
303   unsigned int bcpb            : 2;\r
304 \r
305   //! Software trigger effect on TIOA:\n\r
306   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
307   //!   - \ref TC_EVT_EFFECT_SET;\n\r
308   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
309   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
310   unsigned int aswtrg          : 2;\r
311 \r
312   //! External event effect on TIOA:\n\r
313   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
314   //!   - \ref TC_EVT_EFFECT_SET;\n\r
315   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
316   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
317   unsigned int aeevt           : 2;\r
318 \r
319   //! RC compare effect on TIOA:\n\r
320   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
321   //!   - \ref TC_EVT_EFFECT_SET;\n\r
322   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
323   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
324   unsigned int acpc            : 2;\r
325 \r
326   //! RA compare effect on TIOA:\n\r
327   //!   - \ref TC_EVT_EFFECT_NOOP;\n\r
328   //!   - \ref TC_EVT_EFFECT_SET;\n\r
329   //!   - \ref TC_EVT_EFFECT_CLEAR;\n\r
330   //!   - \ref TC_EVT_EFFECT_TOGGLE.\r
331   unsigned int acpa            : 2;\r
332 \r
333   unsigned int                 : 1;\r
334 \r
335   //! Waveform selection:\n\r
336   //!   - \ref TC_WAVEFORM_SEL_UP_MODE;\n\r
337   //!   - \ref TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER;\n\r
338   //!   - \ref TC_WAVEFORM_SEL_UPDOWN_MODE;\n\r
339   //!   - \ref TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER.\r
340   unsigned int wavsel          : 2;\r
341 \r
342   //! External event trigger enable:\n\r
343   //!   - \c FALSE;\n\r
344   //!   - \c TRUE.\r
345   unsigned int enetrg          : 1;\r
346 \r
347   //! External event selection:\n\r
348   //!   - \ref TC_EXT_EVENT_SEL_TIOB_INPUT;\n\r
349   //!   - \ref TC_EXT_EVENT_SEL_XC0_OUTPUT;\n\r
350   //!   - \ref TC_EXT_EVENT_SEL_XC1_OUTPUT;\n\r
351   //!   - \ref TC_EXT_EVENT_SEL_XC2_OUTPUT.\r
352   unsigned int eevt            : 2;\r
353 \r
354   //! External event edge selection:\n\r
355   //!   - \ref TC_SEL_NO_EDGE;\n\r
356   //!   - \ref TC_SEL_RISING_EDGE;\n\r
357   //!   - \ref TC_SEL_FALLING_EDGE;\n\r
358   //!   - \ref TC_SEL_EACH_EDGE.\r
359   unsigned int eevtedg         : 2;\r
360 \r
361   //! Counter clock disable with RC compare:\n\r
362   //!   - \c FALSE;\n\r
363   //!   - \c TRUE.\r
364   unsigned int cpcdis          : 1;\r
365 \r
366   //! Counter clock stopped with RC compare:\n\r
367   //!   - \c FALSE;\n\r
368   //!   - \c TRUE.\r
369   unsigned int cpcstop         : 1;\r
370 \r
371   //! Burst signal selection:\n\r
372   //!   - \ref TC_BURST_NOT_GATED;\n\r
373   //!   - \ref TC_BURST_CLK_AND_XC0;\n\r
374   //!   - \ref TC_BURST_CLK_AND_XC1;\n\r
375   //!   - \ref TC_BURST_CLK_AND_XC2.\r
376   unsigned int burst           : 2;\r
377 \r
378   //! Clock invert:\n\r
379   //!   - \ref TC_CLOCK_RISING_EDGE;\n\r
380   //!   - \ref TC_CLOCK_FALLING_EDGE.\r
381   unsigned int clki            : 1;\r
382 \r
383   //! Clock selection:\n\r
384   //!   - \ref TC_CLOCK_SOURCE_TC1;\n\r
385   //!   - \ref TC_CLOCK_SOURCE_TC2;\n\r
386   //!   - \ref TC_CLOCK_SOURCE_TC3;\n\r
387   //!   - \ref TC_CLOCK_SOURCE_TC4;\n\r
388   //!   - \ref TC_CLOCK_SOURCE_TC5;\n\r
389   //!   - \ref TC_CLOCK_SOURCE_XC0;\n\r
390   //!   - \ref TC_CLOCK_SOURCE_XC1;\n\r
391   //!   - \ref TC_CLOCK_SOURCE_XC2.\r
392   unsigned int tcclks          : 3;\r
393 } tc_waveform_opt_t;\r
394 \r
395 \r
396 /*! \brief Reads timer/counter interrupt settings.\r
397  *\r
398  * \param tc              Pointer to the TC instance to access.\r
399  * \param channel         The TC instance channel to access.\r
400  *\r
401  * \retval >=0 The interrupt enable configuration organized according to \ref tc_interrupt_t.\r
402  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
403  */\r
404 extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel);\r
405 \r
406 /*! \brief Enables various timer/counter interrupts.\r
407  *\r
408  * \param tc              Pointer to the TC instance to access.\r
409  * \param channel         The TC instance channel to access.\r
410  * \param bitfield        The interrupt enable configuration.\r
411  *\r
412  * \retval 0 Success.\r
413  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
414  */\r
415 extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield);\r
416 \r
417 /*! \brief Selects which external clock to use and how to configure it.\r
418  *\r
419  * \param tc              Pointer to the TC instance to access.\r
420  * \param channel         The TC instance channel to access.\r
421  * \param ext_clk_sig_src External clock signal selection:\r
422  *   \arg \c TC_CH0_EXT_CLK0_SRC_TCLK0;\r
423  *   \arg \c TC_CH0_EXT_CLK0_SRC_NO_CLK;\r
424  *   \arg \c TC_CH0_EXT_CLK0_SRC_TIOA1;\r
425  *   \arg \c TC_CH0_EXT_CLK0_SRC_TIOA2;\r
426  *   \arg \c TC_CH1_EXT_CLK1_SRC_TCLK1;\r
427  *   \arg \c TC_CH1_EXT_CLK1_SRC_NO_CLK;\r
428  *   \arg \c TC_CH1_EXT_CLK1_SRC_TIOA0;\r
429  *   \arg \c TC_CH1_EXT_CLK1_SRC_TIOA2;\r
430  *   \arg \c TC_CH2_EXT_CLK2_SRC_TCLK2;\r
431  *   \arg \c TC_CH2_EXT_CLK2_SRC_NO_CLK;\r
432  *   \arg \c TC_CH2_EXT_CLK2_SRC_TIOA0;\r
433  *   \arg \c TC_CH2_EXT_CLK2_SRC_TIOA1.\r
434  *\r
435  * \retval 0 Success.\r
436  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
437  */\r
438 extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src);\r
439 \r
440 /*! \brief Sets options for timer/counter capture initialization.\r
441  *\r
442  * \param tc              Pointer to the TC instance to access.\r
443  * \param opt             Options for capture mode.\r
444  *\r
445  * \retval 0 Success.\r
446  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
447  */\r
448 extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt);\r
449 \r
450 /*! \brief Sets options for timer/counter waveform initialization.\r
451  *\r
452  * \param tc              Pointer to the TC instance to access.\r
453  * \param opt             Options for waveform generation.\r
454  *\r
455  * \retval 0 Success.\r
456  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
457  */\r
458 extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt);\r
459 \r
460 /*! \brief Starts a timer/counter.\r
461  *\r
462  * \param tc              Pointer to the TC instance to access.\r
463  * \param channel         The TC instance channel to access.\r
464  *\r
465  * \retval 0 Success.\r
466  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
467  */\r
468 extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel);\r
469 \r
470 /*! \brief Stops a timer/counter.\r
471  *\r
472  * \param tc              Pointer to the TC instance to access.\r
473  * \param channel         The TC instance channel to access.\r
474  *\r
475  * \retval 0 Success.\r
476  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
477  */\r
478 extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel);\r
479 \r
480 /*! \brief Performs a software trigger: the counter is reset and the clock is started.\r
481  *\r
482  * \param tc              Pointer to the TC instance to access.\r
483  * \param channel         The TC instance channel to access.\r
484  *\r
485  * \retval 0 Success.\r
486  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
487  */\r
488 extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel);\r
489 \r
490 /*! \brief Asserts a SYNC signal to generate a software trigger and reset all channels.\r
491  *\r
492  * \param tc              Pointer to the TC instance to access.\r
493  */\r
494 extern void tc_sync_trigger(volatile avr32_tc_t *tc);\r
495 \r
496 /*! \brief Reads the status register.\r
497  *\r
498  * \param tc              Pointer to the TC instance to access.\r
499  * \param channel         The TC instance channel to access.\r
500  *\r
501  * \retval >=0 Status register value.\r
502  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
503  */\r
504 extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel);\r
505 \r
506 /*! \brief Reads the channel's TC counter and returns the value.\r
507  *\r
508  * \param tc              Pointer to the TC instance to access.\r
509  * \param channel         The TC instance channel to access.\r
510  *\r
511  * \retval >=0 TC counter value.\r
512  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
513  */\r
514 extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel);\r
515 \r
516 /*! \brief Reads the channel's RA register and returns the value.\r
517  *\r
518  * \param tc              Pointer to the TC instance to access.\r
519  * \param channel         The TC instance channel to access.\r
520  *\r
521  * \retval >=0 RA register value.\r
522  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
523  */\r
524 extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel);\r
525 \r
526 /*! \brief Reads the channel's RB register and returns the value.\r
527  *\r
528  * \param tc              Pointer to the TC instance to access.\r
529  * \param channel         The TC instance channel to access.\r
530  *\r
531  * \retval >=0 RB register value.\r
532  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
533  */\r
534 extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel);\r
535 \r
536 /*! \brief Reads the channel's RC register and returns the value.\r
537  *\r
538  * \param tc              Pointer to the TC instance to access.\r
539  * \param channel         The TC instance channel to access.\r
540  *\r
541  * \retval >=0 RC register value.\r
542  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
543  */\r
544 extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel);\r
545 \r
546 /*! \brief Writes a value to the channel's RA register.\r
547  *\r
548  * \param tc              Pointer to the TC instance to access.\r
549  * \param channel         The TC instance channel to access.\r
550  * \param value           Value to write to the RA register.\r
551  *\r
552  * \retval >=0 Written value.\r
553  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
554  */\r
555 extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);\r
556 \r
557 /*! \brief Writes a value to the channel's RB register.\r
558  *\r
559  * \param tc              Pointer to the TC instance to access.\r
560  * \param channel         The TC instance channel to access.\r
561  * \param value           Value to write to the RB register.\r
562  *\r
563  * \retval >=0 Written value.\r
564  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
565  */\r
566 extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);\r
567 \r
568 /*! \brief Writes a value to the channel's RC register.\r
569  *\r
570  * \param tc              Pointer to the TC instance to access.\r
571  * \param channel         The TC instance channel to access.\r
572  * \param value           Value to write to the RC register.\r
573  *\r
574  * \retval >=0 Written value.\r
575  * \retval TC_INVALID_ARGUMENT Invalid argument(s).\r
576  */\r
577 extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);\r
578 \r
579 \r
580 #endif  // _TC_H_\r