如題, 我發(fā)現(xiàn)在spi0終端中嘗試寫1清除?RB_SPI_IF_CNT_END但是無效(截圖中正在中斷最后一行斷點, 右側(cè)設(shè)備寄存器列表spi0_int_flag中以及我print打印中斷寄存器,該位都沒有清除.
但是,仿照下面博客, 在截圖80行進行spi_w2812_trans(dma發(fā)送) 代碼中對RB_SPI_IF_CNT_END清除卻成功.
CH579/CH57x/CH573/CH582/CH58x SPI使用 - iot-fan - 博客園 (cnblogs.com)
所以這里非常困惑,? 例如參考代碼中需要給DMA_BEG 設(shè)0? R16_SPI0_DMA_BEG = 0;? ?, 以及在中斷中關(guān)閉COUNT中斷觸發(fā)? R8_SPI0_INTER_EN &= ~RB_SPI_IE_CNT_END;等等, 這對于我可能非必要或者有副作用;
例如由于"DMA 時一次最多可以 收發(fā) 4095 個字節(jié)"我需要在trans方法中循環(huán),每次傳輸不大于4095(圖中為了便于測試設(shè)為100), 那么中斷實測可能在在下一次(等待了TOTAL_COUNT和RB_SPI_IF_DMA_END清零后)發(fā)生, 影響了下一次設(shè)置DMA_BEG的值.
所以這里有幾個交織的問題, 就是a.當(dāng)且僅當(dāng)什么條件這兩個標(biāo)志可清零, b.清零時是否必須有設(shè)DMA_BEG為0之類的workaround?