1 /*This file is prepared for Doxygen automatic documentation generation.*/
\r
2 /*! \file *********************************************************************
\r
4 * \brief Timer/Counter driver for AVR32 UC3.
\r
6 * AVR32 Timer/Counter driver module.
\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
12 * \author Atmel Corporation: http://www.atmel.com \n
\r
13 * Support and FAQ: http://support.atmel.no/
\r
15 ******************************************************************************/
\r
17 /* Copyright (c) 2007, Atmel Corporation All rights reserved.
\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
22 * 1. Redistributions of source code must retain the above copyright notice,
\r
23 * this list of conditions and the following disclaimer.
\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
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
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
48 #include <avr32/io.h>
\r
51 //! TC driver functions return value in case of invalid argument(s).
\r
52 #define TC_INVALID_ARGUMENT (-1)
\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
57 /*! \name External Clock Signal 0 Selection
\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
66 /*! \name External Clock Signal 1 Selection
\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
75 /*! \name External Clock Signal 2 Selection
\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
84 /*! \name Event/Trigger Actions on Output
\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
93 /*! \name RC Compare Trigger Enable
\r
96 #define TC_NO_TRIGGER_COMPARE_RC 0
\r
97 #define TC_TRIGGER_COMPARE_RC 1
\r
100 /*! \name Waveform Selection
\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
109 /*! \name TIOA or TIOB External Trigger Selection
\r
112 #define TC_EXT_TRIG_SEL_TIOA 1
\r
113 #define TC_EXT_TRIG_SEL_TIOB 0
\r
116 /*! \name External Event Selection
\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
125 /*! \name Edge Selection
\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
134 /*! \name Burst Signal Selection
\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
143 /*! \name Clock Invert
\r
146 #define TC_CLOCK_RISING_EDGE 0
\r
147 #define TC_CLOCK_FALLING_EDGE 1
\r
150 /*! \name Clock Selection
\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
164 //! Timer/counter interrupts.
\r
169 //! External trigger interrupt.
\r
170 unsigned int etrgs : 1;
\r
172 //! RB load interrupt.
\r
173 unsigned int ldrbs : 1;
\r
175 //! RA load interrupt.
\r
176 unsigned int ldras : 1;
\r
178 //! RC compare interrupt.
\r
179 unsigned int cpcs : 1;
\r
181 //! RB compare interrupt.
\r
182 unsigned int cpbs : 1;
\r
184 //! RA compare interrupt.
\r
185 unsigned int cpas : 1;
\r
187 //! Load overrun interrupt.
\r
188 unsigned int lovrs : 1;
\r
190 //! Counter overflow interrupt.
\r
191 unsigned int covfs : 1;
\r
194 //! Parameters when initializing a timer/counter in capture mode.
\r
197 //! Channel to initialize.
\r
198 unsigned int channel ;
\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
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
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
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
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
237 //! Counter clock disable with RB loading:\n
\r
240 unsigned int ldbdis : 1;
\r
242 //! Counter clock stopped with RB loading:\n
\r
245 unsigned int ldbstop : 1;
\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
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
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
271 //! Parameters when initializing a timer/counter in waveform mode.
\r
274 //! Channel to initialize.
\r
275 unsigned int channel ;
\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
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
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
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
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
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
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
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
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
342 //! External event trigger enable:\n
\r
345 unsigned int enetrg : 1;
\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
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
361 //! Counter clock disable with RC compare:\n
\r
364 unsigned int cpcdis : 1;
\r
366 //! Counter clock stopped with RC compare:\n
\r
369 unsigned int cpcstop : 1;
\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
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
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
396 /*! \brief Reads timer/counter interrupt settings.
\r
398 * \param tc Pointer to the TC instance to access.
\r
399 * \param channel The TC instance channel to access.
\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
404 extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel);
\r
406 /*! \brief Enables various timer/counter interrupts.
\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
412 * \retval 0 Success.
\r
413 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
415 extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield);
\r
417 /*! \brief Selects which external clock to use and how to configure it.
\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
435 * \retval 0 Success.
\r
436 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
438 extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src);
\r
440 /*! \brief Sets options for timer/counter capture initialization.
\r
442 * \param tc Pointer to the TC instance to access.
\r
443 * \param opt Options for capture mode.
\r
445 * \retval 0 Success.
\r
446 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
448 extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt);
\r
450 /*! \brief Sets options for timer/counter waveform initialization.
\r
452 * \param tc Pointer to the TC instance to access.
\r
453 * \param opt Options for waveform generation.
\r
455 * \retval 0 Success.
\r
456 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
458 extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt);
\r
460 /*! \brief Starts a timer/counter.
\r
462 * \param tc Pointer to the TC instance to access.
\r
463 * \param channel The TC instance channel to access.
\r
465 * \retval 0 Success.
\r
466 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
468 extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel);
\r
470 /*! \brief Stops a timer/counter.
\r
472 * \param tc Pointer to the TC instance to access.
\r
473 * \param channel The TC instance channel to access.
\r
475 * \retval 0 Success.
\r
476 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
478 extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel);
\r
480 /*! \brief Performs a software trigger: the counter is reset and the clock is started.
\r
482 * \param tc Pointer to the TC instance to access.
\r
483 * \param channel The TC instance channel to access.
\r
485 * \retval 0 Success.
\r
486 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
488 extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel);
\r
490 /*! \brief Asserts a SYNC signal to generate a software trigger and reset all channels.
\r
492 * \param tc Pointer to the TC instance to access.
\r
494 extern void tc_sync_trigger(volatile avr32_tc_t *tc);
\r
496 /*! \brief Reads the status register.
\r
498 * \param tc Pointer to the TC instance to access.
\r
499 * \param channel The TC instance channel to access.
\r
501 * \retval >=0 Status register value.
\r
502 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
504 extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel);
\r
506 /*! \brief Reads the channel's TC counter and returns the value.
\r
508 * \param tc Pointer to the TC instance to access.
\r
509 * \param channel The TC instance channel to access.
\r
511 * \retval >=0 TC counter value.
\r
512 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
514 extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel);
\r
516 /*! \brief Reads the channel's RA register and returns the value.
\r
518 * \param tc Pointer to the TC instance to access.
\r
519 * \param channel The TC instance channel to access.
\r
521 * \retval >=0 RA register value.
\r
522 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
524 extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel);
\r
526 /*! \brief Reads the channel's RB register and returns the value.
\r
528 * \param tc Pointer to the TC instance to access.
\r
529 * \param channel The TC instance channel to access.
\r
531 * \retval >=0 RB register value.
\r
532 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
534 extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel);
\r
536 /*! \brief Reads the channel's RC register and returns the value.
\r
538 * \param tc Pointer to the TC instance to access.
\r
539 * \param channel The TC instance channel to access.
\r
541 * \retval >=0 RC register value.
\r
542 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
544 extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel);
\r
546 /*! \brief Writes a value to the channel's RA register.
\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
552 * \retval >=0 Written value.
\r
553 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
555 extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
\r
557 /*! \brief Writes a value to the channel's RB register.
\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
563 * \retval >=0 Written value.
\r
564 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
566 extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
\r
568 /*! \brief Writes a value to the channel's RC register.
\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
574 * \retval >=0 Written value.
\r
575 * \retval TC_INVALID_ARGUMENT Invalid argument(s).
\r
577 extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
\r