您好!
我尝试调试发生故障的 UART、但在调试 UART 的外设存储器时遇到问题。
在我的器件运行几天之后、它不再响应通过 UART 发出的请求、因此我一直在尝试对此进行调试。 我已经验证了 UART 数据以电气方式正确地传输到 UART2引脚、因此我发现这是固件问题。 我连接了一个调试器、发现不再触发 UART ISR。 固件会在各个点启用和禁用 UART RX 和 TX 中断、因此我认为某些地方存在竞态条件、RX 中断无法重新启用、因此我尝试确认或证明这一点。
我检查了 NVIC 寄存器、以确保 UART2中断仍然被启用、也就是被启用。 然后、我检查 UART2外设存储器以查看它启用了哪些中断源、但我无法读取我需要的存储器。 我使用 Eclipse、GDB 和 OpenOCD 来连接到板。 我看到的是、我可以从 UART2的基址读取它的外设存储器、并从偏移量0x00读取到偏移量0x2C、但所有其他存储器都显示为????????????? 。 我认为这通常意味着存储器不存在、或超出可读范围等、或者可能是外设被禁用。 我假设外设已启用、因为它可以工作一段时间、然后停止、并且外设不会在代码中的任何位置被禁用。
我可以从0x00到0x2C 读取的存储器是我所期望的。 我可以看到 UART 数据寄存器中的数据发生了变化、因此 UART 似乎已启用并正在接收数据。 我可以看到数据寄存器和接收状态寄存器中的溢出位被置位(这正是我希望看到 ISR 是否不输出数据的结果)。 但我无法读取偏移量0x38以查看哪些中断被屏蔽、也无法读取偏移量0x3C 以查看原始中断状态等 我还可以成功读取我正在使用的其他 UART 的所有相关存储器、这只是我最感兴趣的存储器、我不能这么做。
重新启动电路板后、我可以正确读取这些存储器位置、但在重新启动后、UART 恢复工作、因此我不太感兴趣。
我不确定我会缺少什么或我可以检查的其他内容。 除了外设被禁用之外、还有一些内存可能无法读取的情况吗? 下次发生时、我可以再次确认外设已启用、但如果启用、我不确定要查看的其他位置。
谢谢、
查尔斯