ID del artículo: 000083077 Tipo de contenido: Resolución de problemas Última revisión: 22/08/2023

¿Por qué la biblioteca de hardware del sistema integrado en chip SPI (HWLIB) no configura el tamaño del fotograma de control?

Entorno

  • Edición de suscripción de Intel® Quartus® II
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descripción

    La biblioteca de hardware del sistema integrado en chip (HWLIB) puede configurar y controlar los controladores de interfaz periférica en serie (SPI) del sistema integrado en chip. El origen HWLIB de SPI se puede encontrar en el archivo /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.

    El archivo alt_spi.c contiene una función, alt_spi_mw_config_set, que configura el tamaño del marco de control. Sin embargo, esto utiliza incorrectamente la macro ALT_SPIM_CTLR0_DFS_SET define. Esto hace que el tamaño del fotograma de control se escriba en el campo de bits Tamaño de fotograma de datos en el registro de control.

    Resolución

    Para evitar este problema, reemplace el texto "ALT_SPIM_CTLR0_DFS_SET " dentro de la función alt_spi_mw_config_set en el archivo alt_spi.c con "ALT_SPIM_CTLR0_CFS_SET". La función actualizada debe ser:

    //
    Establezca los parámetros de configuración en los registros apropiados para el modo de microcable.
    //
    ALT_STATUS_CODE alt_spi_mw_config_set(ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* CFG)
    {
    ALT_STATUS_CODE estado = ALT_E_SUCCESS;

    if (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    devolver ALT_E_ERROR;
    }

    if (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    devolver ALT_E_BAD_ARG;
    }

    if ( cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || > ALT_SPI_MW_SEQUENTIAL en modo > CFG
    || cfg->dir > ALT_SPI_MW_DIR_TX)
    {
    devolver ALT_E_ARG_RANGE;
    }

    Establecer los parámetros de configuración en los registros apropiados
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    Conmutador (spi_dev->op_mode)
    {
    Caso ALT_SPI_OP_MODE_MASTER:
    mwcr_register = ALT_SPIM_MWCR_MWMOD_SET(cfg->modo)
    | ALT_SPIM_MWCR_MDD_SET(cfg->dir)
    | ALT_SPIM_MWCR_MHS_SET(cfg->handshake_enabled);

    mwcr_mask = ALT_SPIM_MWCR_MWMOD_SET_MSK
    | ALT_SPIM_MWCR_MDD_SET_MSK
    | ALT_SPIM_MWCR_MHS_SET_MSK;

    alt_replbits_word(ALT_SPIM_MWCR_ADDR(spi_dev->ubicación), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIM_CTLR0_ADDR(spi_dev->ubicación),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Romper;

    Caso ALT_SPI_OP_MODE_SLAVE:
    mwcr_register = ALT_SPIS_MWCR_MWMOD_SET(cfg->modo)
    | ALT_SPIS_MWCR_MDD_SET(cfg->dir);

    mwcr_mask = ALT_SPIS_MWCR_MWMOD_SET_MSK
    | ALT_SPIS_MWCR_MDD_SET_MSK;

    alt_replbits_word(ALT_SPIS_MWCR_ADDR(spi_dev->ubicación), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIS_CTLR0_ADDR(spi_dev->ubicación),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Romper;
    }

    estado de retorno;
    }

    Esto se solucionó a partir de la versión 15.1 del Altera SoC Embedded Design Suite.

    Productos relacionados

    Este artículo se aplica a 1 productos

    FPGA SoC Arria® V ST

    El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.