ID บทความ: 000083077 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 18/11/2014

ทําไม SPI SoC Hardware Library (HWLIB) ไม่กําหนดค่าขนาดเฟรมควบคุม

สิ่งแวดล้อม

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย SoC Hardware Library (HWLIB) สามารถกําหนดค่าและควบคุมคอนโทรลเลอร์ SoC Serial Peripheral Interface (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_SPIM_CTLR0_DFS_SET" ภายในฟังก์ชัน alt_spi_mw_config_set ในไฟล์ alt_spi.c ด้วย "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
    || > ALT_SPI_MW_SEQUENTIAL cfg->mode
    || > ALT_SPI_MW_DIR_TX cfg->dir)
    {
    ส่งคืน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);
    แบ่ง; การแบ่ง
    }

    สถานะการส่งคืน;
    }

     

    ซึ่งจะได้รับการแก้ไขในเวอร์ชันในอนาคตของชุดออกแบบเอ็มเบ็ดเด็ด soC Altera

     

     

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 1 ผลิตภัณฑ์

    Arria® V ST SoC FPGA

    คำประกาศสิทธิ์

    1

    การโพสต์และการใช้เนื้อหาในเว็บไซต์นี้ทั้งหมดอยู่ภายใต้ข้อกำหนดการใช้งานของ Intel.com

    เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้