• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

中断优先级设计原则

WHL245387 2017-10-19 浏览量:1244

场景:单片机需要处理SPI,UART,CAN、定时器周期中断、外部中断等多个中断任务。

问题:SPI通讯有大概千分之一的错帧。

分析原因:原因不确定,猜猜可能是从机SPI中断被其他高优先级的中断抢占导致通讯异常,因为屏蔽掉其他中断,通讯就正常了。

求助:中断优先级设计原则

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

  • 如果抢占优先级相同 中断同时来了 先处理响应优先级大的 在这里需要注意一点就是 如果抢占优先级相同 低的优先级发生了 虽然另一个中断比他的响应要大 但是不能使它挂起 所以响应优先级只是处理中断同时发生时先处理哪个中断的问题 如果抢占优先级大的 抢占优先级小的无论现在在执不执行 大的都可以让小的挂起而使 自己先执行 .(摘自百度)

    把抢占优先级和响应优先级设置为最高试试.

    • 发布于 2017-10-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 优先级的高低需要根据该中断的重要程度,如果一直在执行,就可以用低优先级;

    在要别的程序执行时,需要打断其他的中断,则用高优先级;优先级的高低需要根据实际情况而定。

    如上你遇到的这种情况,则可以把SPI的优先级设置成你用到的优先级中最高的一个。

    • 发布于2017-10-19
    • 举报
    • 评论 0
    • 0
    • 0

  • spi从级的中断不仅不能被其他中断抢占,还要能够抢占其他中断,因为通讯是主机控制的,必须第一时间响应,否则很可能出现主机那边已经完事了,从机还没反应过来。
    • 发布于2017-10-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 我个人觉得不管是STM32还是51单片机,中断的概念都是一样的,那就是程序出现异常情况怎么处理,这种异常也许是我们人为控制,也有可能是硬件或者软件本身出现的问题,但凡是异常都需要用到中断。STM32除了特别的中断,其他优先级都是可以编译的,优先级:在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx, 用来配置外部中断的优先级, IPR 宽度为 8bit,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。优先级分组
    :NVIC_PriorityGroup_0;NVIC_PriorityGroup_1;NVIC_PriorityGroup_2;NVIC_PriorityGroup_3;NVIC_PriorityGroup_4​。中断编程:1、 使能外设某个中断;2、 初始化 NVIC_InitTypeDef 结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求;3、 编写中断服务函数。以上仅供参考。


    • 发布于2017-10-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

中断优先级设计原则