inurl 发表于 2013-2-20 20:11 
楼上的一个个版主都是站着说话不腰痛,开口闭口DMA, 也不想下到底能不能行, 真浮躁!!! ...
谁浮躁?我看是你吧,你自己先入为主的想着要每个字节都中断,自己脑袋里有个框框,还想把别人的意见硬往你这个框框里套。
看看你所谓的解决办法,还需要一个额外的硬件定时器,真是多余又浪费,而且还要 PCB 配合,虽然能实现功能需求,但实在是笨办法,你仔细看看我在10楼的提示,如果满足要求,那么这种方法使用 DMA + UART idle 中断是最理想的:设置 DMA 接收长度为缓冲区最大长度,并使能 idle 中断,然后启动 UART 和 DMA 开始接收,如果数据是一个一个紧接着的,即上一字节的结束位与下一字节的起始位之间的隔间不超过一个字节的传输时间,这个时间是 idle 的触发时间门限,那么数据就一个一个地被 DMA 保存到缓冲区;如果一个字节接收完成后,下个字节在 idle 门限时间内仍没有到来,那么 idle 中断将被触发,意思就是表示一个 packet 已经结束,你可以到 DMA 的当前传输指针寄存器中找到实际传输了多少字节,在 idle 中断处理中,你需要停止 DMA,因为 DMA 并没有全部传输指定的长度。 |