2 * pwm.c - arm pwm interface
4 * author: hackbard@hackdaworld.org
14 void pwm_set_rate_and_prescaler(u32 rate,u32 prescaler) {
20 int pwm_config(u8 pwmchan,u8 mode,u32 val1,u32 val2) {
26 if((pwmchan>6)|(pwmchan<1))
27 return PWM_INVALID_CHAN;
29 if(mode==PWM_DOUBLE_EDGE) {
32 *((volatile u32 *)addr+pwmchan)=val2;
33 *((volatile u32 *)addr+pwmchan-1)=val1;
36 if(mode==PWM_SINGLE_EDGE)
37 *((volatile u32 *)addr+pwmchan)=val1;
39 PWMPCR=(PWMPCR&0x7e7c)|(mode<<(2+pwmchan))|(1<<(9+pwmchan));
44 int pwm_update_match(u8 pwmchan,u8 mode,u32 val1,u32 val2) {
50 if((pwmchan>6)|(pwmchan<1))
51 return PWM_INVALID_CHAN;
53 if(mode==PWM_DOUBLE_EDGE) {
56 *((volatile u32 *)addr+pwmchan)=val2;
57 *((volatile u32 *)addr+pwmchan-1)=val1;
60 if(mode==PWM_SINGLE_EDGE)
61 *((volatile u32 *)addr+pwmchan)=val1;
66 void pwm_match_ctrl_config(u8 matchreg,u8 ctrl) {
68 PWMMCR=(PWMMCR&0x1fffff)|(ctrl<<(3*matchreg));