CH582F, SPI0 DMA傳輸完成中斷的中斷標(biāo)志位無法清除

在使用SPI0的DMA時, 開啟了DMA傳輸完成中斷, 還沒開始配置DMA, 但是傳輸完成標(biāo)志位已經(jīng)被置位, 在中斷服務(wù)函數(shù)中清除標(biāo)志位無效, 一直進入中斷服務(wù)函數(shù)。

代碼如下

先清除標(biāo)志位, 按照手冊, 給R8_SPI0_INT_FLAG寄存器的第四位置1來清除

之后配置中斷, 開啟中斷

void?prepare_to_send(void)
{
????int?asdtg?=?0;
????IPS_Addr_Set(0,?0,?99,?63);?//?設(shè)置光標(biāo)位置
????????????????????????????????//?memcpy(scr_buffer,?cat_background,?sizeof(scr_buffer));
????????????????????????????????//?SPI0_MasterDMATrans(scr_buffer,?sizeof(scr_buffer));
????//?R8_SPI0_INT_FLAG?=?0xff;
????PRINT("R8_SPI0_INT_FLAG?=?%02X\n",?R8_SPI0_INT_FLAG);
????SPI0_ClearITFlag(SPI0_IT_DMA_END);
????PRINT("After:?R8_SPI0_INT_FLAG?=?%02X\n",?R8_SPI0_INT_FLAG);

????SPI0_ITCfg(1,?SPI0_IT_DMA_END);
????PRINT("L%d\n",?__LINE__);
????PFIC_EnableIRQ(SPI0_IRQn);
????PRINT("L%d\n",?__LINE__);
}
__INTERRUPT
__HIGH_CODE
void?SPI0_IRQHandler(void)
{
????//?SPI0_ClearITFlag(SPI0_IT_DMA_END);
????if?(SPI0_GetITFlag(SPI0_IT_DMA_END))
????{
????????PRINT("In?IRQHandler:?R8_SPI0_INT_FLAG?=?%02X\n",?R8_SPI0_INT_FLAG);
????????SPI0_ClearITFlag(SPI0_IT_DMA_END);
????????PRINT("L%d\n",?__LINE__);
????????PRINT("In?IRQHandler?clear:?R8_SPI0_INT_FLAG?=?%02X\n",?R8_SPI0_INT_FLAG);
????}
}

實際代碼對應(yīng)行數(shù)如下圖

image.png

執(zhí)行結(jié)果(串口接收的數(shù)據(jù))如下圖

image.png

表現(xiàn)現(xiàn)象

829行正常執(zhí)行, 830行開啟中斷, 然后831行未被執(zhí)行

之后全部在執(zhí)行中斷回調(diào)函數(shù), 獲取到的標(biāo)志位為4D, DMA傳輸完成標(biāo)志被置位, 之后對寄存器寫值清標(biāo)志位, 但是清除完后讀取到的值仍為4D, 清除沒有效果。

請問這種情況改如何解決呢

傳輸完成清除標(biāo)志,并注意再修改一下DMA的起始和結(jié)束的地址。配置spi+dma可以參考該博客:

CH58xSPI0中斷DMA - SweetTea_lllpc - 博客園 (cnblogs.com)


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频