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 befindet sich in der Datei /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.

    Die Datei alt_spi.c enthält die Funktion alt_spi_mw_config_set, mit der die Größe des Steuerungsrahmens konfiguriert wird. Dadurch wird jedoch fälschlicherweise das ALT_SPIM_CTLR0_DFS_SET define macro verwendet. Dies führt dazu, dass die Steuer-Frame-Größe stattdessen in das Bitfeld Datenrahmengröße im Steuerregister geschrieben wird.

    Lösung

    Um dieses Problem zu umgehen, ersetzen Sie den Text "ALT_SPIM_CTLR0_DFS_SET " in der alt_spi_mw_config_set-Funktion in der Datei alt_spi.c durch "ALT_SPIM_CTLR0_CFS_SET". Die aktualisierte Funktion sollte wie folgt aussehen:

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

    if (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    ALT_E_ERROR zurückgeben;
    }

    if (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    ALT_E_BAD_ARG zurückgeben;
    }

    if ( cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || CFG->Modus > ALT_SPI_MW_SEQUENTIAL
    || cfg->dir > ALT_SPI_MW_DIR_TX)
    {
    ALT_E_ARG_RANGE zurückgeben;
    }

    Setzen Sie die Konfigurationsparameter auf die entsprechenden Register
    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->Lage), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIM_CTLR0_ADDR(spi_dev->Lage),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Brechen;

    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->Lage), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIS_CTLR0_ADDR(spi_dev->Lage),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Brechen;
    }

    Rückgabestatus;
    }

    Dieses Problem wurde ab Version 15.1 der Altera SoC Embedded Design Suite behoben.

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Arria® V ST SoC-FPGA

    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.