]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control-pxmc.git/commitdiff
RPi PXMC Test: extend application to work on Ti AM437x and Xilinx Zynq.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Thu, 2 Mar 2017 11:56:13 +0000 (12:56 +0100)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Thu, 2 Mar 2017 11:56:13 +0000 (12:56 +0100)
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
src/app/rpi-pmsm-test1/Makefile.omk
src/app/rpi-pmsm-test1/appl_defs.h
src/app/rpi-pmsm-test1/appl_main.c
src/app/rpi-pmsm-test1/appl_pxmc.c
src/app/rpi-pmsm-test1/appl_pxmc.h
src/app/rpi-pmsm-test1/appl_pxmccmds.c

index b2ad2cf0f007c0ca17b950bab66cc866a9eae031..fb448810a0b497ca7c150f31d7d6edd600076f7b 100644 (file)
@@ -5,6 +5,8 @@ default_CONFIG  = CONFIG_APP_RPI_PMSM_T1=x
 default_CONFIG += CONFIG_APP_RPI_PMSM_T1_WITH_ULAN=x
 default_CONFIG += CONFIG_APP_RPI_PMSM_T1_WITH_SUITK=x
 default_CONFIG += CONFIG_APP_RPI_PMSM_T1_WITH_SIM_POSIX=x
+default_CONFIG += CONFIG_APP_RPI_PMSM_T1_WITH_ZYNQ_DRV=x
+default_CONFIG += CONFIG_APP_RPI_PMSM_T1_SETUP_CLKOUT=y
 default_CONFIG += CONFIG_OC_CMDPROC=x CONFIG_PXMC=x CONFIG_PXMC_COORDMV=x
 
 ifeq ($(CONFIG_APP_RPI_PMSM_T1),y)
@@ -21,9 +23,13 @@ rpi_pmsm_t1_SOURCES  = appl_main.c
 
 rpi_pmsm_t1_SOURCES += appl_utils.c
 
+ifneq ($(CONFIG_APP_RPI_PMSM_T1_WITH_ZYNQ_DRV),y)
 rpi_pmsm_t1_SOURCES += rpi_gpio.c
 rpi_pmsm_t1_SOURCES += rpi_gpclk.c
 rpi_pmsm_t1_SOURCES += rpi_spi.c
+else
+rpi_pmsm_t1_SOURCES += zynq_3pmdrv1_mc.c
+endif
 
 ifeq ($(CONFIG_OC_CMDPROC),y)
 rpi_pmsm_t1_SOURCES += appl_cmdproc.c
index f5b3fcf4ba63ddbcb58f38768d82d7924855748d..cee646ae9cd48983236563f571e021fd69043bea 100644 (file)
@@ -7,6 +7,18 @@
 
 #include "appl_config.h"
 
+#ifdef CONFIG_APP_ROCON_WITH_SUITK
+#define APPL_WITH_SUITK
+#endif /*CONFIG_APP_ROCON_WITH_SUITK*/
+
+#ifdef CONFIG_APP_RPI_PMSM_T1_WITH_ZYNQ_DRV
+#define APPL_WITH_ZYNQ_DRV
+#endif /*CONFIG_APP_RPI_PMSM_T1_WITH_ZYNQ_DRV*/
+
+#ifdef CONFIG_APP_RPI_PMSM_T1_SETUP_CLKOUT
+#define APPL_RPI_PMSM_SETUP_CLKOUT
+#endif /*CONFIG_APP_RPI_PMSM_T1_SETUP_CLKOUT*/
+
 #include <stdint.h>
 
 /*
index eff968e03d374c24bfb92a1013bd2494dff5d78f..2f49dbf92ab55b60f9b544c18ca877304005b7a2 100644 (file)
@@ -4,8 +4,13 @@
 
 #include "appl_defs.h"
 #include "appl_utils.h"
+
+#ifdef APPL_WITH_ZYNQ_DRV
+#include "zynq_3pmdrv1_mc.h"
+#else
 #include "rpi_gpio.h"
 #include "rpi_gpclk.h"
+#endif
 
 void appl_stop(void)
 {
@@ -13,7 +18,9 @@ void appl_stop(void)
   fprintf(stderr, "Application abnormal termination\n");
   sleep(1);
   /* stop clock pin driving FPGA to ensure failase state */
+ #ifndef APPL_WITH_ZYNQ_DRV
   rpi_gpio_direction_output(4, 0);
