- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用于半托管的 ATSAMD21E18A 微型。为了使半托管工作,GDB 需要在第一条 bkpt 指令之前“附加”。另一方面,我莫名其妙地发现,如果在我配置 GDB 时已经附加了 GDB,则 SysTick 中断不会触发。如果我想触发 SysTick 中断,我必须执行重置(通过按钮关闭电源)并告诉 GDB 在它还没有配置微时继续(也就是说,它没有发送断点或其他任何东西),然后按 Ctrl-C 以在 SysTick 配置之后但在我们到达 initialise_monitor_handles
之前初始化 Debug模式。 .
我已经验证 start 函数只是复制可重定位的数据段,将零段归零,并设置正确的初始堆栈指针值。我们正在编写没有像 CMSIS 这样的库的代码。
此外,除了需要删除半托管内容之外,我还可以确认在未连接调试器(通过 Atmel SAM-ICE 连接 JLinkGDBServer)时我没有任何问题。
此外,即使中断本身没有触发,SysTick COUNT 仍然正确计数。 ICSR 中的 SysTick 挂起中断位 PENDSTSET 实际上在发生这种情况时已设置。
我的代码如下:
int main()
{
// enable system timer interrupt
SYS_TICK->STATUS = 0; // (CSR)
SYS_TICK->PERIOD = 48000; // (RVR) fire at 1khz for 48mhz clock
SYS_TICK->STATUS = 0b111; // use processor clock, w/ interrupt, and enabled
SYS_TICK->COUNT = 1; // (CVR) avoid high unknown value
// dumb busy loop
util_idle_ms(2000); // <<< I hit Ctrl-C to break here!
initialise_monitor_handles();
// ... more system initialization and everything else
}
SYS_TICK_CSR/STATUS: 0x10007
SYS_TICK_RVR/PERIOD: 48000
SYS_TICK_CVR/COUNT: 5245 (varies of course)
NVC_ISER: 0 (and we expect this since SysTick is considered an exception, and not an interrupt)
DHCSR: 0x30003/0x1030003 (C_MASKINTS is not set; I've seen both values show up)
ICSR: 0x400f00f (it really wants to run the SysTick handler)
PRIMASK: 0
xPSR: 0x2100000f (IPSR is 0x0f/SysTick)
SYS_TICK_CSR/STATUS: 0x10007
SYS_TICK_RVR/PERIOD: 48000
SYS_TICK_CVR/COUNT: 16892 (varies of course)
NVC_ISER: 0
DHCSR: 0x10003/0x1030003 (I've seen both values show up)
ICSR: 0 (SysTick handler already run)
PRIMASK: 0
xPSR: 0x2100000f
load
在 GDB 中执行了软复位。我后来发现,虽然它返回执行复位向量,但实际上并没有复位各种外设和其他寄存器。如果我使用
monitor reset
在 GDB 中执行软重置那么我不需要在延迟期间按 Ctrl-C 来附加 GDB,SysTick 和 SemiHosting 都可以工作。
load
在 GDB 中运行,没有明确的硬复位或软复位。在这种情况下,SysTick 不会触发中断。我的大部分调试都是这样进行的,加载新代码并立即期望它可以工作,以便我可以对其进行评估。刚跑
monitor reset
是比以前更好的解决方法,但我仍然更想知道 SysTick 行为不当的原因!
最佳答案
我会访问 ARM® v6-M 体系结构引用手册,看看您是否可以从中获得一些指导。 https://static.docs.arm.com/ddi0419/d/DDI0419D_armv6m_arm.pdf
观察您未包含在问题中的与 Systick 相关的寄存器状态。如果您无法根据这些寄存器找出问题,请编辑您的问题并在此处发布寄存器值(NVIC ISER、与 systick 配置相关的所有寄存器、DHCSR 以及您认为相关的任何其他寄存器)。他们将是获得更多反馈的关键。
调试停止控制和状态寄存器 (DHCSR) 能够屏蔽包括 systick 在内的中断。也许这是由调试器设置的?
bit 3 of the DHCSR looks relevant
我还将检查 SYST_RVR(系统重载值寄存器)是否设置为正常。
我没有代表对您的问题发表评论,但我希望这能让您朝着富有成效的方向前进:)
关于arm - 如果在启用 GDB 之前连接了 GDB,则不会触发 SysTick 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433886/
我目前正在旁听有关嵌入式系统的在线 edX 类(class),并学习如何使用 SysTick 计时器计算耗时。 Picture of logic I'm referring to Code of lo
我目前正在努力处理一段非常简单的代码,它表明 ARM GCC 的 1 级优化器以某种方式破坏了一个简单的公式。 这使用标准编译器设置 (O1) 在最新的 Atmel 6.2 Studio 上运行。 A
我的 STM32F7 需要高精度中断。任务是在每次滴答时增加一个计数器。 CPU 的频率高达 216 MHz(来自数据表),这意味着可以实现大约 5 ns 的滴答持续时间,对吗? 经过一些互联网研究,
SysTick使用说明 系统节拍 我们有一个基于 STM32G483 MCU (Cortex M4) 的定制板。我们使用 SysTick 作为软件定时器的引用。 SysTick 重载寄存器设置为 0x
我有一个 SysTick 异常处理程序,它计算滴答并调用其他函数(f1、f2、f3),其执行时间可以长于 SysTick 周期。这些函数设置和清除它们的事件状态(全局变量),因此如果发生 SysTic
我目前正在移植我的 DCF77 library (您可能会发现 source code at GitHub )从 Arduino(基于 AVR)到 Arduino Due(ARM Cortex M3)
我有一个用于半托管的 ATSAMD21E18A 微型。为了使半托管工作,GDB 需要在第一条 bkpt 指令之前“附加”。另一方面,我莫名其妙地发现,如果在我配置 GDB 时已经附加了 GDB,则 S
我在获取在运行 uC/OS-III 的 NXP LPC1857 上平稳运行的 LED 的 PWM 信号时遇到问题。仅当我禁用以 1ms 运行的操作系统 systick 时,定期发生的闪烁才会停止。 我
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!