Artikel-ID: 000083077 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 18.11.2014

Warum konfiguriert die SPI SoC Hardware Library (HWLIB) die Control Frame Size nicht?

Umgebung

  • Intel® Quartus® II Anmeldungs-Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Beschreibung Die SoC Hardware Library (HWLIB) kann die SoC Serial Peripheral Interface (SPI) Controller konfigurieren und steuern. Die SPI HWLIB-Quelle finden Sie in der Datei /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.  Die Datei alt_spi.c enthält alt_spi_mw_config_set eine Funktion, die die Frame-Steuerungsgröße konfiguriert.  Dies verwendet jedoch fälschlicherweise das ALT_SPIM_CTLR0_DFS_SET Definieren-Makro.  Dies führt dazu, dass die Steuerungs-Frame-Größe stattdessen in das Bitfeld Data Frame Size im Steuerungsregister geschrieben wird.
    Auflösung

    Um dieses Problem zu beheben, ersetzen Sie den Text "ALT_SPIM_CTLR0_DFS_SET" in der alt_spi_mw_config_set Funktion in der alt_spi.c-Datei durch "ALT_SPIM_CTLR0_CFS_SET".  Die aktualisierte Funktion sollte Folgendes sein:

     

    //
    Stellen Sie die Konfigurationsparameter auf die entsprechenden Register für den Microwire-Modus ein.
    //
    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;

    wenn (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    rückgabe ALT_E_ERROR;
    }

    wenn (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    rückgabe ALT_E_BAD_ARG;
    }

    wenn (cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || cfg->modus-> ALT_SPI_MW_SEQUENTIAL
    || cfg->dir > ALT_SPI_MW_DIR_TX)
    {
    rückgabe ALT_E_ARG_RANGE;
    }

    Konfigurationsparameter auf die entsprechenden Register setzen
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    Switch (spi_dev->op_mode)
    {
    fall ALT_SPI_OP_MODE_MASTER:
    mwcr_register = ALT_SPIM_MWCR_MWMOD_SET (cfg->modus)
    | 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));
    Break;

    fall ALT_SPI_OP_MODE_SLAVE:
    mwcr_register = ALT_SPIS_MWCR_MWMOD_SET (cfg->modus)
    | 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));
    Break;
    }

    Rückgabestatus;
    }

     

    Dies wird in einer zukünftigen Version der Altera SoC Embedded Design Suite behoben.

     

     

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Arria® V ST SoC-FPGA

    Disclaimer/Rechtliche Hinweise

    1

    Alle Posts und die Nutzung der Inhalte auf dieser Website unterliegen den Intel.com Nutzungsbedingungen.

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.