CH32V103时钟中断里调用spi函数,一直停在spi函数while语句里,如何解决?

CH32V103时钟中断里调用spi函数,一直停在spi函数while语句里,如何解决?

代码如下:

void TIM3_IRQHandler(void)   //TIM3中断 10ms

{

    short temp_data;

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源

    {

        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源



        if(++tim3_count>=100)

        {

            tim3_count=0;

            tim3_flag=1;

            if(level_time_flag) ++level_time_count;

        }

        adxdata=ADXL345_READ(0x36);

}

u8 ADXL345_READ(u8 add)

{


    cs_low();

// delay_us(10);

     SPI_I2S_SendData(SPI1,(add|0x80)<<8|0x00);

 

    while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);


    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESET);


//delay_us(10);

    cs_high();

   

    return SPI_I2S_ReceiveData(SPI1)&0xff;

 

  }


在中断外部调用该函数,能够正常读取数据。


您好,若不调用spi函数,中断能否正常运行,注意CH32V103中断函数要加中断声明,具体可参考下图。关于SPI函数,可将SPI_I2S_SendData函数放在第一个while判断的后面试一下,若还是卡死在while语句里,麻烦说一下具体卡死在哪个while循环里,后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通。

image.png


只有登录才能回复,可以选择微信账号登录