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

ทําไมไลบรารีฮาร์ดแวร์ SPI SoC (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" ฟังก์ชันที่อัปเดตควรเป็น:

//
ตั้งค่าพารามิเตอร์การกําหนดค่าเป็นรีจิสเตอร์ที่เหมาะสมสําหรับโหมด 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 = 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;
}

if ( cfg->ctl_frame_size > ALT_SPI_MW_CTL_FRAME_SIZE_MAX
|| > ALT_SPI_MW_SEQUENTIAL cfg->mode
|| 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; 2562

alt_replbits_word (ALT_SPIM_MWCR_ADDR(spi_dev->location), mwcr_mask, mwcr_register);
alt_replbits_word (ALT_SPIM_CTLR0_ADDR(spi_dev->location)
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; 2562

alt_replbits_word (ALT_SPIS_MWCR_ADDR(spi_dev->location), mwcr_mask, mwcr_register);
alt_replbits_word (ALT_SPIS_CTLR0_ADDR(spi_dev->location)
ALT_SPIS_CTLR0_CFS_SET_MSK,
ALT_SPIS_CTLR0_CFS_SET (cfg->ctl_frame_size);
แบ่ง;
}

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

นี่แก้ไขได้ตั้งแต่เวอร์ชัน 15.1 ของ Altera SoC Embedded Design Suite

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

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

Arria® V ST SoC FPGA

1

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