工具与软件:
尊敬的支持部门:
注意: 下面是我指的产品说明书
- TivaWare 外设驱动程序库用户指南
- 微控制器数据表- TM4C1294KCPDT
我已将微控制器集成到我自己的硬件中。
我的问题是、有时(感觉是随机的)在SysCtlReset()调用 lib 函数后微控制器不会重新启动。 这样做的困难是不容易重现。
因为它不会一直发生后SysCtlReset(),让说,它发生了100次中的1次
退出此状态的唯一方法是完全对其下电上电(或使用 RESET 引脚)以使微启动再次开始
有关我的应用程序的一些额外信息
- 应用从地址0x4000开始、该地址由引导加载程序调用(位于地址0x0000)
- 我只有2个任务在运行时已经发生了这种情况
- 它始终在与代码完全相同的部分发生、即直接在后面发生
SysCtlReset()
为了找到它"崩溃"的情况,我写了一个测试程序
- 操作系统未运行的位置(不启动 BIOS、或让任何任务运行)
- 只有 main()循环正在运行
- 向下计数10秒以强制 SysCtlReset()
- 1个用于控制 LED 的硬件 GPIO
- 1个硬件 UART 以打印一些信息
当我循环这个程序无休止地启动它在某个地方在晚上和第二天早上微崩溃。 因此它发生在该时间段之间的某个地方(在这10秒倒数中的一个)
在10秒倒计时结束后、刚好在 SysCtlReset()我的程序中设置2项内容之前
SysCtlResetBehaviorSet(SYSCTL_ONRST_WDOG0_POR|SYSCTL_ONRST_WDOG1_POR|SYSCTL_ONRST_BOR_POR|SYSCTL_ONRST_EXT_POR);- 打印出一些包含一些 SYSCTL_信息的调试信息、默认情况下是这样的:
"
ClockGet:0x927C00
FlashSectorSizeGet:0x4000
IntStatus:0x00
DeepSleepGet:0x12
LDOSleepGet:0x18
NMiStatus:0x0
PWMClockGet:0x0
BehaviorGet:0xFFFFFFFF
ResetCauseGet:0x10
VoltageEventStatus:0x0
"
我现在很困倦、也许你可以通过回答这2个问题来帮助我进一步改进。
1) 无论我设置的是什么SysCtlResetBehaviorSet()SysCtlResetBehaviorGet()、都会始终返回0xFFFFFFFF、无论我是在启动时还是在关机前执行它、甚至是在之前_Get()。 它仍返回0xFFFFFFFF。 你知道为什么会这样吗? 外设库数据表暗示、这是我可以在没有任何额外条件的情况下配置的东西。 这可能是我做错的某种项目设置吗?
2) 我的10秒倒计时调试信息的输出始终相同(如上所示)、但在发生崩溃情况后、我手动复位(下电上电)时、输出不同
"
ClockGet:0x20C58C0
FlashSectorSizeGet:0x4000
IntStatus:0x00
DeepSleepGet:0x12
LDOSleepGet:0x18
NMiStatus:0x0
PWMClockGet:0x0
BehaviorGet:0xFFFFFFFF
ResetCauseGet:0x2
VoltageEventStatus:0x100
"
我的问题是、您知道VoltageEventStatus()报告值为0x100的意味着什么吗? 数据表仅讨论以下可能值
//***************************************************************************** // // Values used with the SysCtlVoltageEventStatus() and // SysCtlVoltageEventClear() APIs. // //***************************************************************************** #define SYSCTL_VESTAT_VDDBOR 0x00000040 #define SYSCTL_VESTAT_VDDABOR 0x00000010











