来根小辣条 2021-06-21 19:07 采纳率: 0%
浏览 24

VIVADO SDK中使能了GIC中的串口中断导致的定时器中断不好用

在一个程序中同时应用了这两种中断,定时器中断要在串口中断发生后才好用,感觉像是使能了串口中断后影响了定时器中断

//main函数
int main()
{
    int status;
    mio_init(&Gpio);
    uart_init(&Uart_Ps);    //串口初始化
    uart_intr_init(&Intc, &Uart_Ps); //串口中断初始化
    status = timer_init(&Timer);     //定时器初始化
    timer_intr_init(&Intc,&Timer);   //定时器中断初始化
    XScuTimer_Start(&Timer);         //启动定时器
    while (1)
    {
        Control_fun();
    }
}

在uart_intr_init中使能了串口中断XScuGic_Enable(intc, UART_INT_IRQ_ID);

在timer_intr_init中使能了定时器中断XScuGic_Enable(intc_ptr, TIMER_IRPT_INTR);

  • 写回答

1条回答 默认 最新

  • 山外有山a 2024-03-10 21:40
    关注

    在VIVADO SDK中同时使用串口中断和定时器中断时,如果发现使能了串口中断后,定时器中断似乎受到影响(即定时器中断只有在串口中断发生后才工作),这可能是由于以下原因:

    中断优先级问题:

    检查串口中断和定时器中断的优先级设置。如果串口中断的优先级高于定时器中断,当串口中断产生并处理时,若未正确返回或清除中断标志位,则可能导致定时器中断被阻塞或延迟响应。确保合理设定中断优先级,并在中断服务函数中及时清除中断源。
    中断共享向量:

    如果串口和定时器中断共享同一个中断向量,可能会出现抢占和嵌套的问题。确保每个中断都有独立的中断向量,并正确配置中断控制器。
    中断屏蔽与嵌套控制:

    检查中断控制器(GIC)的中断屏蔽寄存器以及中断嵌套相关的控制寄存器设置。在串口中断处理函数中,确认没有全局禁止中断或者对定时器中断进行错误的屏蔽操作。
    中断服务程序中的死循环或阻塞:

    确认串口中断服务程序不会陷入无限循环、长时间阻塞或者没有正确退出。这会导致CPU无法及时响应其他中断请求,包括定时器中断。
    中断挂起与恢复机制:

    在某些情况下,处理一个中断时会自动挂起同级别或低级别的其他中断。检查是否在串口中断服务程序中有意或无意地挂起了所有中断,而忘记在适当的时候恢复它们。
    硬件信号线冲突:

    尽管这种情况较少见,但也需检查硬件设计上是否存在中断信号线冲突的情况,导致定时器中断信号不能正常传递给处理器。
    解决方法:

    逐一排查上述可能的问题点。
    确保在每个中断服务函数最后都正确清除了中断源标志位。
    根据需求调整中断优先级,保证中断可以按预期顺序执行。
    检查代码逻辑,确保在中断处理过程中不会阻碍其他中断的响应。

    评论

报告相同问题?

悬赏问题

  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥20 手机截图相片分辨率降低一半
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)