CH579的SPI0 Slave模式使用DMA和中斷,只要一開始傳輸數(shù)據(jù)就一直進(jìn)中斷,哪怕把spi的引腳斷開也不能使它停止。
麻煩大家看看,以下代碼問題在哪?
void?SPI_SlaveDMARecv(?PUINT8?pbuf,?UINT16?len) { ????R8_SPI0_CTRL_MOD?|=?RB_SPI_FIFO_DIR;?? //fifo用于輸入 ????R16_SPI0_DMA_BEG?=?(UINT32)pbuf;????????????????????????????????????//DMA首地址 ????R16_SPI0_DMA_END?=?(UINT32)(pbuf?+?len);????????????????????????????//DMA尾地址 ????R16_SPI0_TOTAL_CNT=len;?????????????????????????????????????????????//DMA緩沖區(qū)地址 ????R8_SPI0_INT_FLAG?=?RB_SPI_IF_CNT_END|RB_SPI_IF_DMA_END; ????????//清除中斷標(biāo)志???傳輸全部完成????DMA完成 ????R8_SPI0_INTER_EN =?RB_SPI_IE_DMA_END?|?RB_SPI_IE_CNT_END; //設(shè)置中斷源????傳輸全部完成????DMA完成 ????R8_SPI0_CTRL_CFG?|=?RB_SPI_DMA_ENABLE; //DMA使能 ????NVIC_EnableIRQ(SPI0_IRQn);??????????????????????????????????????????//SPI0中斷使能 } void?SPI0_IRQHandler?(void) { if?(R8_SPI0_INT_FLAG?&?RB_SPI_IF_CNT_END) { R8_SPI0_INT_FLAG?=?RB_SPI_IF_CNT_END; //清除傳輸全部完成中斷標(biāo)志 PRINT("SPI:RB_SPI_IF_CNT_END\r\n"); } if?(R8_SPI0_INT_FLAG?&?RB_SPI_IF_DMA_END) { R8_SPI0_INT_FLAG?=?RB_SPI_IF_DMA_END; //清除DMA完成中斷標(biāo)志 PRINT("SPI:RB_SPI_IF_DMA_END\r\n"); } } void?SPI0_Init(void) { GPIOA_ModeCfg(GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15,?GPIO_ModeIN_PU); ????????SPI0_SlaveInit();? SPI_SlaveDMARecv(spi_buffer,SPI_BUFFER_SIZE); ?? }
熱門產(chǎn)品 :
CH182: 以太網(wǎng)PHY收發(fā)器芯片