你好,
我在GPIO引脚上产生了一个中断。当发生这种中断(每2ms)时,我需要通过DMA启动SPI传输。这一切都有效,但是从中断发生的时间在第一个时钟输出到SPI设备时是〜76微秒。我想将这个时间间隔延伸到<40微秒。
虽然我不知道这一切都花了到达,但绝大多数代码在HW_SPI_READ_BUF()和HW_DMA_CHANNEL_INITIALizialization()中生存。鉴于我的应用程序的工作方式,似乎大多数此代码可以在中断外部完成。将代码留在中断内部仅重置目标缓冲区并启用DMA通道。
它看起来不像有办法使用当前的SDK ......你有没有关于实现这一目标的最佳方式的建议,因为我没有良好的觉得代码需要的部分每次启动传输,哪些部件保持不变,都完成。
谢谢,
马可
设备:
因此,我在HW_SPI中实现了两个新功能。[CH]。除了启用DMA通道之外,首先执行HW_SPI_READ_BUF()是否执行。第二个更新源/目标地址并启用DMA通道。中断延迟减少到36us,这是可接受的。
我不喜欢修改SDK源,所以可能包括这种功能,因为它看起来似乎是一个明显的解决方案,其中SPI连接到单个设备并及时为其提供服务很重要(同样重要的是不花费束在第一的ISR中的时间)。
马可
嗨marcodg,
我会假设您处于缓存模式,并且您面临的是代码执行档位,而是由于设备从闪存中获取代码而停止的事实。从我可以从您的帖子中了解到,尝试减少将HW_SPI_READ_BUF()函数缩短到两个单独的函数,因此您在闪存中更改了代码定位,因此尺寸较小的这两个功能被缓存或保留也许,因此设备没有额外的时间延迟从闪存中获取代码。尝试在从中断中调用的函数中添加__retained_code前缀,以便它们保存在Sysram中,如果我是正确的,那么应该改善系统的响应时间。
谢谢mt_dialog.