duo点 发表于 2023-4-11 14:26

M480系列芯片,为什么在开启PDMA功能后串口的中断就不能触发?

1、开启PDMA后,接收可用中断(RDAINT )不能触发,接收超时中断(RXTOINT) 只有在DMA设置的长度接收满时才触发。怎样才能让串口的中断能祥没开启PDMA时一样触发?

2、在定时读取PDMA缓存中的数据,首先判断当前通道的状态,但我使用PDMA_IS_CH_BUSY()判断时,一直获取不到正在占用的状态

jasontu 发表于 2023-4-12 09:15

、开启PDMA后,接收可用中断(RDAINT )不能触发,接收超时中断(RXTOINT) 只有在DMA设置的长度接收满时才触发。怎样才能让串口的中断能祥没开启PDMA时一样触发?
=>可以用pdma timeout中断处理,因为uart的中断发起已被pdma取值

2、在定时读取PDMA缓存中的数据,首先判断当前通道的状态,但我使用PDMA_IS_CH_BUSY()判断时,一直获取不到正在占用的状态
=>参考https://github.com/OpenNuvoton/M480BSP/tree/master/SampleCode/StdDriver/UART_PDMA

onlycook 发表于 2023-4-12 14:00

1、PDMA就是将UART接收到数据读到RAM中,只要PDMA工作UART 接收区有数据就立刻被搬到RAM这是不会产生RDAINT 中断的。中断读数据和PDMA读数据同时有效那么数据不是乱套了

onlycook 发表于 2023-4-12 14:00

2、PDMA接收到指定数量的数据会发生中断,在PDMA中断里面设置标志,中断外面读出数据比较好。另外,PDMA_IS_CH_BUSY()是UART有数据的时候,触发PDMA传输的那一小段时间才会置位,在定时器中断里面要读到这个bit为1比较困难。如果UART中的数据没有读走,可以检查这个bit
页: [1]
查看完整版本: M480系列芯片,为什么在开启PDMA功能后串口的中断就不能触发?