ID bài viết: 000083077 Loại nội dung: Xử lý sự cố Lần duyệt cuối: 18/11/2014

Tại sao Thư viện Phần cứng SoC SPI (HWLIB) không định cấu hình Kích thước Khung Điều khiển?

Môi Trường

  • Phiên bản đăng ký Intel®Intel® Quartus® II
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Mô tả

    Thư viện phần cứng SoC (HWLIB) có thể cấu hình và điều khiển Bộ điều khiển giao diện ngoại vi nối tiếp SoC (SPI). Nguồn SPI HWLIB có thể được tìm thấy trong tệp /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.

    Tệp alt_spi.c chứa một hàm, alt_spi_mw_config_set, cấu hình Kích thước Khung Điều khiển. Tuy nhiên, điều này không chính xác sử dụng macro xác định ALT_SPIM_CTLR0_DFS_SET. Điều này khiến Kích thước Khung Điều khiển được ghi vào trường bit Kích thước Khung Dữ liệu trong thanh ghi điều khiển thay thế.

    Độ phân giải

    Để khắc phục sự cố này, thay thế văn bản "ALT_SPIM_CTLR0_DFS_SET" trong chức năng alt_spi_mw_config_set trong tệp alt_spi.c với "ALT_SPIM_CTLR0_CFS_SET". Chức năng cập nhật phải là:

    //
    Đặt các tham số cấu hình thành các thanh ghi thích hợp cho chế độ microwire.
    //
    ALT_STATUS_CODE alt_spi_mw_config_set(ALT_SPI_DEV_t *spi_dev,
    const ALT_SPI_MW_CONFIG_t* cfg)
    {
    ALT_STATUS_CODE trạng thái = ALT_E_SUCCESS;

    if (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
    {
    ALT_E_ERROR trở về;
    }

    if (alt_spi_checking(spi_dev) == ALT_E_FALSE)
    {
    trả lại ALT_E_BAD_ARG;
    }

    if ( cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
    || > ALT_SPI_MW_SEQUENTIAL chế độ > CFG
    || CFG->dir > ALT_SPI_MW_DIR_TX)
    {
    trả lại ALT_E_ARG_RANGE;
    }

    Đặt tham số cấu hình thành các thanh ghi thích hợp
    uint32_t mwcr_register;
    uint32_t mwcr_mask;
    Công tắc (spi_dev->op_mode)
    {
    Trường hợp ALT_SPI_OP_MODE_MASTER:
    mwcr_register = ALT_SPIM_MWCR_MWMOD_SET(cfg->chế độ)
    | 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->vị trí), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIM_CTLR0_ADDR(spi_dev->vị trí),
    ALT_SPIM_CTLR0_CFS_SET_MSK,
    ALT_SPIM_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Phá vỡ;

    Trường hợp ALT_SPI_OP_MODE_SLAVE:
    mwcr_register = ALT_SPIS_MWCR_MWMOD_SET(cfg->chế độ)
    | 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->vị trí), mwcr_mask, mwcr_register);
    alt_replbits_word(ALT_SPIS_CTLR0_ADDR(spi_dev->vị trí),
    ALT_SPIS_CTLR0_CFS_SET_MSK,
    ALT_SPIS_CTLR0_CFS_SET(cfg->ctl_frame_size));
    Phá vỡ;
    }

    tình trạng trả hàng;
    }

    Điều này được khắc phục bắt đầu từ phiên bản 15.1 của Bộ thiết kế nhúng SoC Altera.

    Các sản phẩm liên quan

    Bài viết này áp dụng cho 1 sản phẩm

    FPGA SoC Arria® V ST

    Nội dung gốc bằng tiếng Anh trên trang này vừa do con người vừa do máy dịch. Nội dung này chỉ để cung cấp thông tin chung và giúp quý vị thuận tiện. Quý vị không nên tin đây là thông tin hoàn chỉnh hoặc chính xác. Nếu có bất kỳ mâu thuẫn nào giữa bản tiếng Anh và bản dịch của trang này, thì bản tiếng Anh sẽ chi phối và kiểm soát. Xem phiên bản tiếng Anh của trang này.