4 void hbridge_half_set(uint8_t side
, uint32_t value
) {
5 uint32_t *s_down
, *d_down
, *d_up
;
9 s_down
= PWM_MR
[6]; d_down
= PWM_MR
[4]; d_up
= PWM_MR
[3];
12 s_down
= PWM_MR
[5]; d_down
= PWM_MR
[2]; d_up
= PWM_MR
[1];
15 if (value
< 2*PWM_DEAD
) {
18 *d_down
= PWM_PERIOD
+1;
21 else if (value
> PWM_PERIOD
-2*PWM_DEAD
) {
23 *s_down
= *d_down
= 0;
27 *d_up
= t
= PWM_PERIOD
-PWM_DEAD
;
28 //*d_down = t -= value;
29 /****** !!!!!!!!! *******/
30 *d_down
= t
-= value
- 2*PWM_DEAD
;
31 *s_down
= t
- PWM_DEAD
;
34 PWMLER
|= side
? 0x58 : 0x26;
37 void hbridge_set(int32_t value
) {
39 hbridge_half_set(0, value
);
40 hbridge_half_set(1, 0);
43 hbridge_half_set(1, -value
);
44 hbridge_half_set(0, 0);
52 /* *d_down = PWM_PERIOD+1, *d_up = 0 (H) */
53 PWMMR4
= PWM_PERIOD
+1;
55 PWMMR2
= PWM_PERIOD
+1;
57 PWMLER
|= 0x58 | 0x26;
61 /* PWM2,4 double-edged, PWM5,6 single-edged */
66 /* both sides to GND */
67 //hbridge_half_set(0, 0);
68 //hbridge_half_set(1, 0);
69 /* disconnect the bridge */
72 pwm_init(1, PWM_PERIOD
);