1 Reply Latest reply on Nov 21, 2017 11:00 PM by ManaskantD_51

    CyU3PMutex lock incomplete type

      Dear all,

      to get into programming the FX3 I tried to blink the LED on the FX3 Development Kit and tried to establish some debug messages via UART.

      So I took the BootLedBlink Example Project and tried to build the UART function into it. I get a bit confused of what the library source ...FX3... and ...U3P... stands for. Seems to me that every function has a BOOT member and a U3P member. What is the difference between these two?

       

      Nevertheless I now get a compiler error:

       

      'Invoking: Cross ARM C Compiler'

      arm-none-eabi-gcc -mcpu=arm926ej-s -marm -mthumb-interwork -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wall  -g3 -I"C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\/fw_lib/1_3_3/inc" -I"C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\/boot_lib/1_3_3/include" -std=gnu11 -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"

      In file included from C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\/fw_lib/1_3_3/inc/cyu3system.h:28:0,

                       from ../main.c:27:

      C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\/fw_lib/1_3_3/inc/cyu3dma.h:701:16: error: field 'lock' has incomplete type

           CyU3PMutex lock;            /**< Lock for this channel structure. */

       

       

       

       

      I get this error even when I didn't use the cyu3dma.h header file.

       

      Here is an excerpt from the main file:

       

      #include "cyfx3device.h"

      #include "cyfx3utils.h"

      #include "cyfx3gpio.h"

      #include "defines.h"

      #include "cyu3system.h"

      #include "cyu3error.h"

      #include "cyu3system.h"

      #include "cyu3types.h"

      #include "cyu3uart.h"

      #include "cyu3gpio.h"

       

       

      #define FX3_GPIO_TEST_OUT             (50)

      #ifndef NULL

      #define NULL   ((void *) 0)

      #endif

       

      void

      CyFxBulkSrcSinkApplnDebugInit (void)

      {

      ....

      }

       

       

       

       

      int main (void)

      {

          /*CyFx3BootErrorCode_t        status;*/

      CyU3PIoMatrixConfig_t io_cfg;

          CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

          CyBool_t                    value;

       

       

          /* Initialisiere das Gerät */

          CyU3PSysClockConfig_t clockConfig;

          clockConfig.setSysClk400 = CyFalse;

          clockConfig.cpuClkDiv = 2;

          clockConfig.dmaClkDiv = 2;

          clockConfig.mmioClkDiv =2;

          clockConfig.useStandbyClk = CyFalse;

          clockConfig.clkSrc = CY_U3P_SYS_CLK;

          status = CyU3PDeviceInit (&clockConfig);

          if (status != CY_U3P_SUCCESS)

          {

          goto handle_fatal_error;

          }

       

       

          CyFxBulkSrcSinkApplnDebugInit();

          CyU3PDebugPrint (1, "\n\ndebug initialized\r\n");

       

          CyFx3BootDeviceInit (CyTrue);

       

       

          /* Enable the GPIOs for the LED and the switch. */

          io_cfg.isDQ32Bit = CyFalse;

          io_cfg.s0Mode = CY_U3P_SPORT_INACTIVE;

          io_cfg.s1Mode = CY_U3P_SPORT_INACTIVE;

          io_cfg.useUart   = CyTrue;

          io_cfg.useI2C    = CyFalse;

          io_cfg.useI2S    = CyFalse;

          io_cfg.useSpi    = CyFalse;

          io_cfg.lppMode   = CY_U3P_IO_MATRIX_LPP_UART_ONLY;

       

       

       

       

          io_cfg.gpioSimpleEn[0]  = 0;

          io_cfg.gpioSimpleEn[1]  = (1 << (APP_LED_GPIO - 32)) | (1 << (APP_SWITCH_GPIO - 32));

          io_cfg.gpioComplexEn[0] = 0;

          io_cfg.gpioComplexEn[1] = (1 << (APP_LED_GPIO - 32)) | (1 << (APP_SWITCH_GPIO - 32));

          status = CyU3PDeviceConfigureIOMatrix (&io_cfg);

          if (status != CY_FX3_BOOT_SUCCESS)

          {

              return status;

          }

       

       

          /* Flash the LED to indicate that initialization succeeded. */

          CyU3PGpioSetValue (APP_LED_GPIO, CyTrue);

          CyFx3BusyWait (50000);

          CyU3PGpioSetValue (APP_LED_GPIO, CyFalse);

          CyFx3BusyWait (50000);

          CyU3PGpioSetValue (APP_LED_GPIO, CyTrue);

          CyFx3BusyWait (50000);

          CyU3PGpioSetValue (APP_LED_GPIO, CyFalse);

       

       

          /* We keep looping around and copying the state of the SWITCH GPIO onto the LED GPIO. */

          while (1)

          {

          CyU3PGpioSetValue (APP_SWITCH_GPIO, value);

          CyU3PGpioSetValue (APP_LED_GPIO, value);

              //CyFx3BootBusyWait (1000000);

              //CyFx3BootGpioSetValue (APP_LED_GPIO, CyFalse);

              CyFx3BusyWait (50000);

          }

       

       

          return 0;

          handle_fatal_error:

       

       

              /* Cannot recover from this error. */

              while (1);

       

       

      }

        • 1. Re: CyU3PMutex lock incomplete type
          ManaskantD_51

          From the code it looks like you have mixed up the bootLed Example and the BulkSrcSink example.

           

          The boot examples use the boot library which is a lighter version of the library with limited functionality. Generally, the APIs in the boot library have a prefix CyFx3 whereas the main library APIs have a prefix CyU3P.

           

          For getting started, please start with the BulkSourceSink Example which already has a GPIO toggle functionality.