ID articolo: 000083077 Tipo di contenuto: Risoluzione dei problemi Ultima recensione: 18/11/2014

Perché la libreria hardware SoC SPI (HWLIB) non configura le dimensioni del frame di controllo?

Ambiente

  • Intel® Quartus® II (in abbonamento)
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descrizione La libreria hardware SoC (HWLIB) può configurare e controllare i controller SoC Serial Peripheral Interface (SPI). L'origine SPI HWLIB è disponibile nel file /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.  Il file alt_spi.c contiene una funzione, alt_spi_mw_config_set, che configura le dimensioni del frame di controllo.  Tuttavia, questa impostazione utilizza in modo errato il ALT_SPIM_CTLR0_DFS_SET definire la macro.  Ciò fa sì che la dimensione del frame di controllo venga scritta nel campo bit Data Frame Size nel registro di controllo.
    Risoluzione

    Per risolvere questo problema, sostituire il testo "ALT_SPIM_CTLR0_DFS_SET" all'interno della funzione alt_spi_mw_config_set nel file alt_spi.c con "ALT_SPIM_CTLR0_CFS_SET".  La funzione aggiornata dovrebbe essere:

     

    //
    Impostare i parametri di configurazione su registri appropriati per la modalità microwire.
    //
    ALT_STATUS_CODE alt_spi_mw_config_set(ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* cfg)
    {
    stato ALT_STATUS_CODE = ALT_E_SUCCESS;

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

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

    if ( 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 di restituzione;
    }

    Impostare i parametri di configurazione su registri appropriati
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    switch (spi_dev->op_mode)
    {
    caso ALT_SPI_OP_MODE_MASTER:
    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;

    alt_replbits_word(ALT_SPIM_MWCR_ADDR(spi_dev->location), mwcr_mask, 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));
    interruzione;

    caso ALT_SPI_OP_MODE_SLAVE:
    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;

    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));
    interruzione;
    }

    stato di restituzione;
    }

     

    Questo verrà risolto in una versione futura della Altera SoC Embedded Design Suite.

     

     

    Prodotti correlati

    Questo articolo si applica a 1 prodotti

    FPGA SoC Arria® V ST

    Disclaimer

    1

    Tutti i post e l'utilizzo dei contenuti su questo sito sono soggetti ai Termini di utilizzo Intel.com.

    Il contenuto di questa pagina è il risultato della combinazione tra la traduzione umana e quella automatica del contenuto originale in lingua inglese. Questo contenuto è fornito soltanto a titolo di informazione generale e non ha pretese di completezza o accuratezza. In presenza di contraddizioni tra la versione in lingua inglese di questa pagina e la sua traduzione, fa fede la versione inglese. Visualizza la versione in lingua inglese di questa pagina.