00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _TC_H_
00049 #define _TC_H_
00050
00051 #include <avr32/io.h>
00052
00053
00055 #define TC_INVALID_ARGUMENT (-1)
00056
00058 #define TC_NUMBER_OF_CHANNELS (sizeof(((avr32_tc_t *)0)->channel) / sizeof(avr32_tc_channel_t))
00059
00062
00063 #define TC_CH0_EXT_CLK0_SRC_TCLK0 AVR32_TC_TC0XC0S_TCLK0
00064 #define TC_CH0_EXT_CLK0_SRC_NO_CLK AVR32_TC_TC0XC0S_NO_CLK
00065 #define TC_CH0_EXT_CLK0_SRC_TIOA1 AVR32_TC_TC0XC0S_TIOA1
00066 #define TC_CH0_EXT_CLK0_SRC_TIOA2 AVR32_TC_TC0XC0S_TIOA2
00068
00069
00071
00072 #define TC_CH1_EXT_CLK1_SRC_TCLK1 AVR32_TC_TC1XC1S_TCLK1
00073 #define TC_CH1_EXT_CLK1_SRC_NO_CLK AVR32_TC_TC1XC1S_NO_CLK
00074 #define TC_CH1_EXT_CLK1_SRC_TIOA0 AVR32_TC_TC1XC1S_TIOA0
00075 #define TC_CH1_EXT_CLK1_SRC_TIOA2 AVR32_TC_TC1XC1S_TIOA2
00077
00078
00080
00081 #define TC_CH2_EXT_CLK2_SRC_TCLK2 AVR32_TC_TC2XC2S_TCLK2
00082 #define TC_CH2_EXT_CLK2_SRC_NO_CLK AVR32_TC_TC2XC2S_NO_CLK
00083 #define TC_CH2_EXT_CLK2_SRC_TIOA0 AVR32_TC_TC2XC2S_TIOA0
00084 #define TC_CH2_EXT_CLK2_SRC_TIOA1 AVR32_TC_TC2XC2S_TIOA1
00086
00087
00089
00090 #define TC_EVT_EFFECT_NOOP AVR32_TC_NONE
00091 #define TC_EVT_EFFECT_SET AVR32_TC_SET
00092 #define TC_EVT_EFFECT_CLEAR AVR32_TC_CLEAR
00093 #define TC_EVT_EFFECT_TOGGLE AVR32_TC_TOGGLE
00095
00096
00098
00099 #define TC_NO_TRIGGER_COMPARE_RC 0
00100 #define TC_TRIGGER_COMPARE_RC 1
00102
00103
00105
00106 #define TC_WAVEFORM_SEL_UP_MODE AVR32_TC_WAVSEL_UP_NO_AUTO
00107 #define TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UP_AUTO
00108 #define TC_WAVEFORM_SEL_UPDOWN_MODE AVR32_TC_WAVSEL_UPDOWN_NO_AUTO
00109 #define TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UPDOWN_AUTO
00111
00112
00114
00115 #define TC_EXT_TRIG_SEL_TIOA 1
00116 #define TC_EXT_TRIG_SEL_TIOB 0
00118
00119
00121
00122 #define TC_EXT_EVENT_SEL_TIOB_INPUT AVR32_TC_EEVT_TIOB_INPUT
00123 #define TC_EXT_EVENT_SEL_XC0_OUTPUT AVR32_TC_EEVT_XC0_OUTPUT
00124 #define TC_EXT_EVENT_SEL_XC1_OUTPUT AVR32_TC_EEVT_XC1_OUTPUT
00125 #define TC_EXT_EVENT_SEL_XC2_OUTPUT AVR32_TC_EEVT_XC2_OUTPUT
00127
00128
00130
00131 #define TC_SEL_NO_EDGE AVR32_TC_EEVTEDG_NO_EDGE
00132 #define TC_SEL_RISING_EDGE AVR32_TC_EEVTEDG_POS_EDGE
00133 #define TC_SEL_FALLING_EDGE AVR32_TC_EEVTEDG_NEG_EDGE
00134 #define TC_SEL_EACH_EDGE AVR32_TC_EEVTEDG_BOTH_EDGES
00136
00137
00139
00140 #define TC_BURST_NOT_GATED AVR32_TC_BURST_NOT_GATED
00141 #define TC_BURST_CLK_AND_XC0 AVR32_TC_BURST_CLK_AND_XC0
00142 #define TC_BURST_CLK_AND_XC1 AVR32_TC_BURST_CLK_AND_XC1
00143 #define TC_BURST_CLK_AND_XC2 AVR32_TC_BURST_CLK_AND_XC2
00145
00146
00148
00149 #define TC_CLOCK_RISING_EDGE 0
00150 #define TC_CLOCK_FALLING_EDGE 1
00152
00153
00155
00156 #define TC_CLOCK_SOURCE_TC1 AVR32_TC_TCCLKS_TIMER_CLOCK1
00157 #define TC_CLOCK_SOURCE_TC2 AVR32_TC_TCCLKS_TIMER_CLOCK2
00158 #define TC_CLOCK_SOURCE_TC3 AVR32_TC_TCCLKS_TIMER_CLOCK3
00159 #define TC_CLOCK_SOURCE_TC4 AVR32_TC_TCCLKS_TIMER_CLOCK4
00160 #define TC_CLOCK_SOURCE_TC5 AVR32_TC_TCCLKS_TIMER_CLOCK5
00161 #define TC_CLOCK_SOURCE_XC0 AVR32_TC_TCCLKS_XC0
00162 #define TC_CLOCK_SOURCE_XC1 AVR32_TC_TCCLKS_XC1
00163 #define TC_CLOCK_SOURCE_XC2 AVR32_TC_TCCLKS_XC2
00165
00166
00168 typedef struct
00169 {
00170 unsigned int :24;
00171
00173 unsigned int etrgs : 1;
00174
00176 unsigned int ldrbs : 1;
00177
00179 unsigned int ldras : 1;
00180
00182 unsigned int cpcs : 1;
00183
00185 unsigned int cpbs : 1;
00186
00188 unsigned int cpas : 1;
00189
00191 unsigned int lovrs : 1;
00192
00194 unsigned int covfs : 1;
00195 } tc_interrupt_t;
00196
00198 typedef struct
00199 {
00201 unsigned int channel ;
00202
00203 unsigned int :12;
00204
00210 unsigned int ldrb : 2;
00211
00217 unsigned int ldra : 2;
00218
00219 unsigned int : 1;
00220
00224 unsigned int cpctrg : 1;
00225
00226 unsigned int : 3;
00227
00231 unsigned int abetrg : 1;
00232
00238 unsigned int etrgedg : 2;
00239
00243 unsigned int ldbdis : 1;
00244
00248 unsigned int ldbstop : 1;
00249
00255 unsigned int burst : 2;
00256
00260 unsigned int clki : 1;
00261
00271 unsigned int tcclks : 3;
00272 } tc_capture_opt_t;
00273
00275 typedef struct
00276 {
00278 unsigned int channel ;
00279
00285 unsigned int bswtrg : 2;
00286
00292 unsigned int beevt : 2;
00293
00299 unsigned int bcpc : 2;
00300
00306 unsigned int bcpb : 2;
00307
00313 unsigned int aswtrg : 2;
00314
00320 unsigned int aeevt : 2;
00321
00327 unsigned int acpc : 2;
00328
00334 unsigned int acpa : 2;
00335
00336 unsigned int : 1;
00337
00343 unsigned int wavsel : 2;
00344
00348 unsigned int enetrg : 1;
00349
00355 unsigned int eevt : 2;
00356
00362 unsigned int eevtedg : 2;
00363
00367 unsigned int cpcdis : 1;
00368
00372 unsigned int cpcstop : 1;
00373
00379 unsigned int burst : 2;
00380
00384 unsigned int clki : 1;
00385
00395 unsigned int tcclks : 3;
00396 } tc_waveform_opt_t;
00397
00398
00407 extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel);
00408
00418 extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield);
00419
00441 extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src);
00442
00451 extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt);
00452
00461 extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt);
00462
00471 extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel);
00472
00481 extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel);
00482
00491 extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel);
00492
00497 extern void tc_sync_trigger(volatile avr32_tc_t *tc);
00498
00503 extern void tc_sync_start(volatile avr32_tc_t *tc);
00504
00513 extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel);
00514
00523 extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel);
00524
00533 extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel);
00534
00543 extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel);
00544
00553 extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel);
00554
00564 extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
00565
00575 extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
00576
00586 extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
00587
00588
00589 #endif // _TC_H_