]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/blob - sw/app/rocon/pxmcc_interface.h
2ffeccf016d81125debd34bda6883ee89a6c6aa9
[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 <pxmc.h>
22 #include "pxmcc_types.h"
23
24 static inline
25 pxmcc_data_t *pxmc_rocon_mcc_data(void)
26 {
27   return (pxmcc_data_t *)fpga_tumbl_dmem;
28 }
29
30 static inline
31 pxmcc_axis_data_t *pxmc_rocon_mcs2pxmcc(pxmc_state_t *mcs)
32 {
33   pxmcc_data_t *mcc_data = pxmc_rocon_mcc_data();
34
35   if (mcs->pxms_inp_info >= PXMCC_AXIS_COUNT)
36     return NULL;
37
38   return mcc_data->axis + mcs->pxms_inp_info;
39 }
40
41 static inline
42 void pxmcc_axis_pwm_dq_out(pxmc_state_t *mcs, int pwm_d, int pwm_q)
43 {
44   volatile pxmcc_axis_data_t *mcc_axis = pxmc_rocon_mcs2pxmcc(mcs);
45   mcc_axis->pwm_dq = (pwm_d << 16) | (pwm_q & 0xffff);
46 }
47
48 static inline
49 void pxmcc_axis_enable(pxmc_state_t *mcs, int enable)
50 {
51   volatile pxmcc_axis_data_t *mcc_axis = pxmc_rocon_mcs2pxmcc(mcs);
52   mcc_axis->ccflg = enable? 1: 0;
53 }
54
55 void pxmcc_pxmc_ptofs2mcc(pxmc_state_t *mcs, int enable_update);
56
57 int pxmcc_axis_setup(pxmc_state_t *mcs, int mode);
58
59 #endif /*_PXMCC_INTERFACE_H_*/