ID do artigo: 000083077 Tipo de conteúdo: Solução de problemas Última revisão: 18/11/2014

Por que a SPI SoC Hardware Library (HWLIB) não configura o tamanho do quadro de controle?

Ambiente

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descrição

    A Biblioteca de hardware SoC (HWLIB) pode configurar e controlar os controladores de interface periférica serial (SPI) SoC. A fonte do SPI HWLIB pode ser encontrada no arquivo /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.

    O arquivo alt_spi.c contém uma função, alt_spi_mw_config_set, que configura o Tamanho do quadro de controle. No entanto, isso usa incorretamente o ALT_SPIM_CTLR0_DFS_SET definir macro. Isso faz com que o Tamanho do quadro de controle seja gravado no campo de bits do tamanho do quadro de dados no registrador de controle.

    Resolução

    Para contornar esse problema, substitua o texto de "ALT_SPIM_CTLR0_DFS_SET" na função alt_spi_mw_config_set no arquivo alt_spi.c por "ALT_SPIM_CTLR0_CFS_SET". A função atualizada deve ser:

    //
    Defina os parâmetros de configuração para os registros apropriados para o modo microwire.
    //
    ALT_STATUS_CODE alt_spi_mw_config_set (ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* cfg)
    {
    ALT_STATUS_CODE status = ALT_E_SUCCESS;

    se (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    ALT_E_ERROR de devolução;
    }

    se (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    ALT_E_BAD_ARG de devolução;
    }

    se (cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || > ALT_SPI_MW_SEQUENTIAL cfg->mode
    || > ALT_SPI_MW_DIR_TX cfg->dir)
    {
    ALT_E_ARG_RANGE de devolução;
    }

    Set config parameters to appropriate registers (Definir parâmetros de configuração para registros apropriados)
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    switch (spi_dev->op_mode)
    {
    ALT_SPI_OP_MODE_MASTER do caso:
    mwcr_register = ALT_SPIM_MWCR_MWMOD_SET (cfg->mode)
    | 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, não ALT_SPIM_MWCR_MHS_SET_MSK;

    alt_replbits_word (ALT_SPIM_MWCR_ADDR(spi_dev->locação), mwcr_mask de mwcr_register);
    alt_replbits_word (ALT_SPIM_CTLR0_ADDR(spi_dev->location),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(cfg->ctl_frame_size);
    Quebrar;

    ALT_SPI_OP_MODE_SLAVE do caso:
    mwcr_register = ALT_SPIS_MWCR_MWMOD_SET (cfg->mode)
    | ALT_SPIS_MWCR_MDD_SET (cfg->dir);

    mwcr_mask = ALT_SPIS_MWCR_MWMOD_SET_MSK
    | ALT_SPIS_MWCR_MDD_SET_MSK, não ALT_SPIS_MWCR_MDD_SET_MSK;

    alt_replbits_word (ALT_SPIS_MWCR_ADDR(spi_dev->location), mwcr_mask, mwcr_register);
    alt_replbits_word (ALT_SPIS_CTLR0_ADDR(spi_dev->location),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(cfg->ctl_frame_size);
    Quebrar;
    }

    status de devolução;
    }

    Isso é fixo a partir da versão 15.1 do Altera Embedded Design Suite.

    Produtos relacionados

    Este artigo aplica-se a 1 produtos

    FPGA Arria® V ST SoC

    O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.