+ #endif
 }
 
 /***********************************/
@@ -21,6 +28,8 @@ int main(int argc, char *argv[])
 {
   appl_setup_environment(argv[0]);
 
+#ifdef APPL_RPI_PMSM_SETUP_CLKOUT
+
   /* initialize 50 Mhz clock output on gpio 4 */
   if (rpi_peripheral_registers_map() < 0) {
     fprintf(stderr, "%s: rpi_peripheral_registers_map failed\n", argv[0]);
@@ -37,6 +46,8 @@ int main(int argc, char *argv[])
     return -1;
   }
 
+#endif /* APPL_RPI_PMSM_SETUP_CLKOUT */
+
   pxmc_initialize();
 
   do {
index 5c3b486aa50a8f3d50fd586707d328c2a640e1f9..a6ce2966043da6f3b9c2070e49fab39960035102 100644 (file)
 #include "appl_pxmc.h"
 #include "appl_utils.h"
 
+#ifdef APPL_WITH_ZYNQ_DRV
+#include "zynq_3pmdrv1_mc.h"
+typedef z3pmdrv1_state_t spimc_state_t;
+#define SPIMC_PWM_ENABLE   Z3PMDRV1_PWM_ENABLE
+#define SPIMC_PWM_SHUTDOWN Z3PMDRV1_PWM_SHUTDOWN
+#define SPIMC_CHAN_COUNT   Z3PMDRV1_CHAN_COUNT
+#define spimc_transfer     z3pmdrv1_transfer
+#define spimc_init         z3pmdrv1_init
+#else
 #include "pxmc_spimc.h"
+#endif
 
 pthread_t pxmc_base_thread_id;
 
@@ -497,8 +507,12 @@ int pxmc_fill_ptscale_for_sin_fixed(pxmc_state_t *mcs)
   return 0;
 }
 
+
 spimc_state_t spimc_state0 = {
- .spi_dev = "/dev/spidev0.1",
+ #ifndef APPL_WITH_ZYNQ_DRV
+ //.spi_dev = "/dev/spidev0.1",
+ .spi_dev = "/dev/spidev1.0",
+ #endif /*APPL_WITH_ZYNQ_DRV*/
 };
 
 pxmc_spimc_state_t mcs0 =
index f8443fadbcd6a4b2bdd5b555b8776b7eaae5ed7d..ccf585c592e57cecbc5dca2b65b787bc2191c7c3 100644 (file)
 #include <pxmc.h>
 
 struct spimc_state_t;
+struct z3pmdrv1_state_t;
 
 typedef struct pxmc_spimc_state_t {
   pxmc_state_t base;
+ #ifdef APPL_WITH_ZYNQ_DRV
+  struct z3pmdrv1_state_t *spimc_state;
+ #else
   struct spimc_state_t *spimc_state;
+ #endif
   uint32_t steps_pos_prev;
   uint32_t cur_d_cum_prev;
   uint32_t cur_q_cum_prev;
index 63bd7a737998d1f9387ffdba513da71444b8ab8f..9621ec8c4deb44ab3720ec94e1295258b5781061 100644 (file)
 
 #include "appl_defs.h"
 #include "appl_pxmc.h"
+
+#ifdef APPL_WITH_ZYNQ_DRV
+#include "zynq_3pmdrv1_mc.h"
+typedef z3pmdrv1_state_t spimc_state_t;
+#define SPIMC_PWM_ENABLE   Z3PMDRV1_PWM_ENABLE
+#define SPIMC_PWM_SHUTDOWN Z3PMDRV1_PWM_SHUTDOWN
+#define SPIMC_CHAN_COUNT   Z3PMDRV1_CHAN_COUNT
+#else
 #include "pxmc_spimc.h"
+#endif
 
 #define SPIMC_LOG_CURRENT_SIZE 1024*1024
 
@@ -239,6 +248,11 @@ int cmd_do_currentcal(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]
     pxmc_dbgset(mcs, NULL, 0);
     spimc_currentcal_setup(spimc, cucalst, skip_accum,
                            pwm1, pwm1_en, pwm2, pwm2_en, pwm3, pwm3_en);
+
+    printf("cycle %d\n",cycle);
+    char buff[10];
+    fgets(buff, 9, stdin);
+
     pxmc_dbgset(mcs, spimc_currentcal_accum, 1);
     sem_wait(&spimc_currentcal_sem);