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 );
}
传输完成一次数据后,怎么再次启动DMA传输BUFF内容呢?
您好,若你传输一次完成后关闭了DMA,再次开启DMA传输时,往对应的buffer写入数据,设置要传输的数据长度,然后开启DMA传输即可