00001
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
00049 #ifndef _PWM_H_
00050 #define _PWM_H_
00051
00052 #include <avr32/io.h>
00053
00054 #include "compiler.h"
00055
00057 #define AVR32_PWM_LINES_MSB 4
00058
00060 #define PWM_SUCCESS 0
00061
00064 #define PWM_FAILURE -1
00065
00067 #define PWM_INVALID_INPUT 1
00068
00070 #define PWM_INVALID_ARGUMENT 1
00071
00073 #define PWM_MODE_LEFT_ALIGNED 0
00074
00076 #define PWM_MODE_CENTER_ALIGNED 1
00077
00079 #define PWM_POLARITY_LOW 0
00080
00082 #define PWM_POLARITY_HIGH 1
00083
00085 #define PWM_UPDATE_DUTY 0
00086
00088 #define PWM_UPDATE_PERIOD 1
00089
00091 #define PWM_OOV_VALUE_LOW 0
00092
00094 #define PWM_OOV_VALUE_HIGH 1
00095
00097 #define PWM_OOV_CTRL_OFF 0
00098
00100 #define PWM_OOV_CTRL_ON 1
00101
00103 #define PWM_OOV_LINES 4
00104
00106 #define PWM_WPKEY 0x50574D
00107
00109 #define PWM_NO_WRITE_PROTECT_VIOLATION 0xFFFFFFFF
00110
00112 #define PWM_SYNC_CHANNEL_ON 1
00113
00115 #define PWM_SYNC_CHANNEL_OFF 1
00116
00118 #define PWM_SYNC_UPDATE_MANUAL_WRITE_MANUAL_UPDATE 0
00119
00121 #define PWM_SYNC_UPDATE_MANUAL_WRITE_AUTO_UPDATE 1
00122
00124 #define PWM_SYNC_UPDATE_AUTO_WRITE_AUTO_UPDATE 2
00125
00127 #define PWM_UPDLOCK_TRIGGER 1
00128
00130 #define PWM_FAULT_LINES 8
00131
00133 #define PWM_FAULT_INPUT_ACTIVE_LOW 0
00134
00136 #define PWM_FAULT_INPUT_ACTIVE_HIGH 1
00137
00139 #define PWM_FAULT_INPUT_FILTER_OFF 0
00140
00142 #define PWM_FAULT_INPUT_FILTER_ON 1
00143
00144
00146 #define PWM_OUTPUT_LOW_WHEN_FAULT_DETECTION 0
00147
00149 #define PWM_OUTPUT_HIGH_WHEN_FAULT_DETECTION 1
00150
00152 #define PWM_FAULT_INPUT_NOT_USED 0
00153
00155 #define PWM_FAULT_INPUT_USED 1
00156
00158 #define PWM_FAULT_MODE_LEVEL 0
00159
00161 #define PWM_FAULT_MODE_TGL 1
00162
00164 #define PWM_FAULT_OUTPUT 4
00165
00167 #define PWM_CKSEL_MCK 0
00168
00170 #define PWM_CKSEL_GCLK 1
00171
00173 #define PWM_COMPARE_MODE_UP 0
00174
00176 #define PWM_COMPARE_MODE_DOWN 1
00177
00179 #define PWM_COMPARE_ON 1
00180
00182 #define PWM_COMPARE_OFF 0
00183
00184 #define PWM_EVENT_LINE0 (1<<AVR32_PWM_EL0MR_CSEL0_OFFSET)
00185
00186 #define PWM_EVENT_LINE1 (1<<AVR32_PWM_EL0MR_CSEL1_OFFSET)
00187
00188 #define PWM_EVENT_LINE2 (1<<AVR32_PWM_EL0MR_CSEL2_OFFSET)
00189
00190 #define PWM_EVENT_LINE3 (1<<AVR32_PWM_EL0MR_CSEL3_OFFSET)
00191
00192 #define PWM_EVENT_LINE4 (1<<AVR32_PWM_EL0MR_CSEL4_OFFSET)
00193
00194 #define PWM_EVENT_LINE5 (1<<AVR32_PWM_EL0MR_CSEL5_OFFSET)
00195
00196 #define PWM_EVENT_LINE6 (1<<AVR32_PWM_EL0MR_CSEL6_OFFSET)
00197
00198 #define PWM_EVENT_LINE7 (1<<AVR32_PWM_EL0MR_CSEL7_OFFSET)
00199
00201 typedef struct
00202 {
00204 unsigned int divb;
00205
00207 unsigned int diva;
00208
00210 unsigned int preb;
00211
00213 unsigned int prea;
00214
00216 unsigned int cksel;
00217
00219 unsigned char fault_detection_activated;
00220
00222 unsigned char sync_channel_activated;
00223
00225 unsigned char sync_update_channel_mode;
00226
00228 unsigned char sync_channel_select[PWM_OOV_LINES];
00229 } pwm_opt_t;
00230
00231
00232 typedef struct
00233 {
00235 unsigned char os[2][PWM_OOV_LINES];
00236
00238 unsigned char oov[2][PWM_OOV_LINES];
00239
00240 } pwm_output_override_opt_t;
00241
00242 typedef struct
00243 {
00245 U32 compare_pwm_counter_value;
00246
00248 unsigned char compare_mode;
00249
00251 U32 compare_pwm_period_counter_value;
00252
00254 U8 compare_period_counter_value;
00255
00257 U8 compare_pwm_update_period;
00258
00260 U8 compare_status;
00261
00262 } pwm_compare_opt_t;
00263
00264
00269 extern int pwm_init(pwm_opt_t *opt);
00270
00276 extern int pwm_channel_init(unsigned int channel_id, const avr32_pwm_channel_t *pwm_channel);
00277
00282 extern int pwm_start_channels(unsigned long channels_bitmask);
00283
00288 extern int pwm_stop_channels(unsigned long channels_bitmask);
00289
00296 extern int pwm_update_channel(unsigned int channel_id, const avr32_pwm_channel_t *pwm_channel);
00297
00304 extern int pwm_interrupt_update_channel(unsigned int channel_id, const avr32_pwm_channel_t *pwm_channel);
00305
00310 extern int pwm_output_override_setup(pwm_output_override_opt_t *opt);
00311
00316 extern int pwm_output_override_write(pwm_output_override_opt_t *opt);
00317
00322 extern int pwm_write_protect_hw_lock(int group);
00323
00328 extern int pwm_write_protect_sw_lock(int group);
00329
00334 extern int pwm_write_protect_sw_unlock(int group);
00335
00339 extern U32 pwm_write_protect_status();
00340
00345 extern int pwm_update_period_value(unsigned int value);
00346
00351 extern int pwm_update_period_value_update(unsigned int value);
00352
00356 extern unsigned int pwm_get_update_period_counter_value();
00357
00361 extern int pwm_synchronous_prepare_update(unsigned int channel_id, const avr32_pwm_channel_t *pwm_channel);
00362
00366 extern int pwm_update_manual_write_manual_update();
00367
00371 extern int pwm_update_manual_write_auto_update();
00372
00376 extern int pwm_update_auto_write_auto_update_check_ready();
00377
00381 extern int pwm_update_auto_write_auto_update_check_eot();
00382
00390 extern int pwm_fault_lines_polarity_setup(U8 line,
00391 U8 polarity,
00392 U8 mode,
00393 U8 filter);
00394
00401 extern int pwm_fault_lines_level_setup(U8 line,
00402 U8 channel_high,
00403 U8 channel_low);
00404
00410 extern int pwm_fault_lines_enable(U8 line,
00411 U8 channel);
00415 extern int pwm_get_fault_status();
00416
00419 extern void pwm_clr_fault_status();
00420
00426 extern int pwm_compare_match_setup(int line,pwm_compare_opt_t *pwm_compare_t);
00427
00433 extern int pwm_compare_match_reload_setup(int line,pwm_compare_opt_t *pwm_compare_t);
00434
00440 extern int pwm_compare_update_period_value(int line,pwm_compare_opt_t *pwm_compare_t);
00441
00447 extern int pwm_compare_reload_update_period_value(int line,pwm_compare_opt_t *pwm_compare_t);
00448
00453 extern int pwm_compare_enable(int line);
00454
00459 extern int pwm_compare_disable(int line);
00460
00466 extern int pwm_compare_event_enable(int line, int event_line);
00467
00473 extern int pwm_compare_event_disable(int line, int event_line);
00474
00475 #endif // _PWM_H_