主题中讨论的其他器件:MSP430FR6043、
工具与软件:
大家好!
我们正在设计 OEM 燃气流量计、以替代基于热线测量的传感器。 测量期间的功耗不是主要问题、但测量速率应尽可能高、以缩短测量死区时间并允许取平均值、从而降低测量值的标准偏差。
使用包含 MSP430FR6043及其集成 USS_A 模块的 EVM430-FR6043完成开发。 I²C 本身很简单:一个 I ² C 接口用于启动/停止测量和读取测量结果、当然还有两个用于实际流量测量的超声波换能器。
固件大致基于示例代码、该代码使用 UART 在循环中执行测量并输出结果。 I²C 进行了修改、以便在主 while (1)循环中尽快进行测量(不再使用计时器)、并将 UART 替换为 μ C 接口。 这一切都能正常工作、但现在我们看到在测量运行时 MCU 随机复位、并且使用 μ I²C 以高速率读出值。
观察结果:
- 在没有 μ I²C 通信的情况下、全速(~160Hz)运行测量不会导致问题。
- 以最大速率运行 μ I²C 事务时停止测量也不会导致问题。
- 仅当 I²C 测量且 μ C 通信发生时才会发生"复位"。
- 该问题只是偶尔出现;在160Hz 的测量频率和200Hz I²C 的事务(100kHz 位时钟)中、通常每分钟发生几次。
- 这些崩溃并不总是会导致真正的 PUC、有时 MCU 看起来只会执行部分初始化代码。
- 这样重新启动后的复位原因(SYSRSTIV)通常为0x16 (看门狗超时)、但(用于测试)我在循环体的开头放置` WDTCTL=WDTPW|WDTHOLD `μ s、因此除非 USS 代码在某个位置启用 WDT、否则肯定不会使用它。
- 在 MCU 重新启动并位于 main ()的开始处之后、会发生 SYSRSTIV 为0x00的情况。
- 将堆栈大小从默认的512字节增加到1k 甚至2k 没有任何帮助。
- 在对 USS_startLowPowerUltrasonicCapture ()和 USS_runAlgorithms ()的调用中禁用 μ I²C 中断似乎可以有效地避免问题、但会严重减慢 μ I²C 流量、时钟延展事件会持续几毫秒(测量和计算的整个持续时间)。
- 仅为两个调用之一禁用中断没有帮助、仍然可以观察到崩溃。
- μ I²C ISR 不直接访问任何 USS 数据结构、只访问在 main.c 中定义和处理的数据
- μ I²C ISR 主要需要5us 来执行、但偶尔需要50us、即需要准备要发射的数据。
- 即使从 while 环路中删除了对共享数据的所有访问、该问题也会出现、只会进行两个 USS 函数调用。
我现在对可能导致这些问题的原因很不清楚。
我的问题:USS 函数运行时中断是否存在任何限制? 例如最大执行时间、可能未使用的某些模块或存储器区域等。
谢谢、此致、
Philipp