请问有没有SPI+DMA中断的例子?

RT,我想用SPI+DMA来优化LVGL。看到S*M32上的例子是DMA传输完后进入DMA中断来通知LVGL传输完成的,请问V208上的DMA中断有没有例程?

void DMA1_Channel5_IRQHandler( void )   __attribute__((interrupt("WCH-Interrupt-fast")));


void DMA1_Channel5_IRQHandler( void )

{

    if( DMA_GetFlagStatus(DMA1_FLAG_TC5)!=RESET )   // 等待传输完成

    {

        DMA_ClearFlag( DMA1_FLAG_TC5 );             // 清除传输完成标志

        lv_disp_flush_ready(disp_drv_p);            // tell lvgl that flushing is done

    }

}



以上是我的中断处理函数,不知道有啥问题没有,DMA传输开始:

SPI_I2S_DMACmd( SPI2, SPI_I2S_DMAReq_Tx, ENABLE);

之后进不来中断。



这里是初始化函数:

void DMA_Tx_Init1( DMA_Channel_TypeDef *DMA_CHx, u32 ppadr, u32 memadr, u16 bufsize )

{

    DMA_InitTypeDef DMA_InitStructure = {0};


    DMA1_MEM_LEN = bufsize;


    RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1, ENABLE );


    DMA_DeInit( DMA_CHx );


    DMA_InitStructure.DMA_PeripheralBaseAddr    = ppadr;

    DMA_InitStructure.DMA_MemoryBaseAddr        = memadr;

    DMA_InitStructure.DMA_DIR                   = DMA_DIR_PeripheralDST;

    DMA_InitStructure.DMA_BufferSize            = bufsize;

    DMA_InitStructure.DMA_PeripheralInc         = DMA_PeripheralInc_Disable;

    DMA_InitStructure.DMA_MemoryInc             = DMA_PeripheralInc_Disable;

    DMA_InitStructure.DMA_PeripheralDataSize    = DMA_PeripheralDataSize_HalfWord;

    DMA_InitStructure.DMA_MemoryDataSize        = DMA_MemoryDataSize_HalfWord;

    DMA_InitStructure.DMA_Mode                  = DMA_Mode_Normal;

    DMA_InitStructure.DMA_Priority              = DMA_Priority_Medium;

    DMA_InitStructure.DMA_M2M                   = DMA_M2M_Disable;

    DMA_Init( DMA_CHx, &DMA_InitStructure );

}



您好,附件为V203参考例程,可以参考一下,基本都是一样的,要注意一下ld文件、启动文件及ch32v20x.h文件的配置

icon_rar.gifCH32V203 SPI DMA中断.zip


image.png



传输完成一次数据后,怎么再次启动DMA传输BUFF内容呢?


您好,若你传输一次完成后关闭了DMA,再次开启DMA传输时,往对应的buffer写入数据,设置要传输的数据长度,然后开启DMA传输即可


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