]> rtime.felk.cvut.cz Git - mirosot.git/blob - testapp/mirosot_main.c
e86e978619fbaa3365e50f315f99d6fe4a154bd5
[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
34 /*struktury prikazu cmd*/
35 cmd_des_t const cmd_des_help={0, 0,"HELP","prints help for commands",
36                         cmd_do_help,{(char*)&cmd_bth}};
37                         
38 cmd_des_t const *cmd_rs232_default[]={
39
40   &cmd_des_help,
41   (cmd_des_t*)1,
42   (cmd_des_t*)cmd_stm_default,
43   NULL
44 };
45 cmd_des_t const **cmd_bth=cmd_rs232_default;       /*cmd prikazy pro bth*/
46 cmd_des_t const **cmd_rs232=cmd_rs232_default;     /*cmd prikazy pro PC*/
47
48
49 /*struktury charakterizujici motor 0*/
50 pxmc_state_t mcsX0={
51   pxms_flg:0,
52   pxms_do_inp:0,
53   pxms_do_con:0,
54   pxms_do_out:0,
55   pxms_do_deb:0,
56   pxms_do_gen:0,
57   pxms_ap:0, pxms_as:0,
58   pxms_rp:155l*256,
59   pxms_rs:0, //pxms_subdiv:8,
60   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
61   pxms_inp_info:(long)TPU_TCNT1,//TPU_TCNT1                     /*chanel TPU A,B*/
62   pxms_out_info:(long)PWM_PWBFR1A,                      /*chanel PWM A,B*/
63   pxms_ene:0, pxms_erc:0,
64   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
65   pxms_me:0x1800, //6144
66   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
67   pxms_ptper:1,
68   pxms_ptptr1:NULL,
69   pxms_ptptr2:NULL,
70   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|
71       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
72 };
73
74
75 /*struktury charakterizujici motor 1*/
76 pxmc_state_t mcsX1={
77   pxms_flg:0,
78   pxms_do_inp:0,
79   pxms_do_con:0,
80   pxms_do_out:0,
81   pxms_do_deb:0,
82   pxms_do_gen:0,
83   pxms_ap:0, pxms_as:0,
84   pxms_rp:155l*256,
85   pxms_rs:0, //pxms_subdiv:8,
86   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
87   pxms_inp_info:(long)TPU_TCNT2,                        /*chanel TPU C,D*/
88   pxms_out_info:(long)PWM_PWBFR1C,                      /*chanel PWM C,D*/
89   pxms_ene:0, pxms_erc:0,
90   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
91   pxms_me:0x1800, //6144
92   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
93   pxms_ptper:1,
94   pxms_ptptr1:NULL,
95   pxms_ptptr2:NULL,
96   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|      //FIXME: nastavit spravne priznaky pro dalsi motorove struktur
97       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
98 };
99
100 pxmc_state_t *pxmc_main_arr[] = {&mcsX0,&mcsX1};
101
102 #define SUMMOTORS  (sizeof(pxmc_main_arr)/sizeof(pxmc_main_arr[0]))
103
104 pxmc_state_list_t pxmc_main_list = {
105   pxml_arr:pxmc_main_arr,
106   pxml_cnt:SUMMOTORS
107 };
108
109
110
111 //*******************************************************
112
113 void  unhandled_exception(void) __attribute__ ((interrupt_handler));
114 /**
115  * init - shaddow registers, outputs..
116  *
117  * Initializes P1 and P3 shaddow registers,
118  * sets PJ.1, PJ.2, PJ.3 LED as outputs,
119  * initialises interrupt vector.
120  */
121 void init()
122 {
123   /* initialises interrupt vector */
124   excptvec_initfill(unhandled_exception, 0);
125 }
126
127 /*Interrupt routines*/
128 void  unhandled_exception(void)
129 {
130 };
131 //********************************************************
132
133
134 int cmd_rs232_processor_run(void)
135 {
136   int val;
137   cmd_io_t* cmd_io;
138    
139   cmd_io=&cmd_io_rs232;
140   if(cmd_rs232_line_out(cmd_io))
141     return 1;
142         
143   if(cmd_rs232_line_in(cmd_io)<=0)
144     return 0;
145
146   if(cmd_rs232){
147     val=proc_cmd_line(cmd_io, cmd_rs232, cmd_io->priv.ed_line.in->buf);
148   }else{
149     val=-CMDERR_BADCMD;
150   }
151
152   if(cmd_io->priv.ed_line.out->inbuf){
153     cmd_io_putc(cmd_io,'\r');
154     cmd_io_putc(cmd_io,'\n');
155     
156   }else if(val<0){
157     char s[20];
158     cmd_io_write(&cmd_io_rs232,"ERROR ",6);
159     i2str(s,-val,0,0);
160     cmd_io_write(cmd_io,s,strlen(s));
161     cmd_io_putc(cmd_io,'\r');
162     cmd_io_putc(cmd_io,'\n');
163   }
164   return 1;
165 }
166
167
168 int cmd_bth_processor_run(void)
169 {
170   int val;
171   cmd_io_t* cmd_io;
172
173   cmd_io=&cmd_io_bth;
174   if(cmd_bth_line_out(cmd_io))
175     return 1;
176
177   if(cmd_bth_line_in(cmd_io)<=0)
178     return 0;
179
180   if(cmd_bth){
181     val=proc_cmd_line(cmd_io, cmd_bth, cmd_io->priv.ed_line.in->buf);
182   }else{
183     val=-CMDERR_BADCMD;
184   }
185
186   if(cmd_io->priv.ed_line.out->inbuf){
187     cmd_io_putc(cmd_io,'\r');
188     cmd_io_putc(cmd_io,'\n');
189
190   }else if(val<0){
191     char s[20];
192     cmd_io_write(&cmd_io_bth,"ERROR ",6);
193     i2str(s,-val,0,0);
194     cmd_io_write(cmd_io,s,strlen(s));
195     cmd_io_putc(cmd_io,'\r');
196     cmd_io_putc(cmd_io,'\n');
197   }
198   return 1;
199 }
200
201
202
203 int main()
204 {
205   int zn_bth;
206
207   /********************************************************************************/
208   *DIO_PJDDR=0xff;      /*output gate*/
209   *DIO_PEDDR=0xff;      /*output gate*/
210   *DIO_PEDR=0x60;       /*0x0-LED - light all; 0x6 -ENA,ENB=1, LE33CD=0*/
211   *DIO_PJDR=0x00;       //rozsviceni vsech diod na */
212   
213
214   /*priority preruseni - SCI > TPU*/
215   *SYS_SYSCR|=SYSCR_INTM1m;
216   *INT_IPRA=0x22; *INT_IPRB=0x22; *INT_IPRC=0x04; 
217   *INT_IPRD=0x40; *INT_IPRE=0x44; *INT_IPRF=0x55;
218   *INT_IPRG=0x55; *INT_IPRH=0x55; *INT_IPRJ=0x06;
219   *INT_IPRK=0x67; *INT_IPRM=0x66;
220
221   /*povoleni vsech preruseni atd...*/
222   cli();
223   init();
224
225   /*nastaveni seriovych linek - Bth, PC*/
226   //sci_rs232_setmode(RS232_BAUD_RAW | 3, 0, 0, 2);     // HCI - hardcoded 115200
227   sci_rs232_setmode(115200, 0, 0, 2);   // HCI
228   sci_rs232_setmode(19200, 0, 0, sci_rs232_chan_default); //PC
229   sti();
230
231   /*inicializace bluetooth*/
232   bth_init();
233
234   /*inicializace komunikacnich datovych I/O bufferu */
235   bth_inface_setup(0);
236
237   /*TPU kanal 1 - inicialize (kontrola paketu + pocatecni zpozdeni)*/
238   bth_init_pkt_controll();
239
240   /*nastaveni zarizeni Bth do slave role*/
241   bth_parametr_slave();
242
243   /*kratka cas. pouza pro bth zarizeni - mazani zasilanych dat*/
244
245 //  bth_start_TPU_counter();
246   do
247   {
248     zn_bth=sci_rs232_recch(2);
249   }while(bth_get_timer()<11);
250   bth_start();
251
252   /*nastaveni HW (TPU, PWM)*/
253   pxmc_set_pwm_tpu(SUMMOTORS);
254
255   /*nastaveni DC motoru*/
256   pxmc_add_pservice_and_mode(4); /*Macro -  mod=4 tj. all motors are DC*/
257
258   /*nekonecna smycka obsluhujici bth, pc ...*/
259   do{
260     zn_bth=sci_rs232_recch(2);
261     if(zn_bth!=-1)
262     {
263       bth_recieve_packet(zn_bth);
264     };
265
266     l2cap_send_data(0, 0);
267     bth_send_queue();           /*odesli sestavene pakety, pokod jsou*/
268     cmd_bth_processor_run();    /*sber + odesilani cmd prikazu bth*/
269     cmd_rs232_processor_run();  /*sber + odesilani cmd prikazu PC*/
270     
271   }while(1);
272   return 0;
273 };
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293 #if 0   //male pohybove demo - pohyb robota
294 //#include "timer.h"
295
296 //  init_timer3();
297
298 //   long int before = -1;
299 //   int a=1;
300   do{
301 /*    long int now = get_timer();
302
303   if (now != before)
304   switch (now % 10) {
305     case 0:
306   pxmc_spd(&mcsX0,a*400,0);
307   pxmc_spd(&mcsX1,-a*700,0);
308   break;
309     case 1:
310   pxmc_spd(&mcsX0,a*700,0);
311   pxmc_spd(&mcsX1,-a*400,0);
312   break;
313     case 2:
314   pxmc_spd(&mcsX0,a*2000,0);
315   pxmc_spd(&mcsX1,-a*1200,0);
316   break;
317     case 3:
318   pxmc_spd(&mcsX0,a*1200,0);
319   pxmc_spd(&mcsX1,-a*2000,0);
320   break;
321     case 4:
322   pxmc_spd(&mcsX0,a*1300,0);
323   pxmc_spd(&mcsX1,-a*1000,0);
324   break;
325     case 5:
326   pxmc_spd(&mcsX0,a*1300,0);
327   pxmc_spd(&mcsX1,-a*1000,0);
328   break;
329     case 6:
330   pxmc_spd(&mcsX0,a*100,0);
331   pxmc_spd(&mcsX1,-a*300,0);
332   break;
333     case 7:
334   pxmc_spd(&mcsX0,a*300,0);
335   pxmc_spd(&mcsX1,-a*100,0);
336   break;
337     case 8:
338   pxmc_spd(&mcsX0,a*2000,0);
339   pxmc_spd(&mcsX1,-a*100,0);
340   break;
341     case 9:
342   pxmc_spd(&mcsX0,a*4000,0);
343   pxmc_spd(&mcsX1,-a*4000,0);
344   if(a>0) a=-1;
345   else a=1;
346   break;
347           
348   }
349     */
350 #endif