RT,我想用SPI+DMA來優(yōu)化LVGL??吹絊*M32上的例子是DMA傳輸完后進(jìn)入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 );? ? ? ? ? ? ?// 清除傳輸完成標(biāo)志
? ? ? ? lv_disp_flush_ready(disp_drv_p);? ? ? ? ? ? // tell lvgl that flushing is done
? ? }
}
以上是我的中斷處理函數(shù),不知道有啥問題沒有,DMA傳輸開始:
SPI_I2S_DMACmd( SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
之后進(jìn)不來中斷。
這里是初始化函數(shù):
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 );
}
傳輸完成一次數(shù)據(jù)后,怎么再次啟動DMA傳輸BUFF內(nèi)容呢?
您好,若你傳輸一次完成后關(guān)閉了DMA,再次開啟DMA傳輸時,往對應(yīng)的buffer寫入數(shù)據(jù),設(shè)置要傳輸?shù)臄?shù)據(jù)長度,然后開啟DMA傳輸即可