主题中讨论的其他器件:SYSBIOS、 C2000WARE
工具/软件:
您好:
我们正在尝试激活 F2838D 板 CM 内核上的硬件计时器(即所谓的 CPU 计时器)。 它们在 C28 内核上工作正常、但在 CM 内核上无法正常工作。
我们运行的是 SYSBIOS 6.83.00.18、XDCTools 3.61.02.27 和 C2000Ware_3_04_00_00(对于 driverlib)。
在裸机中、通过 driverlib 并在不上拉 SYSBIOS 的情况下、它似乎是有效的。 不过、一旦我们尝试通过 SYSBIOS 运行计时器并使用 ti.sysbios.family.arm.f2838x.Timer 模块、我们就会立即运行到以下代码:
TI.sysbios.family.arm.m3.Hwi:第 1166 行:e_hardFault:Forced
TI.sysbios.family.arm.m3.hwi:第 1247 行:e_busFault:PRECISERR:即时总线故障、确切地址已知、地址:FFFFFFFF
后台线程中 PC = 0x0020349a 时发生异常
后跟寄存器 R0-R15、PSR、ICSR、MMFSR、BFSR UFSR、HFSR、DFSR、MMAR、BFAR、 AFSR。
根据我们尝试运行的特定测试、上述错误总是在不同的变化中出现、但“HardFault: Forced(硬故障:强制)“是一个常数。 有时 busFault 是 PRECISERR、有时是 IMPRECISERR、有时地址为 0、有时是其他已知地址、有时是 F
到目前为止、我们已尝试:
- 通过.cfg 配置计时器
- 在 bios_start () 之前通过 C 代码配置计时器
- 在 BIOS 任务中配置计时器
- 使用 SysBIOS 提供的所有模块: m3.Timer、lm3.Timer、lm4.Timer、f2838x.Timer、hal.Timer(在 Timer.c 文件中,我看到 f2838x.Timer 是唯一定义了正确的 CPU 计时器寄存器的模块 (0x40084000/10/20 ),所以我们将大部分工作集中在那里)
- 尝试 Timer_Params 参数的任何和所有组合
- 尝试 Timer_construct 和 Timer_create(尽管我们想避免堆,所以我们要依靠 Timer_construct )
使用 Timer_create 而不是 Timer_construct 会导致不同的行为、params.runMode 会变为一些乱码值(例如,“:“或“.")“) 一旦将其传递给“Syscall.init"<xmt-block0>“ Timer_Instance_。 但是、我们确实将正确的 runMode 传递给 create 函数、而且它在运行时确实是正确的、直到它尝试将它传递给 init 调用。 是的、我们尝试使用一个静态的全局作用域 Timer_PARAMS 变量。
我还尝试使用 ti.sysbios.KNL.Clock 模块来配置和使用时钟、但我们遇到了相同类型的错误。 似乎任何将 SYSBIOS 与 CPU 计时器外设连接的尝试都会导致硬故障。 看到它们在裸机模式下是如何工作的、我只能猜测、在引导或预引导阶段、SYSBIOS 会以某种方式混乱一些初始配置。
我还尝试在 BIOS_START () 之前启用所有中断并手动启用所有外设,但没有任何作用。
如果我们目前对此问题完全不能提供任何帮助、我们将不胜感激。