A Biblioteca de hardware SoC (HWLIB) pode configurar e controlar os controladores de interface periférica serial (SPI) SoC. A fonte do SPI HWLIB pode ser encontrada no arquivo /ip/altera/hps/altera_hps/hwlib/src/hwmgr/alt_spi.c.
O arquivo alt_spi.c contém uma função, alt_spi_mw_config_set, que configura o Tamanho do quadro de controle. No entanto, isso usa incorretamente o ALT_SPIM_CTLR0_DFS_SET definir macro. Isso faz com que o Tamanho do quadro de controle seja gravado no campo de bits do tamanho do quadro de dados no registrador de controle.
Para contornar esse problema, substitua o texto de "ALT_SPIM_CTLR0_DFS_SET" na função alt_spi_mw_config_set no arquivo alt_spi.c por "ALT_SPIM_CTLR0_CFS_SET". A função atualizada deve ser:
//
Defina os parâmetros de configuração para os registros apropriados para o modo 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 status = ALT_E_SUCCESS;
se (alt_spi_is_enabled(spi_dev) == ALT_E_TRUE)
{
ALT_E_ERROR de devolução;
}
se (alt_spi_checking(spi_dev) == ALT_E_FALSE)
{
ALT_E_BAD_ARG de devolução;
}
se (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 de devolução;
}
Set config parameters to appropriate registers (Definir parâmetros de configuração para registros apropriados)
uint32_t mwcr_register;
uint32_t mwcr_mask;
switch (spi_dev->op_mode)
{
ALT_SPI_OP_MODE_MASTER do caso:
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, não ALT_SPIM_MWCR_MHS_SET_MSK;
alt_replbits_word (ALT_SPIM_MWCR_ADDR(spi_dev->locação), mwcr_mask de 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);
Quebrar;
ALT_SPI_OP_MODE_SLAVE do caso:
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, não ALT_SPIS_MWCR_MDD_SET_MSK;
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);
Quebrar;
}
status de devolução;
}
Isso é fixo a partir da versão 15.1 do Altera Embedded Design Suite.