首页 > 其他分享 >RISCV内核中断优先级/Priority

RISCV内核中断优先级/Priority

时间:2024-07-17 14:30:19浏览次数:12  
标签:UART1 优先级 PFIC RISCV Priority 中断 IRQn TMR2

一、讲解

中断优先级分为抢占优先级和响应优先级。配置参数越小,则说明其优先级别越高。

  • 抢占:是指可以打断其他中断函数的属性。出现该属性时会出现中断嵌套;
  • 响应:是指抢占优先级相同情况下,则优先执行响应优先级高的中断;

二、举例

序号 中断名称 优先级
1 TMR1 10
2 TMR2 11
3 UART0 12
4 UART1 13

如上表,TMR2抢占优先级低于TMR1。如果在执行TMR2中断服务函数时,则TMR1中断可以打断TMR2中断。同理,TMR2可以打断正在执行的UART0/UART1中断。

三、操作

①中断嵌套

启动文件startup.s默认有开启,建议不要手动关闭。

	/* 打开嵌套中断、硬件压栈功能 */
	li t0, 0x3
	csrw 0x804, t0

②配置嵌套

/*******************************************************************************
 * @fn      PFIC_SetPriority
 *
 * @brief   Set Interrupt Priority
 *
 * @param   IRQn        - Interrupt Numbers
 * @param   priority    - bit7:         pre-emption priority
 *                        bit6-bit4:    subpriority
 */
RV_STATIC_INLINE void PFIC_SetPriority(IRQn_Type IRQn, uint8_t priority)
{
    PFIC->IPRIOR[(uint32_t)(IRQn)] = priority;
}

中断优先级配置接口函数:PFIC_SetPriority(IRQn_Type IRQn, uint8_t priority)

参数1是配置需要操作的中断函数。

参数2是配置抢占和响应优先级。根据注释,只有高4位具有意义,低4位无意义。其中高4位的最高位代表抢占优先级,高4位的次3位代表响应优先级。配置为0则代表优先级最高。

例如配置UART0/UART1的抢占优先级最高,且UART0的响应优先级高于UART1:

PFIC_SetPriority(UART0_IRQn, 0x00);

PFIC_SetPriority(UART1_IRQn, 0x00);

这样配置,则UART0/UART1可以打断TMR1/TMR2中断。

补充:

stm32的抢占优先级和响应优先级(也叫子优先级)

 

标签:UART1,优先级,PFIC,RISCV,Priority,中断,IRQn,TMR2
From: https://www.cnblogs.com/gscw/p/18306998

相关文章

  • Linux调度器:进程优先级
    一、前言本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nicevalue和schedulingpriority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出了几个典型数......
  • 静态优先级和动态优先级的区别
    在操作系统和调度机制中,静态优先级和动态优先级是两种不同的进程优先级管理方式,它们在调度策略和优先级调整上有明显的区别。静态优先级定义:静态优先级是在进程创建时设定,并在整个进程的生命周期内保持不变。特点:不会随着时间或进程行为变化。通常由系统管理员或应用程......
  • NICE与静态优先级的关系
    在Linux系统中,nice值和静态优先级用于控制进程调度的优先级,但它们的范围和含义有所不同。让我们详细解释一下两者的区别和联系。1.Nice值范围:nice值的范围是从-20到19。-20:最高优先级。19:最低优先级。作用:nice值用于调整进程的相对优先级。nice值越低,进程的优先级越......
  • python中逻辑运算符and 和 or 的优先级问题。
    python的说明文档以及教材上、网上都说明and的优先级大于or。但我经过实际操作,发现其中规律似乎并不简单,下面我列举一些代码,来提出我的疑问:有时候or的优先级高,有时候and优先级高,并且并不是从左至右运算。首先说明python当中的and和or运算逻辑如下(这里必须懂):    1......
  • 动态库链接和加载时的路径搜索优先级
    目录前言动态库的链接动态库的加载前言在开发一个新项目时遇到了动态库加载异常的问题,因此在这里记录一下动态库的链接和加载过程中库路径的搜索优先级的相关知识。动态库的链接现在有一个main.o可重定位目标文件,其中需要用到开源库log4cpp。在链接的时候,我们可以这样链接:g++......
  • PriorityQueue
    PriorityQueue是Java中的一个基于优先级堆的优先队列实现,它能够在O(logn)的时间复杂度内实现元素的插入和删除操作,并且能够自动维护队列中元素的优先级顺序。//传入比较器PriorityQueue<String>priorityQueue=newPriorityQueue<>(Comparator.reverseOrder());add......
  • 运算符的关系,什么叫一元运算符,二元运算符,三元运算符,运算符优先级,以及运算符的
    按照操作数个数区分:一元运算符:一元运算符只需要一个操作数。常见的一元运算符有:1.递增和递减运算符:++和--,用于对操作数进行增加或减少1。2.正负号运算符:+和-,用于表示正负数。3.逻辑非运算符:!,用于对布尔值进行取反。二元运算符:二元运算符需要两个操作数。常见的二元运......
  • Solution - Atcoder ARC127E Priority Queue
    考虑转化一下,每个最后留下来的集合都相对的对应着一个被删除的集合。于是考虑去对被删除的数去计数。然后贪心的,去让每一次\(2\)操作删除的数都是前面加入中还剩下的最后加入的数(因为有的可能被前面的\(2\)操作删了)。对于证明,考虑到如果不是剩下的最后加入的,那么中间可能会......
  • RISCV AIA (五) APLIC
     APLIC在RISC-V系统中,PLIC处理外部中断是通过线中断而非MSI(messagesignalinterrupt)的方式,当系统的hart不具有IMSIC时,hart本身不支持MSI,因此所有的外部中断必须通过PLIC。即使hart具有IMSIC,且大多数的中断使用MSI的方式,但有些设备还是以线中断的方式发出。特别是对于......
  • 衡庐浅析·C语言程序设计·第二章·运算符及其优先级关系(练习题一)
        本文适用于大学的期中期末考试、专升本(专接本、专插本)考试、408等考研预科。如有相关题目疑问或建议欢迎在评论区进行互动。    转载请标明出处。不知道大家有没有消化完第二章的内容。在这里我们将列出一些关于运算符及其优先级关系的课后练习题,方便大家......