]> rtime.felk.cvut.cz Git - mirosot.git/blob - testapp/mirosot_main.c
25e96150d5bc7787f71fa2a970f113cd7a7dcb1e
[mirosot.git] / testapp / mirosot_main.c
1 /*
2 *  C Implementation: main_test
3 *
4 * Description:
5
6 *
7 *
8 * Author: Petr Kovacik <kovacp1@feld.cvut.cz>, (C) 2006
9 *
10 * Copyright:
11 *
12 */
13 #define _USE_EXR_LEVELS 1
14 #include <types.h>
15 #include <cpu_def.h>
16 #include <h8s2638h.h>
17 #include <periph/sci_rs232.h>
18 #include <system_def.h>
19 #include <stdlib.h>
20 #include <string.h>
21
22 #include <pxmc.h>
23 #include <pxmc_h2638.h>
24
25 #include <bth_fce_out.h>
26 #include <bth_inface.h>
27
28 #include <cmd_proc.h>
29 #include "cmd_bth.h"
30 #include "cmd_pxmc.h"
31 #include <bth_h8s2638.h>
32
33 /* SCI channel where Bluetooth is connected */
34 #define SCI_CHAN_BTH 2
35
36 /*struktury prikazu cmd*/
37 cmd_des_t const cmd_des_help={0, 0,"HELP","prints help for commands",
38                         cmd_do_help,{(char*)&cmd_bth}};
39
40 cmd_des_t const *cmd_rs232_default[]={
41
42   &cmd_des_help,
43   (cmd_des_t*)1,
44   (cmd_des_t*)cmd_stm_default,
45   NULL
46 };
47 cmd_des_t const **cmd_bth=cmd_rs232_default;       /*cmd prikazy pro bth*/
48 cmd_des_t const **cmd_rs232=cmd_rs232_default;     /*cmd prikazy pro PC*/
49
50
51 /*struktury charakterizujici motor 0*/
52 pxmc_state_t mcsX0={
53   pxms_flg:0,
54   pxms_do_inp:0,
55   pxms_do_con:0,
56   pxms_do_out:0,
57   pxms_do_deb:0,
58   pxms_do_gen:0,
59   pxms_ap:0, pxms_as:0,
60   pxms_rp:155l*256,
61   pxms_rs:0, //pxms_subdiv:8,
62   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
63   pxms_inp_info:(long)TPU_TCNT1, //TPU_TCNT1                    /*chanel TPU A,B*/
64   pxms_out_info:(long)PWM_PWBFR1A,                      /*chanel PWM A,B*/
65   pxms_ene:0, pxms_erc:0,
66   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
67   pxms_me:0x1800, //6144
68   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
69   pxms_ptper:1,
70   pxms_ptptr1:NULL,
71   pxms_ptptr2:NULL,
72   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|
73       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
74 };
75
76
77 /*struktury charakterizujici motor 1*/
78 pxmc_state_t mcsX1={
79   pxms_flg:0,
80   pxms_do_inp:0,
81   pxms_do_con:0,
82   pxms_do_out:0,
83   pxms_do_deb:0,
84   pxms_do_gen:0,
85   pxms_ap:0, pxms_as:0,
86   pxms_rp:155l*256,
87   pxms_rs:0, //pxms_subdiv:8,
88   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
89   pxms_inp_info:(long)TPU_TCNT2,                        /*chanel TPU C,D*/
90   pxms_out_info:(long)PWM_PWBFR1C,                      /*chanel PWM C,D*/
91   pxms_ene:0, pxms_erc:0,
92   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
93   pxms_me:0x1800, //6144
94   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
95   pxms_ptper:1,
96   pxms_ptptr1:NULL,
97   pxms_ptptr2:NULL,
98   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|      //FIXME: nastavit spravne priznaky pro dalsi motorove struktur
99       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
100 };
101
102 pxmc_state_t *pxmc_main_arr[] = {&mcsX0,&mcsX1};
103
104 pxmc_state_list_t pxmc_main_list = {
105   pxml_arr:pxmc_main_arr,
106   pxml_cnt:sizeof(pxmc_main_arr)/sizeof(pxmc_main_arr[0])
107 };
108
109
110
111 //*******************************************************
112
113 void  unhandled_exception(void) __attribute__ ((interrupt_handler));
114
115 /*Interrupt routines*/
116 void  unhandled_exception(void)
117 {
118 };
119 //********************************************************
120
121
122 int cmd_rs232_processor_run(void)
123 {
124   int val;
125   cmd_io_t* cmd_io;
126
127   cmd_io=&cmd_io_rs232;
128   if(cmd_rs232_line_out(cmd_io))
129     return 1;
130
131   if(cmd_rs232_line_in(cmd_io)<=0)
132     return 0;
133
134   if(cmd_rs232){
135     val=proc_cmd_line(cmd_io, cmd_rs232, cmd_io->priv.ed_line.in->buf);
136   }else{
137     val=-CMDERR_BADCMD;
138   }
139
140   if(cmd_io->priv.ed_line.out->inbuf){
141     cmd_io_putc(cmd_io,'\r');
142     cmd_io_putc(cmd_io,'\n');
143
144   }else if(val<0){
145     char s[20];
146     cmd_io_write(&cmd_io_rs232,"ERROR ",6);
147     i2str(s,-val,0,0);
148     cmd_io_write(cmd_io,s,strlen(s));
149     cmd_io_putc(cmd_io,'\r');
150     cmd_io_putc(cmd_io,'\n');
151   }
152   return 1;
153 }
154
155
156
157 int main()
158 {
159   int zn_bth;
160
161   /********************************************************************************/
162   *DIO_PJDDR=0xff;      /*output gate*/
163   *DIO_PEDDR=0xff;      /*output gate*/
164   *DIO_PEDR=0x60;       /*0x0-LED - light all; 0x6 -ENA,ENB=1, LE33CD=0*/
165   *DIO_PJDR=0x00;       //switch on all the LEDs - TODO: Use generic macros fot this
166
167
168   /*priority preruseni - SCI > TPU*/
169   *SYS_SYSCR|=SYSCR_INTM1m;
170   *INT_IPRA=0x22; *INT_IPRB=0x22; *INT_IPRC=0x04;
171   *INT_IPRD=0x40; *INT_IPRE=0x44; *INT_IPRF=0x55;
172   *INT_IPRG=0x55; *INT_IPRH=0x55; *INT_IPRJ=0x06;
173   *INT_IPRK=0x67; *INT_IPRM=0x66;
174
175   /* disable and initialize interrupts...*/
176   cli();
177   excptvec_initfill(unhandled_exception, 0);
178
179   /*nastaveni seriovych linek - Bth, PC*/
180   sci_rs232_setmode(RS232_BAUD_RAW | 3, 0, 0, SCI_CHAN_BTH);    // HCI - hardcoded 115200
181   //sci_rs232_setmode(115200, 0, 0, 2); // HCI
182   sci_rs232_setmode(19200, 0, 0, sci_rs232_chan_default); //PC
183   sti();                        /* enable interrupts */
184
185   bth_init();  /* bluetooth initialization */
186
187   /*inicializace komunikacnich datovych I/O bufferu */
188   bth_inface_setup(0);
189
190   /*TPU channel 1 - inicialize (kontrola paketu + pocatecni zpozdeni)*/
191   bth_init_pkt_controll();
192
193   /*nastaveni zarizeni Bth do slave role*/
194   bth_parametr_slave();
195
196   /*kratka cas. pouza pro bth zarizeni - mazani zasilanych dat*/
197
198 //  bth_start_TPU_counter();
199   do {
200     zn_bth=sci_rs232_recch(SCI_CHAN_BTH);
201   } while(bth_get_timer()<11);
202
203   bth_start();
204
205   /* HW setup (TPU, PWM)*/
206   pxmc_set_pwm_tpu();
207
208   /*nastaveni DC motoru*/
209   pxmc_add_pservice_and_mode(4); /*Macro -  mod=4 tj. all motors are DC*/
210
211   /*nekonecna smycka obsluhujici bth, pc ...*/
212   do {
213     zn_bth=sci_rs232_recch(SCI_CHAN_BTH);
214     if(zn_bth!=-1)
215     {
216       bth_recieve_packet(zn_bth);
217     };
218
219     l2cap_send_data(0, 0);
220     bth_send_queue();           /* send built packets if there are any */
221     cmd_bth_processor_run();    /* run command processor on bluetooth */
222     cmd_rs232_processor_run();  /* run command processor on serial line */
223   } while(1);
224   return 0;
225 };
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245 #if 0   //male pohybove demo - pohyb robota
246 //#include "timer.h"
247
248 //  init_timer3();
249
250 //   long int before = -1;
251 //   int a=1;
252   do{
253 /*    long int now = get_timer();
254
255   if (now != before)
256   switch (now % 10) {
257     case 0:
258   pxmc_spd(&mcsX0,a*400,0);
259   pxmc_spd(&mcsX1,-a*700,0);
260   break;
261     case 1:
262   pxmc_spd(&mcsX0,a*700,0);
263   pxmc_spd(&mcsX1,-a*400,0);
264   break;
265     case 2:
266   pxmc_spd(&mcsX0,a*2000,0);
267   pxmc_spd(&mcsX1,-a*1200,0);
268   break;
269     case 3:
270   pxmc_spd(&mcsX0,a*1200,0);
271   pxmc_spd(&mcsX1,-a*2000,0);
272   break;
273     case 4:
274   pxmc_spd(&mcsX0,a*1300,0);
275   pxmc_spd(&mcsX1,-a*1000,0);
276   break;
277     case 5:
278   pxmc_spd(&mcsX0,a*1300,0);
279   pxmc_spd(&mcsX1,-a*1000,0);
280   break;
281     case 6:
282   pxmc_spd(&mcsX0,a*100,0);
283   pxmc_spd(&mcsX1,-a*300,0);
284   break;
285     case 7:
286   pxmc_spd(&mcsX0,a*300,0);
287   pxmc_spd(&mcsX1,-a*100,0);
288   break;
289     case 8:
290   pxmc_spd(&mcsX0,a*2000,0);
291   pxmc_spd(&mcsX1,-a*100,0);
292   break;
293     case 9:
294   pxmc_spd(&mcsX0,a*4000,0);
295   pxmc_spd(&mcsX1,-a*4000,0);
296   if(a>0) a=-1;
297   else a=1;
298   break;
299           
300   }
301     */
302 #endif