Cypress技术论坛
直播中

毕建录

8年用户 207经验值
私信 关注
[问答]

请问怎么在UART组件中决定ISR?

你好,
我仍然在使用一个用于照明系统的DMX RS485协议的项目。该应用程序基本上是接收数据(512字节),根据两个CAPSENSE按钮请求的地址将其移位,并从该地址开始发送回。
我所面临的问题是数据流需要连续,至少对于所有512字节加上一些流指示开始。这两个ISR不断地为每个字节开火,因为它需要花很长时间才能读完所有的内容,然后立即把它们全部写出来,并引起灯光的反动反应。
我的问题是,是否有一种方法让接收ISR运行,直到它的缓冲区满了,然后关闭,然后打开发送ISR。然后发送ISR将发送它的512个字节,并关闭,返回到接收ISR。
我会以一种非常复杂的方式,请让我知道如果是这样的情况以及。
谢谢,见附件项目。
汤姆
DMX地址寄存器
4.9兆字节

回帖(9)

姜钰

2019-8-28 08:43:46
不看项目:你在使用组件内部ISRs?它们正在字节式传输到缓冲区,对不对。
你能做什么:
跳过的ISR,使用DMA传输数据,只做一件事情的时候,准备好一个缓冲区写自己的程序,从而在一柄全512字节去(但这可能意味着你在发送到一个接收器缓冲区溢出)使用的ISR,定义缓冲区足够大以容纳例如600字节,然后做他们以外的(在你的主回路)-等到512个字节的接收,将它们拷贝到发送缓冲区,再等待(我建议# 1第一,然后# 3)
举报

王琳

2019-8-28 08:57:23
看项目;-)我建议增加Rx和Tx 600的缓冲区大小。这将使一个内部中断的处理和作为一个结果-禁用中断RX接收字节和TX FIFO空,你现在使用的。不要在这种配置中使用它们!你可以得到通知时,你的字节传输完毕时有一个接收中断。此外,您可以检查字节数收到为止。传输和接收是通过UART组件“背景”是一种真正的双向驱动的中断。
当缓冲区接收你可以读它并将结果用通常不会阻止由于大的缓冲区大小的功能阻断Tx缓冲区。
鲍勃
举报

王琳

2019-8-28 09:06:20
啊,看看你的代码:中断的任何奇怪行为的原因可能是违反了规则!办理人员:
1从不使用中断处理程序中的延迟,既不直接也不间接!
鲍勃
举报

毕建录

2019-8-28 09:21:27
你好,
感谢所有的提示!我有一些问题和意见:
这600个字节有什么特殊性吗?为什么会触发中断?如何访问此中断?你的意思是串口缓冲区,或DMXbuffer软件缓冲区?背景会如何填充?我把延误的主要方法,它似乎是工作好多了。我还必须将DXXOUT设置为优先级1。CapSense不读书很好,由于大量的中断发生。我怎么才能停下来检查一下呢?这可能与你所谈论的600字节触发,让我做别的事情时缓冲区填满。当我将CapSense中断,混乱的数据传输。我没有关于DMA知道,要读一些关于它的更多。使用DMA和串行的例子吗?谢谢你的帮助!
汤姆
举报

更多回帖

发帖
×
20
完善资料,
赚取积分