单片机/MCUwilliam hill官网
直播中

laisvl

8年用户 1030经验值
私信 关注
[问答]

M0516中断优先级怎么设置?

新唐M0516中断优先级的设置,有没有示例,没找到相关接口,谢谢!

回帖(2)

康志强

2024-1-16 09:50:59
设置优先级的函数 NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 调用这个,看一下定义就会用了  参数一个是中断名称另外一个是优先级
举报

陈敏

2024-1-16 16:54:04
在新唐M0516系列芯片中,中断优先级的设置可以通过以下步骤来完成:

1. 首先,选择需要进行优先级设置的中断源,例如外部引脚中断或定时器中断等。

2. 然后,查阅芯片的参考手册或用户手册,寻找中断优先级的寄存器。

3. 在寄存器中,通常会有多个位用于设置中断优先级。具体每个位的含义和设置规则可以在手册中找到。

4. 根据需求,设置对应中断源的优先级。优先级值一般从0到最大值,值越小表示优先级越高。

5. 将设置的优先级值写入到中断优先级的寄存器中。

下面是一个示例代码,演示如何设置两个外部引脚中断的优先级,其中EINT0的优先级较高,EINT1的优先级较低:

```c
#include "M051Series.h"

void EXTI0_IRQHandler(void)
{
    // 处理EINT0中断
    // ...
    // 清除中断标志位
    GPIO_CLR_INT_FLAG(P3, 0);
}

void EXTI1_IRQHandler(void)
{
    // 处理EINT1中断
    // ...
    // 清除中断标志位
    GPIO_CLR_INT_FLAG(P3, 1);
}

int main(void)
{
    // 使能外部引脚中断
    NVIC_EnableIRQ(GPIO_P3_IRQn);
   
    // 设置EINT0的优先级为最高
    NVIC_SetPriority(GPIO_P3_IRQn, 0);
   
    // 设置EINT1的优先级为较低
    NVIC_SetPriority(GPIO_P3_IRQn, 1);
   
    // 程序其他部分
    // ...
   
    // 进入主循环
    while (1)
    {
        // 主循环代码
        // ...
    }
}
```

在示例代码中,首先使用`NVIC_EnableIRQ()`函数来使能外部引脚中断,然后使用`NVIC_SetPriority()`函数分别设置了EINT0和EINT1的中断优先级。

需要注意的是,具体的接口和寄存器名字可能会根据芯片型号的不同而有所差异,以上代码仅供参考。在实际使用中,请参考芯片的具体文档和参考手册来获取正确的接口和寄存器信息。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分