文章 ID: 000083077 內容類型: 疑難排解 最近查看日期: 2014 年 11 月 18 日

為什麼 SPI SoC 硬體庫 (HWLIB) 不配置控制幀大小?

環境

  • Intel® Quartus® II 訂閱版
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    描述

    SoC 硬體庫(HWLIB)可以配置和控制 SoC 序列周邊介面(SPI)控制器。SPI HWLIB 源可以在 /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c 檔中找到。

    alt_spi.c 檔包含一個函數 alt_spi_mw_config_set,用於配置控制幀大小。但是,這會錯誤地使用ALT_SPIM_CTLR0_DFS_SET定義宏。這會導致將控制幀大小寫入控制寄存器中的資料幀大小位欄位。

    解決方法

    若要變通解決此問題,請將 alt_spi.c 檔中的 alt_spi_mw_config_set 函數中的「ALT_SPIM_CTLR0_DFS_SET」文本替換為「ALT_SPIM_CTLR0_CFS_SET」。更新後的函數應為:

    //
    將配置參數設置為微線模式的適當寄存器。
    //
    ALT_STATUS_CODE alt_spi_mw_config_set(ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* CFG)
    {
    ALT_STATUS_CODE狀態 = ALT_E_SUCCESS;

    if (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    返回ALT_E_ERROR;
    }

    if (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    返回ALT_E_BAD_ARG;
    }

    IF ( CFG->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    ||CFG->mode > ALT_SPI_MW_SEQUENTIAL
    ||cfg->dir > ALT_SPI_MW_DIR_TX)
    {
    返回ALT_E_ARG_RANGE;
    }

    將配置參數設置為適當的寄存器
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    交換器 (spi_dev->op_mode)
    {
    案例ALT_SPI_OP_MODE_MASTER:
    mwcr_register = ALT_SPIM_MWCR_MWMOD_SET(cfg->模式)
    |ALT_SPIM_MWCR_MDD_SET(CFG->目錄)
    |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->位置)、mwcr_mask、mwcr_register);
    alt_replbits_word(ALT_SPIM_CTLR0_ADDR(spi_dev->位置),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(CFG->ctl_frame_size));
    打破;

    案例ALT_SPI_OP_MODE_SLAVE:
    mwcr_register = ALT_SPIS_MWCR_MWMOD_SET(cfg->模式)
    |ALT_SPIS_MWCR_MDD_SET(CFG->目錄);

    mwcr_mask = ALT_SPIS_MWCR_MWMOD_SET_MSK
    |ALT_SPIS_MWCR_MDD_SET_MSK;

    alt_replbits_word(ALT_SPIS_MWCR_ADDR(spi_dev->位置)、mwcr_mask、mwcr_register);
    alt_replbits_word(ALT_SPIS_CTLR0_ADDR(spi_dev->位置),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(CFG->ctl_frame_size));
    打破;
    }

    返回狀態;
    }

    此問題從 Altera SoC 嵌入式設計套件版本 15.1 開始修復。

    相關產品

    本文章適用於 1 產品

    Arria® V ST SoC FPGA

    這個頁面的內容綜合了英文原始內容的人工翻譯譯文與機器翻譯譯文。本內容是基於一般資訊目的,方便您參考而提供,不應視同完整或準確的內容。如果這個頁面的英文版與譯文之間發生任何牴觸,將受英文版規範及管轄。 查看這個頁面的英文版。