]> rtime.felk.cvut.cz Git - fpga/virtex2/msp_motion.git/blob - software/msp430-virtex2-motion/app/motion.c
use of incremental encoder index signal for phase table alignment
[fpga/virtex2/msp_motion.git] / software / msp430-virtex2-motion / app / motion.c
1 #include <stdio.h>
2 #include <utils.h>
3 #include <cmd_proc.h>
4 #include <pxmc_cmds.h>
5 #include <signal.h>
6 #include "msp430.h"
7
8 #include "pxmc_virtex2.h"
9
10 #define MOTOR_VECTOR      0
11
12 interrupt(MOTOR_VECTOR) motor_isr() {
13   pxmc_sfi_isr();
14 }
15
16
17 cmd_des_t const **cmd_list;
18
19 cmd_des_t const cmd_des_help={
20     0, 0,
21     "HELP","prints help for commands",
22     cmd_do_help,{(char*)&cmd_list}};
23
24 int val;
25 cmd_des_t const cmd_des_val={
26     0, CDESM_OPCHR|CDESM_RW,
27     "VAL","use ':' or '?' to store/read value of an integer variable",
28     cmd_do_rw_int, {(char*)&val}};
29
30 cmd_des_t const cmd_des_halpos={0, CDESM_OPCHR|CDESM_RW,
31         "HALPOS?","HAL phase",cmd_do_reg_short_val,
32         {(char*)pxmc_state_offs(pxms_hal),
33          0}};
34
35
36
37 int cmd_do_mccpwm(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[])
38 {
39     char *p;
40     long val,angle;
41     pxmc_state_t *mcs;
42     if(*param[2]!=':') return -CMDERR_OPCHAR;
43
44     if((mcs=cmd_opchar_getreg(cmd_io,des,param))==NULL) return -CMDERR_BADREG;
45
46     p=param[3];
47     if(si_long(&p,&val,0)<0) return -CMDERR_BADPAR;
48     if(si_fndsep(&p,",")<0) return -CMDERR_BADSEP;
49     if(si_long(&p,&angle,0)<0) return -CMDERR_BADPAR;
50     si_skspace(&p);
51     if(*p) return -CMDERR_GARBAG;
52     printf("ptindx %d HAL %d\n\r",mcs->pxms_ptindx, pxmc_bdc_hal_rd(mcs));
53     //printf("HAL position: %d\n",(char*)pxmc_state_offs(pxms_hal));
54     pxmc_virtex2_set_valangle(mcs, val, angle);
55
56     return 0;
57 }
58
59 cmd_des_t const cmd_des_mccpwm={0, CDESM_OPCHR|CDESM_RW,
60         "MCCPWM?","set PWM vector value and angle",cmd_do_mccpwm,
61         {0}};
62
63 /*cmd_des_t const cmd_des_db={0, CDESM_OPCHR,
64         "DB","DB test",cmd_do_db,
65         {0,
66          0}};
67 */
68
69
70     
71 cmd_des_t const *cmd_pxmc_list[] = {
72   &cmd_des_help,
73   &cmd_des_val,
74   &cmd_des_halpos,
75   &cmd_des_mccpwm,
76   CMD_DES_INCLUDE_SUBLIST(cmd_pxmc_base),
77   CMD_DES_INCLUDE_SUBLIST(cmd_pxmc_deb),
78   NULL
79 };
80
81 cmd_des_t const **cmd_list = cmd_pxmc_list;
82
83 extern cmd_io_t cmd_io_std_line;
84
85 int main()
86 {
87   WDTCTL = WDTPW | WDTHOLD;
88   puts("PXMC motion control running...\n");
89
90   pxmc_initialize();
91
92   eint();
93   
94   while (1) {
95     cmd_processor_run(&cmd_io_std_line, cmd_pxmc_list);
96   }
97 }