문서 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;
    }

    만약에 ( 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->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->위치), 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->dir);

    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 Embedded Design Suite 버전 15.1부터 해결되었습니다.

    관련 제품

    이 문서는 다음 항목에 적용됩니다. 1 제품

    Arria® V ST SoC FPGA

    이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.