]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/blob - sw/app/rocon/pxmcc_interface.h
RoCoN: add proper DQ current components controllers for stepper motor.
[fpga/lx-cpu1/lx-rocon.git] / sw / app / rocon / pxmcc_interface.h
1 /*******************************************************************
2   Components for embedded applications builded for
3   laboratory and medical instruments firmware
4
5   pxmcc_interface.h - multi axis motion controller coprocessor
6                interface for access lx-rocon system
7
8   (C) 2001-2014 by Pavel Pisa pisa@cmp.felk.cvut.cz
9   (C) 2002-2014 by PiKRON Ltd. http://www.pikron.com
10
11   This file can be used and copied according to next
12   license alternatives
13    - GPL - GNU Public License
14    - other license provided by project originators
15
16  *******************************************************************/
17
18 #ifndef _PXMCC_INTERFACE_H_
19 #define _PXMCC_INTERFACE_H_
20
21 #include <stdint.h>
22 #include <pxmc.h>
23 #include "pxmcc_types.h"
24
25 static inline
26 pxmcc_data_t *pxmc_rocon_mcc_data(void)
27 {
28   return (pxmcc_data_t *)fpga_tumbl_dmem;
29 }
30
31 static inline
32 pxmcc_axis_data_t *pxmc_rocon_mcs2pxmcc(pxmc_state_t *mcs)
33 {
34   pxmcc_data_t *mcc_data = pxmc_rocon_mcc_data();
35
36   if (mcs->pxms_inp_info >= PXMCC_AXIS_COUNT)
37     return NULL;
38
39   return mcc_data->axis + mcs->pxms_inp_info;
40 }
41
42 static inline
43 void pxmcc_axis_pwm_dq_out(pxmc_state_t *mcs, int pwm_d, int pwm_q)
44 {
45   volatile pxmcc_axis_data_t *mcc_axis = pxmc_rocon_mcs2pxmcc(mcs);
46   mcc_axis->pwm_dq = (pwm_d << 16) | (pwm_q & 0xffff);
47 }
48
49 static inline
50 void pxmcc_axis_enable(pxmc_state_t *mcs, int enable)
51 {
52   volatile pxmcc_axis_data_t *mcc_axis = pxmc_rocon_mcs2pxmcc(mcs);
53   mcc_axis->ccflg = enable? 1: 0;
54 }
55
56 static inline
57 void pxmcc_axis_get_cur_dq_act(pxmc_state_t *mcs, int *p_cur_d, int *p_cur_q)
58 {
59   volatile pxmcc_axis_data_t *mcc_axis = pxmc_rocon_mcs2pxmcc(mcs);
60   uint32_t cur_dq = mcc_axis->cur_dq;
61   *p_cur_d = (int16_t)(cur_dq >> 16);
62   *p_cur_q = (int16_t)(cur_dq);
63 }
64
65 void pxmcc_axis_get_cur_dq_filt(pxmc_state_t *mcs, int *p_cur_d, int *p_cur_q);
66
67 void pxmcc_pxmc_ptofs2mcc(pxmc_state_t *mcs, int enable_update);
68
69 int pxmcc_axis_setup(pxmc_state_t *mcs, int mode);
70
71 #endif /*_PXMCC_INTERFACE_H_*/