ID de l'article: 000083077 Type de contenu: Dépannage Dernière révision: 18/11/2014

Pourquoi la bibliothèque matérielle SPI SoC (HWLIB) ne configure-t-elle pas la taille de la trame de contrôle ?

Environnement

  • Édition d'abonnement Intel® Quartus® II
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descriptif

    La bibliothèque matérielle SoC (HWLIB) peut configurer et contrôler les contrôleurs d’interface périphérique série (SPI) SoC. La source HWLIB SPI se trouve dans le fichier /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.

    Le fichier alt_spi.c contient une fonction, alt_spi_mw_config_set, qui configure la taille de trame de contrôle. Toutefois, cela utilise de manière incorrecte la macro ALT_SPIM_CTLR0_DFS_SET définition. Cela entraîne l’écriture de la taille de la trame de contrôle dans le champ de bits Taille de la trame de données dans le registre de contrôle à la place.

    Résolution

    Pour contourner ce problème, remplacez le texte « ALT_SPIM_CTLR0_DFS_SET » dans la fonction alt_spi_mw_config_set dans le fichier alt_spi.c par « ALT_SPIM_CTLR0_CFS_SET ». La fonction mise à jour doit être :

    //
    Définissez les paramètres de configuration sur les registres appropriés pour le mode microfil.
    //
    ALT_STATUS_CODE alt_spi_mw_config_set(ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* cfg)
    {
    ALT_STATUS_CODE statut = ALT_E_SUCCESS;

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

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

    if ( cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || > ALT_SPI_MW_SEQUENTIAL cfg->mode
    || cfg->dir > ALT_SPI_MW_DIR_TX)
    {
    retourner ALT_E_ARG_RANGE;
    }

    Définir les paramètres de configuration sur les registres appropriés
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    Commutateur (spi_dev->op_mode)
    {
    Cas 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->emplacement), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIM_CTLR0_ADDR(spi_dev->localisation),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(CFG->ctl_frame_size));
    Pause;

    Cas 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->emplacement), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIS_CTLR0_ADDR(spi_dev->emplacement),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(CFG->ctl_frame_size));
    Pause;
    }

    l’état du retour;
    }

    Ce problème est résolu à partir de la version 15.1 de la suite Altera SoC Embedded Design.

    Produits associés

    Cet article concerne 1 produits

    FPGA SoC Arria® V ST

    Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.