2026/1/27 5:56:49
网站建设
项目流程
这几年做啥网站能致富,网站对比分析,企业名录搜索软件靓号怎么搜,网站布局框架一、寄存器映射 内核里面的cpu主要通过D-Bus,I-Bus,S-Bus与外设沟通#xff0c;其中S-Bus是主要用来访问外设的 当我们访问一个外设地址时#xff0c;数据会从cpu然后通过S-Bus再到AHB总线矩阵#xff0c;经过某些处理到达APB(挂载着外设) 但APB_BUS也不知道这个地址是什么…一、寄存器映射内核里面的cpu主要通过D-Bus,I-Bus,S-Bus与外设沟通其中S-Bus是主要用来访问外设的当我们访问一个外设地址时数据会从cpu然后通过S-Bus再到AHB总线矩阵经过某些处理到达APB(挂载着外设)但APB_BUS也不知道这个地址是什么只有cpu知道然后被转译到apb只知道在自己总线上寻址访问后续需要联通从memory map -图示-bootloadr-再到bus总线-芯片架构二中断悬起|中断的延迟|中断时怎么被处理的|产生单一一次中断的中断处理过程1.当外设发生了中断就会在总线上发起一次请求最后就会传到NVIC然后将特定的寄存器此处为悬起寄存器悬起寄存器会引起内部异常然后会通知cpu去响应异常处理器此时会从线程模式转变为handle模式当检测到有悬起就会去写解悬寄存器进入了中断函数悬起马上就会解悬拓展三、了解持续触发中断的中断处理过程与上面只触发一次不同当有持续的中断到来第一次处理过程是一样的当进入了中断服务函数马上就会清除悬起标志位但是中断服务函数还没退出的时候因为写了解悬寄存器所以悬起寄存器不会悬起当cpu退出中断服务后当外部中断还再触发此时悬起寄存器再次挂起处理器会再次进入handle模式一个重要的特例电平触发中断对于电平触发的中断如外部GPIO中断需要特别注意在进入中断服务程序后NVIC会清除悬起位。但是如果中断引脚上的电平在中断服务程序退出前一直没有恢复比如仍然是高电平那么NVIC硬件会立即再次置起悬起位。A:为什么一直触发不会悬起四、产生多次中断脉冲的中断处理过程脉冲位于中断悬起过程中丢中断情况一中断请求产生于中断悬起过程中如果这种脉冲式中断因为中断悬起寄存器只有一个所以在没有解旋之前都算作一次的中断请求同时他们都是同一个中断标志位所以进入中断服务函数后只会处理一次丢中断情况二中断请求产生于中断服务函数在单核f411不会出现但在多核可能出现此状况就是在中断服务函数的时候中断请求只是一个状态中断请求带来的是中断标志位在后面时刻同时把两个标志位同时清除了。在中断函数进程当中pending位还是能被置一A为什么在处理中断服务函数时有一个中断脉冲触发该中断又可以挂起他不是屏蔽了吗拓展与总结这与我们之前讨论的“标准NVIC行为”有何区别您之前的理解和我们之前的讨论是基于ARM Cortex-M内核NVIC的典型或标准行为。而这张图展示的是一种可能的软件模拟策略或特定硬件控制器的工作方式。我们将两者对比一下结论所以回答您的问题“那这张图为什么有中断请求不能再次悬起”因为这张图描述的不是ARM Cortex-M NVIC的标准硬件行为而是一种特定的、旨在防止中断重入和保证系统稳定性的逻辑模型。 在这种模型下“悬起位”更像是一个“门锁”门锁一旦打开悬起位置1在门被关上之前悬起位清除任何试图再次开门新的中断请求的动作都是无效的。若新中断请求是更高优先级能再次置位悬起位且会嵌套中断即使在当前中断函数中清除了悬起位只要新请求的中断优先级更高硬件会再次置位其悬起位且 CPU 会打断当前中断函数优先执行更高优先级的中断服务。若新中断请求是同优先级或更低优先级分两种情况若系统允许同优先级中断嵌套需特殊配置可再次置位执行完当前函数后会响应新请求若系统默认不允许同 / 低优先级嵌套如 Cortex-M 系列的常规行为悬起位会被置位但要等到当前中断函数执行完毕、退出时才会检测并响应该悬起位。五、异常流程压栈当中断请求后有一段延迟然后从原先的线程执行到异常流程首先数据总线他会压栈会把一些寄存器压入栈中指令总线就回去向量表取向量通过向量找到异常处理指令入栈流程当发生中断当前运行的寄存器会被依次压入栈中假设只有一个主栈帧现在运行到如图所示地方来中断后会直接回到最上边栈底R0并存入了R1-R3,R12和R14因为要回到原来程序还得保存pc指针。其中LR的值会被考入到栈中而寄存器里面的lr的值会变为EXC_RETURN详情可见.调用栈和fault analyzers快速找到bug压栈是通过S-Bus进行压栈I-code就可以进行访问对应的flash区找到对应的异常处理函数六、中断优化A:一般来说 进中断后不是要先判断标志位然后再清楚标志位吗 难道这个标志位有时候是外设自己的挂起寄存器 有些是nvic的标志位在中断处理流程中外设自身的挂起寄存器标志位和NVIC 的 pending 位是两个不同层级的概念处理逻辑也有所区别具体可以从以下角度梳理一、中断产生的 “两层标志” 逻辑中断请求的产生是“外设→NVIC→CPU”的层级传递外设层外设如 EXTI、定时器、USART先产生中断事件将自身的挂起标志位置 1如 EXTI_PR 的某一位、TIMx_SR 的 UIF 位。NVIC 层外设的中断请求被传递到 NVIC 后NVIC 对应通道的pending 位置 1表示 “该中断已被 NVIC 受理等待 CPU 响应”。