00001
00076 #include <avr32/io.h>
00077 #include "pwm4.h"
00078 #include "gpio.h"
00079 #include "board.h"
00080 #include "power_clocks_lib.h"
00081 #include "pm_uc3c.h"
00082 #include "scif_uc3c.h"
00083
00086
00087 #if BOARD == UC3C_EK
00088 # define EXAMPLE_PWM_L_PIN AVR32_PWM_PWML_0_1_PIN
00089 # define EXAMPLE_PWM_L_FUNCTION AVR32_PWM_PWML_0_1_FUNCTION
00090 # define EXAMPLE_PWM_H_PIN AVR32_PWM_PWMH_0_1_PIN
00091 # define EXAMPLE_PWM_H_FUNCTION AVR32_PWM_PWMH_0_1_FUNCTION
00092 # define EXAMPLE_PWM_CHANNEL_ID 0
00093 #endif
00094
00095 #if !defined(EXAMPLE_PWM_L_PIN) || \
00096 !defined(EXAMPLE_PWM_L_FUNCTION) || \
00097 !defined(EXAMPLE_PWM_H_PIN) || \
00098 !defined(EXAMPLE_PWM_H_FUNCTION) || \
00099 !defined(EXAMPLE_PWM_CHANNEL_ID)
00100 # error The PWM configuration to use in this example is missing.
00101 #endif
00103
00104
00105 static void local_start_highfreq_clock(void)
00106 {
00107 const scif_pll_opt_t opt = {
00108 .osc = SCIF_OSC0,
00109 .lockcount = 16,
00110 .div = 1,
00111 .mul = 6,
00112 .pll_div2 = 1,
00113 .pll_wbwdisable = 0,
00114 .pll_freq = 1,
00115 };
00116
00117 pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP);
00118
00119
00120 scif_pll_setup(SCIF_PLL0, opt);
00121
00122
00123 scif_pll_enable(SCIF_PLL0);
00124
00125
00126 scif_wait_for_pll_locked(SCIF_PLL0) ;
00127 }
00128
00129
00130 static void pwm_start_gc()
00131 {
00132 scif_gc_setup(AVR32_SCIF_GCLK_PWM,
00133 SCIF_GCCTRL_PLL0,
00134 AVR32_SCIF_GC_NO_DIV_CLOCK,
00135 0);
00136
00137 scif_gc_enable(AVR32_SCIF_GCLK_PWM);
00138 }
00139
00144 int main(void)
00145 {
00146 pwm_opt_t pwm_opt;
00147 avr32_pwm_channel_t pwm_channel = {{0},
00148 {0},
00149 {0},
00150 {0},
00151 {0},
00152 {0},
00153 {0},
00154 {0}};
00155 unsigned int channel_id;
00156
00157
00158
00159 local_start_highfreq_clock();
00160
00161 pwm_start_gc();
00162
00163 channel_id = EXAMPLE_PWM_CHANNEL_ID;
00164 gpio_enable_module_pin(EXAMPLE_PWM_L_PIN, EXAMPLE_PWM_L_FUNCTION);
00165 gpio_enable_module_pin(EXAMPLE_PWM_H_PIN, EXAMPLE_PWM_H_FUNCTION);
00166
00167 pwm_opt.diva = AVR32_PWM_DIVA_CLK_OFF;
00168 pwm_opt.divb = AVR32_PWM_DIVB_CLK_OFF;
00169 pwm_opt.prea = AVR32_PWM_PREA_CCK;
00170 pwm_opt.preb = AVR32_PWM_PREB_CCK;
00171
00172 pwm_opt.fault_detection_activated = FALSE;
00173 pwm_opt.sync_channel_activated = TRUE;
00174 pwm_opt.sync_update_channel_mode = PWM_SYNC_UPDATE_MANUAL_WRITE_MANUAL_UPDATE;
00175 pwm_opt.sync_channel_select[0] = TRUE;
00176 pwm_opt.sync_channel_select[1] = TRUE;
00177 pwm_opt.sync_channel_select[2] = FALSE;
00178 pwm_opt.sync_channel_select[3] = FALSE;
00179 pwm_opt.cksel = PWM_CKSEL_GCLK;
00180 pwm_init(&pwm_opt);
00181
00182
00183 pwm_update_period_value(10);
00184
00185
00186 pwm_channel.CMR.dte = 1;
00187 pwm_channel.CMR.dthi = 1;
00188 pwm_channel.CMR.dtli = 0;
00189 pwm_channel.CMR.ces = 0;
00190 pwm_channel.CMR.calg = PWM_MODE_LEFT_ALIGNED;
00191 pwm_channel.CMR.cpol = PWM_POLARITY_LOW;
00192 pwm_channel.CMR.cpre = AVR32_PWM_CPRE_CCK;
00193 pwm_channel.cdty = 10;
00194 pwm_channel.cprd = 20;
00195
00196
00197
00198
00199
00200 pwm_channel_init(channel_id, &pwm_channel);
00201 pwm_start_channels((1 << channel_id));
00202
00203 while(1);
00204 }