]> rtime.felk.cvut.cz Git - sysless.git/blob - app/eb_ebb/engine.c
ae7344ca8a16ed3a906dddd144d4c3689e55cf26
[sysless.git] / app / eb_ebb / engine.c
1
2
3
4
5 #include <lpc21xx.h>
6 #include <deb_led.h>
7 #include <system_def.h>
8 #include "engine.h"
9
10 #define ENGINE_PIN_A    7       // pin P0.7
11 #define ENGINE_PIN_B    8       // pin P0.8
12
13 #define ENGINE_ENA      28      // pin P1.28
14 #define ENGINE_ENB      30      // pin P1.30
15 #define ENGINE_IN2A     25      //27    // pin P1.27
16 #define ENGINE_IN2B     29      // pin P1.29
17
18 #define PWM_STEP ((CPU_APB_HZ / 20000)/100)
19
20 //unsigned int engineStep = 0;
21
22 void engine_A_en(unsigned status)
23 {
24         if (status == ENGINE_EN_ON) 
25                 IO1SET |= (1<<ENGINE_ENA);
26         else
27                 IO1CLR |= (1<<ENGINE_ENA);
28 }
29
30 void engine_B_en(unsigned status)
31 {
32         if (status == ENGINE_EN_ON) 
33                 IO1SET |= (1<<ENGINE_ENB);
34         else
35                 IO1CLR |= (1<<ENGINE_ENB);
36 }
37
38 void engine_A_dir(unsigned dir)
39 {
40         if (dir == ENGINE_DIR_BW) 
41                 IO1SET |= (1<<ENGINE_IN2A);
42         else
43                 IO1CLR |= (1<<ENGINE_IN2A);
44         
45 }
46
47 void engine_B_dir(unsigned dir)
48 {
49         if (dir == ENGINE_DIR_BW) 
50                 IO1SET |= (1<<ENGINE_IN2B);
51         else
52                 IO1CLR |= (1<<ENGINE_IN2B);
53 }
54
55 void engine_A_pwm(unsigned pwm)
56 {
57         if (pwm>100) pwm = 100;
58         PWMMR2 = PWM_STEP  * pwm;
59         PWMLER |= PWMLER_LA2_m;
60
61 }
62
63 void engine_B_pwm(unsigned pwm)
64 {
65         if (pwm>100) pwm = 100;
66         PWMMR4 = PWM_STEP  * pwm;
67         PWMLER |= PWMLER_LA4_m;
68
69 }
70
71 void init_engine_A()
72 {
73         PINSEL0 &= ~((PINSEL_3 << 14) );
74         PINSEL0 |= (PINSEL_2 << 14) ;
75
76         IO0DIR |= (1<<ENGINE_PIN_A);
77         IO1DIR |= (1<<ENGINE_ENA) | (1<<ENGINE_IN2A);
78         IO1SET |= (1<<ENGINE_ENA) | (1<<ENGINE_IN2A);
79
80         
81         PWMPR = 0;
82         PWMMR0 = CPU_APB_HZ / 20000;
83
84         
85
86         PWMMR2 =0;      // PWM_STEP  * 30 ;
87         //PWMMR4 = PWM_STEP  * 30 ;
88         //PWMMR4 = 0;
89
90         
91         PWMPCR |= PWMPCR_PWMENA2_m;
92         PWMLER |= PWMLER_LA0_m | PWMLER_LA2_m;
93         PWMMCR |= PWMMCR_PWMMR0R_m;
94         PWMTCR |= PWMTCR_CE_m | PWMTCR_EN_m;    
95 }
96
97 void init_engine_B()
98 {
99         PINSEL0 &= ~((PINSEL_3 << 16));
100         PINSEL0 |= (PINSEL_2 << 16);
101
102         IO0DIR |= (1<<ENGINE_PIN_B);
103         IO1DIR |= (1<<ENGINE_ENB) | (1<<ENGINE_IN2B);
104
105         IO1SET |= (1<<ENGINE_ENB) | (1<<ENGINE_IN2B);
106
107         
108         PWMPR = 0;
109         PWMMR0 = CPU_APB_HZ / 20000;
110
111         
112
113         //PWMMR2 = PWM_STEP  * 30 ;
114         PWMMR4 = 0;// PWM_STEP  * 30 ;
115         //PWMMR4 = 0;
116
117         
118         PWMPCR |= PWMPCR_PWMENA4_m;
119         PWMLER |= PWMLER_LA0_m | PWMLER_LA4_m;
120         PWMMCR |= PWMMCR_PWMMR0R_m;
121         PWMTCR |= PWMTCR_CE_m | PWMTCR_EN_m;    
122 }
123
124
125
126
127
128 /*
129         ((uint32_t*)&VICVectAddr0)[rx_isr_vect] = (unsigned long)tc1;          // Nastaveni adresy vektotu preruseni
130         ((uint32_t*)&VICVectCntl0)[rx_isr_vect] = 0x20 | 0x5;                    // vyber casovece pro preruseni
131         VICIntEnable = (1<<5);                  // Povoli obsluhu preruseni*/
132