]> rtime.felk.cvut.cz Git - eurobot/public.git/blob - src/eb_pwr/pwrstep.c
Merge branch 'maint-demo'
[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 void pwr_33(char mode, struct power *pwr)       // switch on/off 3,3V power line\r
8 {\r
9         if (mode != PWR_ON) {\r
10                 IO1SET |= PWR33;\r
11                 pwr->pwr_33v_state = PWR_OFF;\r
12         } else {\r
13                 IO1CLR |= PWR33;\r
14                 pwr->pwr_33v_state = PWR_ON;\r
15         }\r
16 }\r
17 \r
18 void pwr_50(char mode, struct power *pwr)       // switch on/off 5V power line\r
19 {\r
20         if (mode != PWR_ON) {\r
21                 IO1SET |= PWR50;\r
22                 pwr->pwr_50v_state = PWR_OFF;\r
23         } else {\r
24                 IO1CLR |= PWR50;\r
25                 pwr->pwr_50v_state = PWR_ON;\r
26         }\r
27 }\r
28 \r
29 void pwr_80(char mode, struct power *pwr)       // switch on/off 8V power line\r
30 {\r
31         if (mode != PWR_ON) {\r
32                 IO1SET |= PWR80;\r
33                 pwr->pwr_80v_state = PWR_OFF;\r
34         } else {\r
35                 IO1CLR |= PWR80;\r
36                 pwr->pwr_80v_state = PWR_ON;\r
37         }\r
38 }\r
39 \r
40 void adc_isr(void) __attribute__ ((interrupt));\r
41 \r
42 void adc_isr(void)\r
43 {\r
44         unsigned char chan =0;\r
45         unsigned int val =0;\r
46 \r
47         chan = (char) ((ADDR>>24) & 0x07);\r
48         val = ((ADDR >> 6) & 0x3FF);\r
49 \r
50         adc_val[chan] = (((val * ADC_CON_CONST + ADC_OFFSET) + adc_val[chan]) >> 1) ;\r
51 \r
52         ADCR &= ~(ADC_CR_START_OFF);\r
53 \r
54         switch(chan)\r
55         {\r
56                 case 0:\r
57                         ADCR = ((ADC_CR_ADC1) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
58                         break;\r
59 \r
60                 case 1:\r
61                         ADCR = ((ADC_CR_ADC2) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
62                         break;\r
63 \r
64                 case 2:\r
65                         ADCR = ((ADC_CR_ADC3) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
66                         break;\r
67 \r
68                 case 3:\r
69                         ADCR = ((ADC_CR_ADC0) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (20*ADC_CR_CLK_DIV_1));\r
70                         break;\r
71         }\r
72 \r
73          VICVectAddr = 0;\r
74 }\r
75 \r
76 void init_adc(unsigned rx_isr_vect)\r
77 {\r
78         PINSEL1 |= ((PINSEL_1 << ADCCH0) | (PINSEL_1 << ADCCH1) | (PINSEL_1 << ADCCH2) | (PINSEL_1 << ADCCH3));\r
79 \r
80         ((uint32_t*)&VICVectCntl0)[rx_isr_vect] = 0x32;\r
81         ((uint32_t*)&VICVectAddr0)[rx_isr_vect] = (unsigned) adc_isr;\r
82         VICIntEnable = 0x40000;\r
83 \r
84         ADCR = ((ADC_CR_ADC0) | (ADC_CR_CLKS_11) | (ADC_CR_PDN_ON) | (ADC_CR_START_NOW) | (10*ADC_CR_CLK_DIV_1));\r
85 }\r
86 \r
87 void init_pwr(struct power *pwr)   // init power lines\r
88 {\r
89         IO1DIR |= (PWR33 | PWR50 | PWR80);\r
90         pwr_33(PWR_OFF, pwr);\r
91         pwr_50(PWR_OFF, pwr);\r
92         pwr_80(PWR_OFF, pwr);\r
93 }