21ic问答首页 - SPI1的使能位设置无效,是怎么回事呢?
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位给清零了;重复的写操作的不起作为,这是为啥呢?
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位给清零了;重复的写操作的不起作为,这是为啥呢?
您需要登录后才可以回复 登录 | 注册