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 #include <avr32/io.h>
00049 #include "compiler.h"
00050 #include "pevc.h"
00051
00052
00053
00057
00058
00059
00060 Bool pevc_channel_configure( volatile avr32_pevc_t *pevc,
00061 unsigned short int chan_id,
00062 unsigned short int gen_id,
00063 const pevc_evs_opt_t *pevs )
00064 {
00065 if( NULL != pevc )
00066 {
00067 if(( gen_id < PEVC_NUMBER_OF_EVENT_GENERATORS )
00068 && ( chan_id < PEVC_NUMBER_OF_EVENT_USERS ))
00069 {
00070
00071 pevc->CHMX[chan_id].evmx = gen_id;
00072
00073
00074 if( NULL != pevs )
00075 {
00076 pevc->igfdr = pevs->igfdr;
00077 pevc->EVS[gen_id].igf = pevs->igf;
00078 pevc->EVS[gen_id].evf = pevs->evf;
00079 pevc->EVS[gen_id].evr = pevs->evr;
00080 }
00081 return( PASS );
00082 }
00083 else return( FAIL );
00084 }
00085 else
00086 return( FAIL );
00087 }
00088
00089
00090
00091 void pevc_igfd_set( volatile avr32_pevc_t *pevc, unsigned char igfd )
00092 {
00093 Assert( NULL != pevc );
00094 PEVC_IGFD_SET(pevc, igfd);
00095 }
00096
00097
00098
00102
00103
00104
00105 void pevc_channels_enable( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask )
00106 {
00107 Assert( NULL != pevc );
00108 PEVC_CHANNELS_ENABLE(pevc, chan_mask);
00109 }
00110
00111
00112 void pevc_channels_disable( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask )
00113 {
00114 Assert( NULL != pevc );
00115 PEVC_CHANNELS_DISABLE(pevc, chan_mask);
00116 }
00117
00118
00119 Bool pevc_get_channel_status( volatile avr32_pevc_t *pevc, unsigned short int chan_id )
00120 {
00121 Assert( NULL != pevc );
00122 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00123 if(chan_id<32)
00124 return( ((pevc->chsr0) & (1 << chan_id))>>chan_id );
00125 else
00126 return( ((pevc->chsr1) & (1 << (chan_id-32)))>>(chan_id-32) );
00127 }
00128
00129
00130
00134
00135
00136
00137 Bool pevc_get_channel_state(volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00138 {
00139 Assert( NULL != pevc );
00140 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00141 if(chan_id<32)
00142 return( ((pevc->busy0) & (1 << chan_id))>>chan_id );
00143 else
00144 return( ((pevc->busy1) & (1 << (chan_id-32)))>>(chan_id-32) );
00145 }
00146
00147
00148
00152
00153
00154
00155 void pevc_channel_sev_enable( volatile avr32_pevc_t *pevc, unsigned short int chan_id )
00156 {
00157 Assert( NULL != pevc );
00158 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00159 pevc->CHMX[chan_id].smx = ENABLE;
00160 }
00161
00162
00163 void pevc_channels_trigger_sev(volatile avr32_pevc_t *pevc, unsigned long long int chan_mask)
00164 {
00165 Assert( NULL != pevc );
00166 PEVC_CHANNELS_TRIGGER_SEV(pevc, chan_mask);
00167 }
00168
00169
00170 void pevc_channel_sev_disable( volatile avr32_pevc_t *pevc, unsigned short int chan_id )
00171 {
00172 Assert( NULL != pevc );
00173 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00174 pevc->CHMX[chan_id].smx = DISABLE;
00175 }
00176
00177
00178
00182
00183
00184
00185 void pevc_channels_enable_trigger_interrupt( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask)
00186 {
00187 Assert( NULL != pevc );
00188 PEVC_CHANNELS_ENABLE_TRIGGER_INTERRUPT(pevc, chan_mask);
00189 }
00190
00191
00192 void pevc_channels_disable_trigger_interrupt( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask)
00193 {
00194 Assert( NULL != pevc );
00195 PEVC_CHANNELS_DISABLE_TRIGGER_INTERRUPT(pevc, chan_mask);
00196 }
00197
00198
00199 Bool pevc_channel_is_trigger_interrupt_enabled( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00200 {
00201 Assert( NULL != pevc );
00202 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00203 if(chan_id<32)
00204 return( ((pevc->trimr0) & (1 << chan_id))>>chan_id );
00205 else
00206 return( ((pevc->trimr1) & (1 << (chan_id-32)))>>(chan_id-32) );
00207 }
00208
00209
00210 Bool pevc_channel_is_trigger_interrupt_raised( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00211 {
00212 Assert( NULL != pevc );
00213 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00214 if(chan_id<32)
00215 return( ((pevc->trsr0) & (1 << chan_id))>>chan_id );
00216 else
00217 return( ((pevc->trsr1) & (1 << (chan_id-32)))>>(chan_id-32) );
00218 }
00219
00220
00221 void pevc_channel_clear_trigger_interrupt( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00222 {
00223 Assert( NULL != pevc );
00224 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00225 if(chan_id<32)
00226 pevc->trscr0 = (1 << chan_id);
00227 else
00228 pevc->trscr1 = (1 << (chan_id-32));
00229 }
00230
00231
00232
00236
00237
00238
00239 void pevc_channels_enable_overrun_interrupt( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask)
00240 {
00241 Assert( NULL != pevc );
00242 PEVC_CHANNELS_ENABLE_OVERRUN_INTERRUPT(pevc, chan_mask);
00243 }
00244
00245
00246 void pevc_channels_disable_overrun_interrupt( volatile avr32_pevc_t *pevc, unsigned long long int chan_mask)
00247 {
00248 Assert( NULL != pevc );
00249 PEVC_CHANNELS_DISABLE_OVERRUN_INTERRUPT(pevc, chan_mask);
00250 }
00251
00252
00253 Bool pevc_channel_is_overrun_interrupt_enabled( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00254 {
00255 Assert( NULL != pevc );
00256 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00257 if(chan_id<32)
00258 return( ((pevc->ovimr0) & (1 << chan_id))>>chan_id );
00259 else
00260 return( ((pevc->ovimr1) & (1 << (chan_id-32)))>>(chan_id-32) );
00261 }
00262
00263
00264 Bool pevc_channel_is_overrun_interrupt_raised( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00265 {
00266 Assert( NULL != pevc );
00267 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00268 if(chan_id<32)
00269 return( ((pevc->ovsr0) & (1 << chan_id))>>chan_id );
00270 else
00271 return( ((pevc->ovsr1) & (1 << (chan_id-32)))>>(chan_id-32) );
00272 }
00273
00274
00275 void pevc_channel_clear_overrun_interrupt( volatile avr32_pevc_t *pevc, unsigned short int chan_id)
00276 {
00277 Assert( NULL != pevc );
00278 Assert( chan_id < PEVC_NUMBER_OF_EVENT_USERS );
00279 if(chan_id<32)
00280 pevc->ovscr0 = (1 << chan_id);
00281 else
00282 pevc->ovscr1 = (1 << (chan_id-32));
00283 }