]> rtime.felk.cvut.cz Git - mirosot.git/blob - autodemo/mirosot_autodemo.c
44942b9c21b96becfa6bc0b55633c00b7b84989e
[mirosot.git] / autodemo / mirosot_autodemo.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 <cmd_proc.h>
26 #include "cmd_pxmc.h"
27
28
29 /*struktury prikazu cmd*/
30 cmd_des_t const cmd_des_help={0, 0,"HELP","prints help for commands",
31                         cmd_do_help,{(char*)&cmd_rs232}};
32                         
33 cmd_des_t const *cmd_rs232_default[]={
34
35   &cmd_des_help,
36   CMD_DES_CONTINUE_AT,   /* list continues at new address */
37   (cmd_des_t*)cmd_pxmc_default,
38   NULL
39 };
40 cmd_des_t const **cmd_bth=cmd_rs232_default;       /*cmd prikazy pro bth*/
41 cmd_des_t const **cmd_rs232=cmd_rs232_default;     /*cmd prikazy pro PC*/
42
43
44 /*struktury charakterizujici motor 0*/
45 pxmc_state_t mcsX0={
46   pxms_flg:0,
47   pxms_do_inp:0,
48   pxms_do_con:0,
49   pxms_do_out:0,
50   pxms_do_deb:0,
51   pxms_do_gen:0,
52   pxms_ap:0, pxms_as:0,
53   pxms_rp:155l*256,
54   pxms_rs:0, //pxms_subdiv:8,
55   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
56   pxms_inp_info:(long)TPU_TCNT1,//TPU_TCNT1                     /*chanel TPU A,B*/
57   pxms_out_info:(long)PWM_PWBFR1A,                      /*chanel PWM A,B*/
58   pxms_ene:0, pxms_erc:0,
59   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
60   pxms_me:0x1800, //6144
61   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
62   pxms_ptper:1,
63   pxms_ptptr1:NULL,
64   pxms_ptptr2:NULL,
65   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|
66       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
67 };
68
69
70 /*struktury charakterizujici motor 1*/
71 pxmc_state_t mcsX1={
72   pxms_flg:0,
73   pxms_do_inp:0,
74   pxms_do_con:0,
75   pxms_do_out:0,
76   pxms_do_deb:0,
77   pxms_do_gen:0,
78   pxms_ap:0, pxms_as:0,
79   pxms_rp:155l*256,
80   pxms_rs:0, //pxms_subdiv:8,
81   pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10,
82   pxms_inp_info:(long)TPU_TCNT2,                        /*chanel TPU C,D*/
83   pxms_out_info:(long)PWM_PWBFR1C,                      /*chanel PWM C,D*/
84   pxms_ene:0, pxms_erc:0,
85   pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0,
86   pxms_me:0x1800, //6144
87   pxms_ptirc:40, // 2000 irc per rev, 200/4 steps /
88   pxms_ptper:1,
89   pxms_ptptr1:NULL,
90   pxms_ptptr2:NULL,
91   pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m|      //FIXME: nastavit spravne priznaky pro dalsi motorove struktur
92       PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1
93 };
94
95 pxmc_state_t *pxmc_main_arr[] = {&mcsX0,&mcsX1};
96
97 pxmc_state_list_t pxmc_main_list = {
98   pxml_arr:pxmc_main_arr,
99   pxml_cnt:sizeof(pxmc_main_arr)/sizeof(pxmc_main_arr[0])
100 };
101
102
103
104 //*******************************************************
105
106 void  unhandled_exception(void) __attribute__ ((interrupt_handler));
107
108 /*Interrupt routines*/
109 void  unhandled_exception(void)
110 {
111 };
112 //********************************************************
113
114
115 int cmd_rs232_processor_run(void)
116 {
117   int val;
118   cmd_io_t* cmd_io;
119    
120   cmd_io=&cmd_io_rs232;
121   if(cmd_rs232_line_out(cmd_io))
122     return 1;
123         
124   if(cmd_rs232_line_in(cmd_io)<=0)
125     return 0;
126
127   if(cmd_rs232){
128     val=proc_cmd_line(cmd_io, cmd_rs232, cmd_io->priv.ed_line.in->buf);
129   }else{
130     val=-CMDERR_BADCMD;
131   }
132
133   if(cmd_io->priv.ed_line.out->inbuf){
134     cmd_io_putc(cmd_io,'\r');
135     cmd_io_putc(cmd_io,'\n');
136     
137   }else if(val<0){
138     char s[20];
139     cmd_io_write(&cmd_io_rs232,"ERROR ",6);
140     i2str(s,-val,0,0);
141     cmd_io_write(cmd_io,s,strlen(s));
142     cmd_io_putc(cmd_io,'\r');
143     cmd_io_putc(cmd_io,'\n');
144   }
145   return 1;
146 }
147
148 extern void _print(char *str);
149
150
151 int main()
152 {
153
154   /********************************************************************************/
155   *DIO_PJDDR=0xff;      /*output gate*/
156   *DIO_PEDDR=0xff;      /*output gate*/
157   *DIO_PEDR=0x60;       /*0x0-LED - light all; 0x6 -ENA,ENB=1, LE33CD=0*/
158   *DIO_PJDR=0x00;       //rozsviceni vsech diod na */
159   
160
161   /*priority preruseni - SCI > TPU*/
162 /*   *SYS_SYSCR|=SYSCR_INTM1m; */
163 /*   *INT_IPRA=0x22; *INT_IPRB=0x22; *INT_IPRC=0x04;  */
164 /*   *INT_IPRD=0x40; *INT_IPRE=0x44; *INT_IPRF=0x55; */
165 /*   *INT_IPRG=0x55; *INT_IPRH=0x55; *INT_IPRJ=0x06; */
166 /*   *INT_IPRK=0x67; *INT_IPRM=0x66; */
167
168   /*povoleni vsech preruseni atd...*/
169   cli();
170   excptvec_initfill(unhandled_exception, 0);
171
172   /*nastaveni seriovych linek - Bth, PC*/
173   //sci_rs232_setmode(RS232_BAUD_RAW | 3, 0, 0, 2);     // HCI - hardcoded 115200
174   //sci_rs232_setmode(115200, 0, 0, 2); // HCI
175   sci_rs232_setmode(19200, 0, 0, sci_rs232_chan_default); //PC
176   sti();
177
178   _print("Start\n");
179
180   /*nastaveni HW (TPU, PWM)*/
181   pxmc_set_pwm_tpu();
182
183   /*nastaveni DC motoru*/
184   pxmc_add_pservice_and_mode(4); /*Macro -  mod=4 tj. all motors are DC*/
185
186   /*nekonecna smycka obsluhujici bth, pc ...*/
187 /*   do{ */
188 /*     cmd_rs232_processor_run();  /\*sber + odesilani cmd prikazu PC*\/ */
189 /*   }while(1); */
190 #include "timer3.h"
191
192   init_timer3();
193
194   long int before = get_timer();
195   int a=1;
196   while (1) {
197     cmd_rs232_processor_run();  /*sber + odesilani cmd prikazu PC*/
198
199     long int now = get_timer();
200
201     if (now != before)
202       switch (now % 10) {
203         case 0:
204           pxmc_spd(&mcsX0,a*400,0);
205           pxmc_spd(&mcsX1,-a*700,0);
206           break;
207         case 1:
208           pxmc_spd(&mcsX0,a*700,0);
209           pxmc_spd(&mcsX1,-a*400,0);
210           break;
211         case 2:
212           pxmc_spd(&mcsX0,a*2000,0);
213           pxmc_spd(&mcsX1,-a*1200,0);
214           break;
215         case 3:
216           pxmc_spd(&mcsX0,a*1200,0);
217           pxmc_spd(&mcsX1,-a*2000,0);
218           break;
219         case 4:
220           pxmc_spd(&mcsX0,a*1300,0);
221           pxmc_spd(&mcsX1,-a*1000,0);
222           break;
223         case 5:
224           pxmc_spd(&mcsX0,a*1300,0);
225           pxmc_spd(&mcsX1,-a*1000,0);
226           break;
227         case 6:
228           pxmc_spd(&mcsX0,a*100,0);
229           pxmc_spd(&mcsX1,-a*300,0);
230           break;
231         case 7:
232           pxmc_spd(&mcsX0,a*300,0);
233           pxmc_spd(&mcsX1,-a*100,0);
234           break;
235         case 8:
236           pxmc_spd(&mcsX0,a*2000,0);
237           pxmc_spd(&mcsX1,-a*100,0);
238           break;
239         case 9:
240           pxmc_spd(&mcsX0,a*4000,0);
241           pxmc_spd(&mcsX1,-a*4000,0);
242           if(a>0) a=-1;
243           else a=1;
244           break;
245           
246       }
247   }
248 }