如题, 我发现在spi0终端中尝试写1清除 RB_SPI_IF_CNT_END但是无效(截图中正在中断最后一行断点, 右侧设备寄存器列表spi0_int_flag中以及我print打印中断寄存器,该位都没有清除.
但是,仿照下面博客, 在截图80行进行spi_w2812_trans(dma发送) 代码中对RB_SPI_IF_CNT_END清除却成功.
CH579/CH57x/CH573/CH582/CH58x SPI使用 - iot-fan - 博客园 (cnblogs.com)
所以这里非常困惑, 例如参考代码中需要给DMA_BEG 设0 R16_SPI0_DMA_BEG = 0; , 以及在中断中关闭COUNT中断触发 R8_SPI0_INTER_EN &= ~RB_SPI_IE_CNT_END;等等, 这对于我可能非必要或者有副作用;
例如由于"DMA 时一次最多可以 收发 4095 个字节"我需要在trans方法中循环,每次传输不大于4095(图中为了便于测试设为100), 那么中断实测可能在在下一次(等待了TOTAL_COUNT和RB_SPI_IF_DMA_END清零后)发生, 影响了下一次设置DMA_BEG的值.
所以这里有几个交织的问题, 就是a.当且仅当什么条件这两个标志可清零, b.清零时是否必须有设DMA_BEG为0之类的workaround?