首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32双中断

STM32双中断
EN

Stack Overflow用户
提问于 2022-09-25 02:16:57
回答 1查看 80关注 0票数 1

我还是STM32家族的新手(几个月以前,我只在ARM7家族工作过)。我正在处理一个时间限制很大的代码。都是用气体编码的,没有C,没有操作系统。我正在使用STM32F730Z8,并将其计时到200 MHz。所有代码在启动时都复制到ITCM中,并从那里执行以提高速度(VTOR也适当地映射向量表)。

问题是我得到了双次调用来中断处理程序。我已经搜索了这里和ST知识库,并看到了一些参考资料,但他们的建议并没有解决它。

一个最小化的示例是将时钟设置为200 MHz,只启用TIM7中断。TIM7是通过以下方式设置的:

代码语言:javascript
复制
write  TIM7_CNT,0
write  TIM7_PSC,9
write  TIM7_ARR,99
write  TIM7_DIER,1
write  TIM7_CR1,1

TIM7处理程序如下所示:

代码语言:javascript
复制
push  {lr}
write  GPIOD_BSRR,1<<13
write  TIM7_SR,0
b  <label> to jump over a bunch of crap
write  GPIOD_BSRR,1<<29
POP  {pc}

“写”只是一个简单的宏:

代码语言:javascript
复制
.macro  write  addr, value
    ldr  r1,=\addr
    ldr  r0,=\value
    str  r0,[r1]
.endm

PD13的使用是一个计时基准--我看我的范围上的那个引脚。我看到的是一对脉冲。它们相隔10 is,所以每对都是由TIM7的单个重装产生的。每对由两个25 of的脉冲组成,间隙为100 of。

这是不可接受的。我只需要在每个计时器滴答上只调用一个处理程序。我已经写了两次给TIM7_SR,以清除UIF位。我尝试在进入处理程序和退出时写信给TIM7_SR。我已经尝试过清除NVIC_ICPR1中的挂起位。我尝试插入额外的无意义代码,以便给它更多的时间来传播清除操作。我真不敢相信没有办法解决这个问题。救命!?!

杰夫·凯西/洛克菲尔德研究公司/ casey@rockfieldresearch.com /拉斯维加斯

EN

回答 1

Stack Overflow用户

发布于 2022-09-25 21:33:15

好吧,我想我已经弄清楚了。我不喜欢,但这是一致的。执行摘要:是的,您需要无意义的代码,而中断清除传播到时钟。然而,时钟基速度与传输该信息的总线速度并不相同。

首先,这个芯片上的时钟非常复杂。我的HCLK (AHB=SYS)运行在200 MHz。APB2总线的最大值为100 MHz,因此需要2的除法器,APB1总线的最大值为50 MHz,因此需要4的分频器。

最初,我在APB1总线设置的除数中输入了一个错误,并给它一个8的除法器。

所有这些都被我设置的TIMPRE=1进一步混淆了。这是一个设置时钟加速的参数。当时钟关闭时,它使时钟在公共汽车上增加2倍的速度,除非巴士预售是1,而不是。当TIMPRE开着时,它让时钟在HCLK运行,如果前置时间是1/2/4,否则它会在总线上设置一个4倍的升压。明白了吗?

一开始我在/8,或者说25 MHz和TIMPRE=1,这给了我4倍的刺激,所以时钟的基础是100 MHz。我需要70 ns的无稽之谈NOP延迟,以允许中断重置传播和避免双重进入到处理程序。

修正后,APB1 /4给出了50 Mhz,TIMPRE=1给出了时钟的基数为200 MHz。我现在只需要7-8无意义的添加,范围基准45 ns。注意这里的区别-- APB1总线现在运行速度快了2倍。

TIM7位于APB1总线上。然后我转而使用TIM9,它位于APB2 bus....that上,最高速度为100 MHz,所以我将除数设置为2。在所有其他方面,这是相同的--注意,TIM7和TIM9都在200 MHz的基础上运行时钟滴答,但是对于TIM9,中断清除时只添加了4到5个NOPs的废话,范围基准为35 ns。在速度更快的外围总线上运行可以使我更快地响应清除中断。

这是个可怕的特征。这不是一个快乐的解决方案,我张贴,这是一个讨厌的解决办法。现在,如果不检查作用域上的双击,我就不敢编写中断服务(至少是短中断服务)。ST应该为自己感到极大的羞愧。我会为此道歉,如果有人找到了一个更好的修复-理想的一些设置参数,我错过了,使这些行为方式,他们应该。如果这是不可避免的,因为架构,也许ST可以挂在AHB总线上的计时器,这可能会完全解决问题。

我在这上面拔了头发。我希望我的帖子能拯救别人的头皮。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73841669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档