能否简单描述一下,当且仅当什么条件,ch582m spi0的RB_SPI_IF_CNT_END和RB_SPI_IF_DMA_END可以清除?

如题, 我发现在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?


1719554028632.png

您先按博客中的使用方式规避问题,尚无直接的解决方案。
另外如果您是驱动的灯带,可以不用中断方式,直接使用DMA,规避掉中断标志的问题。


好的 谢谢您的回复


只有登录才能回复,可以选择微信账号登录