问答

汇集网友智慧,解决技术难题

21ic问答首页 - SPI1的使能位设置无效,是怎么回事呢?

GD32 spi1 ST ni struct

SPI1的使能位设置无效,是怎么回事呢?

skay52882022-04-05
本帖最后由 skay5288 于 2022-4-5 23:34 编辑

GD32E230K8T6芯片,在配置SPI1的时候,发现无法使能SPIEN,即SPI_CTL0的第六位,设置为1的时候就是使能SPI,但是在实际测试中发现,采用spi_enable(SPI1);并无法置位SPIEN,这是为何呢?代码如下:
void bf2_a7196_spi_init(void)
{
        uint32_t reg_value = 0;
        spi_parameter_struct spi_init_struct;

    /* enable the gpio clock */
    rcu_periph_clock_enable(RCU_SPI1);

    /* SPI1 parameter config */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
    spi_init_struct.nss                  = SPI_NSS_HARD;
    spi_init_struct.prescale             = SPI_PSC_8;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI1, &spi_init_struct);

    /* set crc polynomial */
        reg_value = SPI_CTL0(SPI1);
        printf("SPI_CTL0 = 0x%08x\r\n", reg_value);
        //reg_value |= (1<<6);

    spi_enable(SPI1);
        reg_value = SPI_CTL0(SPI1);
        while(1 != (reg_value & (1<<6)))
        {
                spi_enable(SPI1);
                reg_value = 0;
                reg_value = SPI_CTL0(SPI1);
        }
}


执行 spi_enable(SPI1);之前,寄存器SPI_CTL0 的值等于 0x00000114;
执行 spi_enable(SPI1);之后,寄存器SPI_CTL0 的值应等于 0x00000154;(即第六位置1);
但是实际上是,执行 spi_enable(SPI1);之后,寄存器SPI_CTL0 的值等于 0x00000110;不但第六位没有置位,反而把第2位给清零了;重复的写操作的不起作为,这是为啥呢?


回答 +关注 6
6876人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册