]> rtime.felk.cvut.cz Git - eurobot/public.git/blob - src/eb_pwr/pwrstep.c
4d3880bcb87c1fc95e099beb42d663a47860a31f
[eurobot/public.git] / src / eb_pwr / pwrstep.c
1 #include <lpc21xx.h>                          // LPC21XX Peripheral Registers\r
2 #include <types.h> \r
3 #include <deb_led.h>\r
4 #include <system_def.h>\r
5 #include "pwrstep.h"\r
6 \r
7 \r
8 #define PWR33   (1<<22) \r
9 #define PWR50   (1<<24)\r
10 #define PWR80   (1<<23)\r
11 \r
12 #define ADC0    (1<<27) \r
13 #define ADC1    (1<<28) \r
14 #define ADC2    (1<<29) \r
15 #define ADC3    (1<<30) \r
16 \r
17 \r
18 \r
19 #define ADCCH0 22\r
20 #define ADCCH1 24\r
21 #define ADCCH2 26\r
22 #define ADCCH3 28\r
23 \r
24 //  tohla me byt definovano nekde jinde  FIXME\r
25 \r
26 \r
27 #define ADC_PIN_0   0x1\r
28 #define ADC_PIN_1   0x2\r
29 #define ADC_PIN_2   0x4\r
30 #define ADC_PIN_3   0x8\r
31 \r
32 #define ADC_CR_ADC0 0x1\r
33 #define ADC_CR_ADC1 0x2\r
34 #define ADC_CR_ADC2 0x4\r
35 #define ADC_CR_ADC3 0x8\r
36 \r
37 #define ADC_CR_CLK_DIV_1        (1<<8)  // this nuber should be multipied  sampe\r
38                                                                 // requested divisor 4  ---- clk_div = 4 * ADC_CR_CLK_DIV_1\r
39 #define ADC_CR_BURST            (1<<16)\r
40 #define ADC_CR_CLKS_11          (0<<17)\r
41 #define ADC_CR_CLKS_10          (1<<17)\r
42 #define ADC_CR_CLKS_9           (2<<17)\r
43 #define ADC_CR_CLKS_8           (3<<17)\r
44 #define ADC_CR_CLKS_7           (4<<17)\r
45 #define ADC_CR_CLKS_6           (5<<17)\r
46 #define ADC_CR_CLKS_5           (6<<17)\r
47 #define ADC_CR_CLKS_4           (7<<17)\r
48 \r
49 #define ADC_CR_PDN_ON           (1<<21)\r
50 \r
51 #define ADC_CR_START_OFF        (0<<24)\r
52 #define ADC_CR_START_NOW        (1<<24)\r
53 #define ADC_CR_START_P016       (2<<24)\r
54 #define ADC_CR_START_P022       (3<<24)\r
55 #define ADC_CR_START_MAT01      (4<<24)\r
56 #define ADC_CR_START_MAT03      (5<<24)\r
57 #define ADC_CR_START_MAT10      (6<<24)\r
58 #define ADC_CR_START_MAT11      (7<<24)\r
59 \r
60 #define ADC_CR_EDGE_RISING      (0<<27)\r
61 #define ADC_CR_EDGE_FALLING     (1<<27)\r
62 \r
63 \r
64 \r
65 \r
66 \r
67         \r
68 \r
69 void pwr_33(char mode)  // switch on/off 3,3V power line\r
70 {\r
71         if (mode != PWR_ON)\r
72         {\r
73                 IO1SET |= PWR33;        \r
74         }\r
75         else\r
76         {\r
77                 IO1CLR |= PWR33;        \r
78         }\r
79 }\r
80 \r
81 \r
82 void pwr_50(char mode)  // switch on/off 5V power line\r
83 {\r
84         if (mode != PWR_ON)\r
85         {\r
86                 IO1SET |= PWR50;        \r
87         }\r
88         else\r
89         {\r
90                 IO1CLR |= PWR50;        \r
91         }\r
92 }\r
93 \r
94 \r
95 void pwr_80(char mode)  // switch on/off 8V power line\r
96 {\r
97         if (mode != PWR_ON)\r
98         {\r
99                 IO1SET |= PWR80;        \r
100         }\r
101         else\r
102         {\r
103                 IO1CLR |= PWR80;        \r
104         }\r
105 }\r
106 \r
107 \r
108  volatile char test =0xF;\r
109 \r
110 void adc_isr(void) __attribute__ ((interrupt));\r
111 \r
112 void adc_isr(void) \r
113 {\r
114         unsigned char chan =0;                                                                             \r
115         unsigned int val =0;\r
116 \r
117         chan = (char) ((ADDR>>24) & 0x07);\r
118         val = ((ADDR >> 6) & 0x3FF); \r
119 \r
120         adc_val[chan] = (((val * ADC_CON_CONST + ADC_OFFSET) + adc_val[chan]) >> 1) ;\r
121 \r
122         ADCR &= ~(ADC_CR_START_OFF);\r
123 \r
124         switch(chan)\r
125         {\r
126                 case 0:\r
127                         ADCR = ((ADC_CR_ADC1) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
128                         break;\r
129 \r
130                 case 1:\r
131                         ADCR = ((ADC_CR_ADC2) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
132                         break;\r
133                         \r
134                 case 2:\r
135                         ADCR = ((ADC_CR_ADC3) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
136                         break;\r
137                         \r
138                 case 3:\r
139                         ADCR = ((ADC_CR_ADC0) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
140                         break;                                                                                                                   \r
141         }\r
142         \r
143          VICVectAddr = 0;\r
144 }\r
145 \r
146 \r
147 void init_adc(unsigned rx_isr_vect)\r
148 {\r
149         \r
150         PINSEL1 |= ((PINSEL_1 << ADCCH0) | (PINSEL_1 << ADCCH1) | (PINSEL_1 << ADCCH2) | (PINSEL_1 << ADCCH3));         \r
151 \r
152         ((uint32_t*)&VICVectCntl0)[rx_isr_vect] = 0x32;\r
153         ((uint32_t*)&VICVectAddr0)[rx_isr_vect] = (unsigned) adc_isr;\r
154         VICIntEnable = 0x40000;\r
155 \r
156         ADCR = ((ADC_CR_ADC0) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (10*ADC_CR_CLK_DIV_1));\r
157 }\r
158 \r
159 \r
160 void init_pwr(void)   // init power lines\r
161 {\r
162         IO1DIR |= (PWR33 | PWR50 | PWR80);\r
163         pwr_33(PWR_OFF);\r
164         pwr_50(PWR_OFF);\r
165         pwr_80(PWR_OFF);\r
166 }\r
167 \r
168 \r
169 \r
170 \r
171 \r
172 \r
173 \r