文章 ID: 000083077 内容类型: 故障排除 上次审核日期: 2014 年 11 月 18 日

为什么 SPI SoC 硬件库 (HWLIB) 不配置控制帧大小?

环境

  • 英特尔® 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

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。