X-Git-Url: https://rtime.felk.cvut.cz/gitweb/mirosot.git/blobdiff_plain/ba111b946b45f8493ad0e2b10430c296f2f08cb8..3724f24eb6f2adb9c92b84080ac073346c747da8:/autodemo/mirosot_autodemo.c diff --git a/autodemo/mirosot_autodemo.c b/autodemo/mirosot_autodemo.c new file mode 100644 index 0000000..44942b9 --- /dev/null +++ b/autodemo/mirosot_autodemo.c @@ -0,0 +1,248 @@ +/* +* C Implementation: main_test +* +* Description: + +* +* +* Author: Petr Kovacik , (C) 2006 +* +* Copyright: +* +*/ +#define _USE_EXR_LEVELS 1 +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include "cmd_pxmc.h" + + +/*struktury prikazu cmd*/ +cmd_des_t const cmd_des_help={0, 0,"HELP","prints help for commands", + cmd_do_help,{(char*)&cmd_rs232}}; + +cmd_des_t const *cmd_rs232_default[]={ + + &cmd_des_help, + CMD_DES_CONTINUE_AT, /* list continues at new address */ + (cmd_des_t*)cmd_pxmc_default, + NULL +}; +cmd_des_t const **cmd_bth=cmd_rs232_default; /*cmd prikazy pro bth*/ +cmd_des_t const **cmd_rs232=cmd_rs232_default; /*cmd prikazy pro PC*/ + + +/*struktury charakterizujici motor 0*/ +pxmc_state_t mcsX0={ + pxms_flg:0, + pxms_do_inp:0, + pxms_do_con:0, + pxms_do_out:0, + pxms_do_deb:0, + pxms_do_gen:0, + pxms_ap:0, pxms_as:0, + pxms_rp:155l*256, + pxms_rs:0, //pxms_subdiv:8, + pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10, + pxms_inp_info:(long)TPU_TCNT1,//TPU_TCNT1 /*chanel TPU A,B*/ + pxms_out_info:(long)PWM_PWBFR1A, /*chanel PWM A,B*/ + pxms_ene:0, pxms_erc:0, + pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0, + pxms_me:0x1800, //6144 + pxms_ptirc:40, // 2000 irc per rev, 200/4 steps / + pxms_ptper:1, + pxms_ptptr1:NULL, + pxms_ptptr2:NULL, + pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m| + PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1 +}; + + +/*struktury charakterizujici motor 1*/ +pxmc_state_t mcsX1={ + pxms_flg:0, + pxms_do_inp:0, + pxms_do_con:0, + pxms_do_out:0, + pxms_do_deb:0, + pxms_do_gen:0, + pxms_ap:0, pxms_as:0, + pxms_rp:155l*256, + pxms_rs:0, //pxms_subdiv:8, + pxms_md:8000l<<8, pxms_ms:5000, pxms_ma:10, + pxms_inp_info:(long)TPU_TCNT2, /*chanel TPU C,D*/ + pxms_out_info:(long)PWM_PWBFR1C, /*chanel PWM C,D*/ + pxms_ene:0, pxms_erc:0, + pxms_p:40, pxms_i:0, pxms_d:1, pxms_s1:0, pxms_s2:0, + pxms_me:0x1800, //6144 + pxms_ptirc:40, // 2000 irc per rev, 200/4 steps / + pxms_ptper:1, + pxms_ptptr1:NULL, + pxms_ptptr2:NULL, + pxms_cfg:PXMS_CFG_MD2E_m|PXMS_CFG_HLS_m| //FIXME: nastavit spravne priznaky pro dalsi motorove struktur + PXMS_CFG_HPS_m|PXMS_CFG_HDIR_m|0x1 +}; + +pxmc_state_t *pxmc_main_arr[] = {&mcsX0,&mcsX1}; + +pxmc_state_list_t pxmc_main_list = { + pxml_arr:pxmc_main_arr, + pxml_cnt:sizeof(pxmc_main_arr)/sizeof(pxmc_main_arr[0]) +}; + + + +//******************************************************* + +void unhandled_exception(void) __attribute__ ((interrupt_handler)); + +/*Interrupt routines*/ +void unhandled_exception(void) +{ +}; +//******************************************************** + + +int cmd_rs232_processor_run(void) +{ + int val; + cmd_io_t* cmd_io; + + cmd_io=&cmd_io_rs232; + if(cmd_rs232_line_out(cmd_io)) + return 1; + + if(cmd_rs232_line_in(cmd_io)<=0) + return 0; + + if(cmd_rs232){ + val=proc_cmd_line(cmd_io, cmd_rs232, cmd_io->priv.ed_line.in->buf); + }else{ + val=-CMDERR_BADCMD; + } + + if(cmd_io->priv.ed_line.out->inbuf){ + cmd_io_putc(cmd_io,'\r'); + cmd_io_putc(cmd_io,'\n'); + + }else if(val<0){ + char s[20]; + cmd_io_write(&cmd_io_rs232,"ERROR ",6); + i2str(s,-val,0,0); + cmd_io_write(cmd_io,s,strlen(s)); + cmd_io_putc(cmd_io,'\r'); + cmd_io_putc(cmd_io,'\n'); + } + return 1; +} + +extern void _print(char *str); + + +int main() +{ + + /********************************************************************************/ + *DIO_PJDDR=0xff; /*output gate*/ + *DIO_PEDDR=0xff; /*output gate*/ + *DIO_PEDR=0x60; /*0x0-LED - light all; 0x6 -ENA,ENB=1, LE33CD=0*/ + *DIO_PJDR=0x00; //rozsviceni vsech diod na */ + + + /*priority preruseni - SCI > TPU*/ +/* *SYS_SYSCR|=SYSCR_INTM1m; */ +/* *INT_IPRA=0x22; *INT_IPRB=0x22; *INT_IPRC=0x04; */ +/* *INT_IPRD=0x40; *INT_IPRE=0x44; *INT_IPRF=0x55; */ +/* *INT_IPRG=0x55; *INT_IPRH=0x55; *INT_IPRJ=0x06; */ +/* *INT_IPRK=0x67; *INT_IPRM=0x66; */ + + /*povoleni vsech preruseni atd...*/ + cli(); + excptvec_initfill(unhandled_exception, 0); + + /*nastaveni seriovych linek - Bth, PC*/ + //sci_rs232_setmode(RS232_BAUD_RAW | 3, 0, 0, 2); // HCI - hardcoded 115200 + //sci_rs232_setmode(115200, 0, 0, 2); // HCI + sci_rs232_setmode(19200, 0, 0, sci_rs232_chan_default); //PC + sti(); + + _print("Start\n"); + + /*nastaveni HW (TPU, PWM)*/ + pxmc_set_pwm_tpu(); + + /*nastaveni DC motoru*/ + pxmc_add_pservice_and_mode(4); /*Macro - mod=4 tj. all motors are DC*/ + + /*nekonecna smycka obsluhujici bth, pc ...*/ +/* do{ */ +/* cmd_rs232_processor_run(); /\*sber + odesilani cmd prikazu PC*\/ */ +/* }while(1); */ +#include "timer3.h" + + init_timer3(); + + long int before = get_timer(); + int a=1; + while (1) { + cmd_rs232_processor_run(); /*sber + odesilani cmd prikazu PC*/ + + long int now = get_timer(); + + if (now != before) + switch (now % 10) { + case 0: + pxmc_spd(&mcsX0,a*400,0); + pxmc_spd(&mcsX1,-a*700,0); + break; + case 1: + pxmc_spd(&mcsX0,a*700,0); + pxmc_spd(&mcsX1,-a*400,0); + break; + case 2: + pxmc_spd(&mcsX0,a*2000,0); + pxmc_spd(&mcsX1,-a*1200,0); + break; + case 3: + pxmc_spd(&mcsX0,a*1200,0); + pxmc_spd(&mcsX1,-a*2000,0); + break; + case 4: + pxmc_spd(&mcsX0,a*1300,0); + pxmc_spd(&mcsX1,-a*1000,0); + break; + case 5: + pxmc_spd(&mcsX0,a*1300,0); + pxmc_spd(&mcsX1,-a*1000,0); + break; + case 6: + pxmc_spd(&mcsX0,a*100,0); + pxmc_spd(&mcsX1,-a*300,0); + break; + case 7: + pxmc_spd(&mcsX0,a*300,0); + pxmc_spd(&mcsX1,-a*100,0); + break; + case 8: + pxmc_spd(&mcsX0,a*2000,0); + pxmc_spd(&mcsX1,-a*100,0); + break; + case 9: + pxmc_spd(&mcsX0,a*4000,0); + pxmc_spd(&mcsX1,-a*4000,0); + if(a>0) a=-1; + else a=1; + break; + + } + } +}