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

    경우(alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    ALT_E_ERROR 반환합니다.
    }

    경우(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->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-> 위치), 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->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-> 위치), 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 임베디드 디자인 제품군에서 수정됩니다.

     

     

    관련 제품

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

    Arria® V ST SoC FPGA

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